From d104f60d12d6c6a6335718b56cac59ffe40dd9c3 Mon Sep 17 00:00:00 2001 From: Jan Lupa <jl320820@students.mimuw.edu.pl> Date: Thu, 11 Aug 2016 03:07:01 +0200 Subject: [PATCH] Dependency Parser split into two versions: basic and experimental --- dependencyParser/basic/mate-tools/.classpath | 8 ++++++++ dependencyParser/basic/mate-tools/.externalToolBuilders/New_Builder.launch | 8 ++++++++ dependencyParser/basic/mate-tools/.externalToolBuilders/ana.launch | 20 ++++++++++++++++++++ dependencyParser/basic/mate-tools/.project | 17 +++++++++++++++++ dependencyParser/basic/mate-tools/build.xml | 64 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ dependencyParser/basic/mate-tools/lib/commons-math-2.2.jar | Bin 0 -> 988514 bytes dependencyParser/basic/mate-tools/lib/trove-2.0.4.jar | Bin 0 -> 746790 bytes dependencyParser/basic/mate-tools/src/decoder/ParallelDecoder.java | 155 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ dependencyParser/basic/mate-tools/src/decoder/ParallelRearrangeNBest.java | 136 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ dependencyParser/basic/mate-tools/src/decoder/ParallelRearrangeNBest2.java | 151 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ dependencyParser/basic/mate-tools/src/examples/DependencyParser.java | 92 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ dependencyParser/basic/mate-tools/src/examples/FullPipelineSpanish.java | 98 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ dependencyParser/basic/mate-tools/src/examples/FullPipelineTest.java | 110 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ dependencyParser/basic/mate-tools/src/examples/MorphTagger.java | 79 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ dependencyParser/basic/mate-tools/src/examples/ParseOnly.java | 50 ++++++++++++++++++++++++++++++++++++++++++++++++++ dependencyParser/basic/mate-tools/src/examples/Pipeline.java | 95 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ dependencyParser/basic/mate-tools/src/extractors/Extractor.java | 59 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ dependencyParser/basic/mate-tools/src/extractors/ExtractorClusterStacked.java | 958 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ dependencyParser/basic/mate-tools/src/extractors/ExtractorClusterStackedR2.java | 937 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ dependencyParser/basic/mate-tools/src/extractors/ExtractorFactory.java | 44 ++++++++++++++++++++++++++++++++++++++++++++ dependencyParser/basic/mate-tools/src/extractors/ExtractorReranker.java | 621 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ dependencyParser/basic/mate-tools/src/extractors/ParallelExtract.java | 194 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ dependencyParser/basic/mate-tools/src/is2/data/Closed.java | 31 +++++++++++++++++++++++++++++++ dependencyParser/basic/mate-tools/src/is2/data/Cluster.java | 158 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ dependencyParser/basic/mate-tools/src/is2/data/D4.java | 191 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ dependencyParser/basic/mate-tools/src/is2/data/D6.java | 197 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ dependencyParser/basic/mate-tools/src/is2/data/D7.java | 220 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ dependencyParser/basic/mate-tools/src/is2/data/DPSTree.java | 115 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ dependencyParser/basic/mate-tools/src/is2/data/DX.java | 58 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ dependencyParser/basic/mate-tools/src/is2/data/DataF.java | 39 +++++++++++++++++++++++++++++++++++++++ dependencyParser/basic/mate-tools/src/is2/data/DataFES.java | 38 ++++++++++++++++++++++++++++++++++++++ dependencyParser/basic/mate-tools/src/is2/data/DataT.java | 25 +++++++++++++++++++++++++ dependencyParser/basic/mate-tools/src/is2/data/Edges.java | 224 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ dependencyParser/basic/mate-tools/src/is2/data/F2S.java | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ dependencyParser/basic/mate-tools/src/is2/data/F2SD.java | 44 ++++++++++++++++++++++++++++++++++++++++++++ dependencyParser/basic/mate-tools/src/is2/data/F2SF.java | 78 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ dependencyParser/basic/mate-tools/src/is2/data/F2SP.java | 76 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ dependencyParser/basic/mate-tools/src/is2/data/F2ST.java | 47 +++++++++++++++++++++++++++++++++++++++++++++++ dependencyParser/basic/mate-tools/src/is2/data/FV.java | 551 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ dependencyParser/basic/mate-tools/src/is2/data/FVR.java | 468 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ dependencyParser/basic/mate-tools/src/is2/data/IEncoder.java | 26 ++++++++++++++++++++++++++ dependencyParser/basic/mate-tools/src/is2/data/IEncoderPlus.java | 28 ++++++++++++++++++++++++++++ dependencyParser/basic/mate-tools/src/is2/data/IFV.java | 28 ++++++++++++++++++++++++++++ dependencyParser/basic/mate-tools/src/is2/data/Instances.java | 392 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ dependencyParser/basic/mate-tools/src/is2/data/InstancesTagger.java | 77 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ dependencyParser/basic/mate-tools/src/is2/data/IntIntHash.java | 270 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ dependencyParser/basic/mate-tools/src/is2/data/Long2Int.java | 113 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ dependencyParser/basic/mate-tools/src/is2/data/Long2IntExact.java | 60 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ dependencyParser/basic/mate-tools/src/is2/data/Long2IntInterface.java | 15 +++++++++++++++ dependencyParser/basic/mate-tools/src/is2/data/Long2IntQuick.java | 47 +++++++++++++++++++++++++++++++++++++++++++++++ dependencyParser/basic/mate-tools/src/is2/data/MFB.java | 256 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ dependencyParser/basic/mate-tools/src/is2/data/MFC.java | 246 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ dependencyParser/basic/mate-tools/src/is2/data/MFO.java | 386 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ dependencyParser/basic/mate-tools/src/is2/data/Open.java | 37 +++++++++++++++++++++++++++++++++++++ dependencyParser/basic/mate-tools/src/is2/data/PSTree.java | 711 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ dependencyParser/basic/mate-tools/src/is2/data/Parameter.java | 13 +++++++++++++ dependencyParser/basic/mate-tools/src/is2/data/ParametersFloat.java | 183 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ dependencyParser/basic/mate-tools/src/is2/data/Parse.java | 157 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ dependencyParser/basic/mate-tools/src/is2/data/ParseNBest.java | 107 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ dependencyParser/basic/mate-tools/src/is2/data/PipeGen.java | 83 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ dependencyParser/basic/mate-tools/src/is2/data/PrimeFinder.java | 66 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ dependencyParser/basic/mate-tools/src/is2/data/RandomIndex.java | 161 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ dependencyParser/basic/mate-tools/src/is2/data/SentenceData09.java | 530 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ dependencyParser/basic/mate-tools/src/is2/data/Thesaurus.java | 194 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ dependencyParser/basic/mate-tools/src/is2/io/CONLLReader04.java | 272 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ dependencyParser/basic/mate-tools/src/is2/io/CONLLReader06.java | 275 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ dependencyParser/basic/mate-tools/src/is2/io/CONLLReader08.java | 413 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ dependencyParser/basic/mate-tools/src/is2/io/CONLLReader09.java | 411 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ dependencyParser/basic/mate-tools/src/is2/io/CONLLWriter06.java | 193 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ dependencyParser/basic/mate-tools/src/is2/io/CONLLWriter09.java | 307 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ dependencyParser/basic/mate-tools/src/is2/io/IOGenerals.java | 33 +++++++++++++++++++++++++++++++++ dependencyParser/basic/mate-tools/src/is2/io/PSReader.java | 23 +++++++++++++++++++++++ dependencyParser/basic/mate-tools/src/is2/io/TigerReader.java | 403 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ dependencyParser/basic/mate-tools/src/is2/lemmatizer/Evaluator.java | 105 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ dependencyParser/basic/mate-tools/src/is2/lemmatizer/Lemmatizer.java | 535 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ dependencyParser/basic/mate-tools/src/is2/lemmatizer/MFO.java | 257 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ dependencyParser/basic/mate-tools/src/is2/lemmatizer/Options.java | 67 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ dependencyParser/basic/mate-tools/src/is2/lemmatizer/Pipe.java | 585 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ dependencyParser/basic/mate-tools/src/is2/lemmatizer/StringEdit.java | 318 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ dependencyParser/basic/mate-tools/src/is2/mtag/Convert.java | 98 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ dependencyParser/basic/mate-tools/src/is2/mtag/Evaluator.java | 148 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ dependencyParser/basic/mate-tools/src/is2/mtag/ExtractorM.java | 514 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ dependencyParser/basic/mate-tools/src/is2/mtag/MFO.java | 540 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ dependencyParser/basic/mate-tools/src/is2/mtag/Options.java | 45 +++++++++++++++++++++++++++++++++++++++++++++ dependencyParser/basic/mate-tools/src/is2/mtag/Pipe.java | 508 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ dependencyParser/basic/mate-tools/src/is2/mtag/Tagger.java | 371 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ dependencyParser/basic/mate-tools/src/is2/parser/Closed.java | 32 ++++++++++++++++++++++++++++++++ dependencyParser/basic/mate-tools/src/is2/parser/D5.java | 254 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ dependencyParser/basic/mate-tools/src/is2/parser/Decoder.java | 161 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ dependencyParser/basic/mate-tools/src/is2/parser/Edges.java | 206 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ dependencyParser/basic/mate-tools/src/is2/parser/Evaluator.java | 94 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ dependencyParser/basic/mate-tools/src/is2/parser/Extractor.java | 973 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ dependencyParser/basic/mate-tools/src/is2/parser/MFO.java | 257 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ dependencyParser/basic/mate-tools/src/is2/parser/Open.java | 38 ++++++++++++++++++++++++++++++++++++++ dependencyParser/basic/mate-tools/src/is2/parser/Options.java | 63 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ dependencyParser/basic/mate-tools/src/is2/parser/ParallelDecoder.java | 170 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ dependencyParser/basic/mate-tools/src/is2/parser/ParallelExtract.java | 246 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ dependencyParser/basic/mate-tools/src/is2/parser/ParallelRearrange.java | 127 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ dependencyParser/basic/mate-tools/src/is2/parser/Parameters.java | 38 ++++++++++++++++++++++++++++++++++++++ dependencyParser/basic/mate-tools/src/is2/parser/ParametersFloat.java | 137 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ dependencyParser/basic/mate-tools/src/is2/parser/Parser.java | 664 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ dependencyParser/basic/mate-tools/src/is2/parser/Pipe.java | 221 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ dependencyParser/basic/mate-tools/src/is2/parser/package.html | 11 +++++++++++ dependencyParser/basic/mate-tools/src/is2/parserR2/Decoder.java | 377 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ dependencyParser/basic/mate-tools/src/is2/parserR2/Options.java | 77 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ dependencyParser/basic/mate-tools/src/is2/parserR2/Parameters.java | 38 ++++++++++++++++++++++++++++++++++++++ dependencyParser/basic/mate-tools/src/is2/parserR2/ParametersFloat.java | 181 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ dependencyParser/basic/mate-tools/src/is2/parserR2/Parser.java | 690 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ dependencyParser/basic/mate-tools/src/is2/parserR2/Pipe.java | 257 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ dependencyParser/basic/mate-tools/src/is2/parserR2/PipeReranker.java | 138 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ dependencyParser/basic/mate-tools/src/is2/parserR2/Reranker.java | 1059 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ dependencyParser/basic/mate-tools/src/is2/parserR2/package.html | 3 +++ dependencyParser/basic/mate-tools/src/is2/tag/ExtractorT2.java | 523 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ dependencyParser/basic/mate-tools/src/is2/tag/Lexicon.java | 140 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ dependencyParser/basic/mate-tools/src/is2/tag/MFO.java | 537 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ dependencyParser/basic/mate-tools/src/is2/tag/Options.java | 125 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ dependencyParser/basic/mate-tools/src/is2/tag/POS.java | 29 +++++++++++++++++++++++++++++ dependencyParser/basic/mate-tools/src/is2/tag/Tagger.java | 500 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ dependencyParser/basic/mate-tools/src/is2/tag/package.html | 4 ++++ dependencyParser/basic/mate-tools/src/is2/tools/IPipe.java | 30 ++++++++++++++++++++++++++++++ dependencyParser/basic/mate-tools/src/is2/tools/Retrainable.java | 25 +++++++++++++++++++++++++ dependencyParser/basic/mate-tools/src/is2/tools/Tool.java | 25 +++++++++++++++++++++++++ dependencyParser/basic/mate-tools/src/is2/tools/ToolIO.java | 17 +++++++++++++++++ dependencyParser/basic/mate-tools/src/is2/tools/Train.java | 25 +++++++++++++++++++++++++ dependencyParser/basic/mate-tools/src/is2/util/Convert.java | 455 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ dependencyParser/basic/mate-tools/src/is2/util/Convert0409.java | 182 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ dependencyParser/basic/mate-tools/src/is2/util/ConvertADJ.java | 129 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ dependencyParser/basic/mate-tools/src/is2/util/ConvertLowerCase0909.java | 89 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ dependencyParser/basic/mate-tools/src/is2/util/ConvertTiger2CoNLL.java | 124 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ dependencyParser/basic/mate-tools/src/is2/util/DB.java | 81 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ dependencyParser/basic/mate-tools/src/is2/util/Edges.java | 206 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ dependencyParser/basic/mate-tools/src/is2/util/Evaluator.java | 616 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ dependencyParser/basic/mate-tools/src/is2/util/EvaluatorTagger.java | 736 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ dependencyParser/basic/mate-tools/src/is2/util/ExtractParagraphs.java | 87 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ dependencyParser/basic/mate-tools/src/is2/util/IntStack.java | 86 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ dependencyParser/basic/mate-tools/src/is2/util/Long2Int.java | 81 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ dependencyParser/basic/mate-tools/src/is2/util/Options.java | 129 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ dependencyParser/basic/mate-tools/src/is2/util/OptionsSuper.java | 216 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ dependencyParser/basic/mate-tools/src/is2/util/ParserEvaluator.java | 94 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ dependencyParser/basic/mate-tools/src/is2/util/Split.java | 94 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ dependencyParser/basic/mate-tools/src/is2/util/Split2.java | 70 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ dependencyParser/basic/mate-tools/src/is2/util/Split3.java | 67 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ dependencyParser/examples/README.txt | 5 ----- dependencyParser/examples/d2 output.txt | 4023 --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- dependencyParser/examples/edges output.txt | 552 ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ dependencyParser/examples/is output.txt | 199 ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- dependencyParser/examples/test.csv | 14 -------------- dependencyParser/examples/test.out | 210 ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ dependencyParser/experimental/examples/README.txt | 5 +++++ dependencyParser/experimental/examples/d2 output.txt | 4023 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ dependencyParser/experimental/examples/edges output.txt | 552 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ dependencyParser/experimental/examples/is output.txt | 199 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ dependencyParser/experimental/examples/test.csv | 14 ++++++++++++++ dependencyParser/experimental/examples/test.out | 210 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ dependencyParser/experimental/mate-tools/.classpath | 8 ++++++++ dependencyParser/experimental/mate-tools/.externalToolBuilders/New_Builder.launch | 8 ++++++++ dependencyParser/experimental/mate-tools/.externalToolBuilders/ana.launch | 20 ++++++++++++++++++++ dependencyParser/experimental/mate-tools/.project | 17 +++++++++++++++++ dependencyParser/experimental/mate-tools/build.xml | 64 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ dependencyParser/experimental/mate-tools/classes/decoder/ParallelDecoder$DSet.class | Bin 0 -> 485 bytes dependencyParser/experimental/mate-tools/classes/decoder/ParallelDecoder.class | Bin 0 -> 7230 bytes dependencyParser/experimental/mate-tools/classes/decoder/ParallelRearrangeNBest$PA.class | Bin 0 -> 563 bytes dependencyParser/experimental/mate-tools/classes/decoder/ParallelRearrangeNBest.class | Bin 0 -> 2802 bytes dependencyParser/experimental/mate-tools/classes/decoder/ParallelRearrangeNBest2$PA.class | Bin 0 -> 729 bytes dependencyParser/experimental/mate-tools/classes/decoder/ParallelRearrangeNBest2.class | Bin 0 -> 3214 bytes dependencyParser/experimental/mate-tools/classes/examples/DependencyParser.class | Bin 0 -> 2933 bytes dependencyParser/experimental/mate-tools/classes/examples/FullPipelineSpanish.class | Bin 0 -> 3598 bytes dependencyParser/experimental/mate-tools/classes/examples/FullPipelineTest.class | Bin 0 -> 2998 bytes dependencyParser/experimental/mate-tools/classes/examples/MorphTagger.class | Bin 0 -> 2729 bytes dependencyParser/experimental/mate-tools/classes/examples/ParseOnly.class | Bin 0 -> 1484 bytes dependencyParser/experimental/mate-tools/classes/examples/Pipeline.class | Bin 0 -> 3068 bytes dependencyParser/experimental/mate-tools/classes/extractors/Extractor.class | Bin 0 -> 644 bytes dependencyParser/experimental/mate-tools/classes/extractors/ExtractorClusterStacked.class | Bin 0 -> 34872 bytes dependencyParser/experimental/mate-tools/classes/extractors/ExtractorClusterStackedR2.class | Bin 0 -> 34015 bytes dependencyParser/experimental/mate-tools/classes/extractors/ExtractorFactory.class | Bin 0 -> 856 bytes dependencyParser/experimental/mate-tools/classes/extractors/ExtractorReranker.class | Bin 0 -> 18998 bytes dependencyParser/experimental/mate-tools/classes/extractors/ParallelExtract$DSet.class | Bin 0 -> 402 bytes dependencyParser/experimental/mate-tools/classes/extractors/ParallelExtract.class | Bin 0 -> 5033 bytes dependencyParser/experimental/mate-tools/classes/is2/data/Closed.class | Bin 0 -> 889 bytes dependencyParser/experimental/mate-tools/classes/is2/data/Cluster.class | Bin 0 -> 4313 bytes dependencyParser/experimental/mate-tools/classes/is2/data/D4.class | Bin 0 -> 5263 bytes dependencyParser/experimental/mate-tools/classes/is2/data/D6.class | Bin 0 -> 4876 bytes dependencyParser/experimental/mate-tools/classes/is2/data/D7.class | Bin 0 -> 5529 bytes dependencyParser/experimental/mate-tools/classes/is2/data/DPSTree.class | Bin 0 -> 2035 bytes dependencyParser/experimental/mate-tools/classes/is2/data/DX.class | Bin 0 -> 785 bytes dependencyParser/experimental/mate-tools/classes/is2/data/DataF.class | Bin 0 -> 604 bytes dependencyParser/experimental/mate-tools/classes/is2/data/DataFES.class | Bin 0 -> 2439 bytes dependencyParser/experimental/mate-tools/classes/is2/data/DataT.class | Bin 0 -> 437 bytes dependencyParser/experimental/mate-tools/classes/is2/data/Edges$C.class | Bin 0 -> 1470 bytes dependencyParser/experimental/mate-tools/classes/is2/data/Edges.class | Bin 0 -> 4827 bytes dependencyParser/experimental/mate-tools/classes/is2/data/F2S.class | Bin 0 -> 1066 bytes dependencyParser/experimental/mate-tools/classes/is2/data/F2SD.class | Bin 0 -> 907 bytes dependencyParser/experimental/mate-tools/classes/is2/data/F2SF.class | Bin 0 -> 1659 bytes dependencyParser/experimental/mate-tools/classes/is2/data/F2SP.class | Bin 0 -> 1660 bytes dependencyParser/experimental/mate-tools/classes/is2/data/F2ST.class | Bin 0 -> 984 bytes dependencyParser/experimental/mate-tools/classes/is2/data/FV.class | Bin 0 -> 10524 bytes dependencyParser/experimental/mate-tools/classes/is2/data/FVR.class | Bin 0 -> 7780 bytes dependencyParser/experimental/mate-tools/classes/is2/data/IEncoder.class | Bin 0 -> 384 bytes dependencyParser/experimental/mate-tools/classes/is2/data/IEncoderPlus.class | Bin 0 -> 407 bytes dependencyParser/experimental/mate-tools/classes/is2/data/IFV.class | Bin 0 -> 974 bytes dependencyParser/experimental/mate-tools/classes/is2/data/Instances.class | Bin 0 -> 9232 bytes dependencyParser/experimental/mate-tools/classes/is2/data/InstancesTagger.class | Bin 0 -> 4141 bytes dependencyParser/experimental/mate-tools/classes/is2/data/IntIntHash.class | Bin 0 -> 5365 bytes dependencyParser/experimental/mate-tools/classes/is2/data/Long2Int.class | Bin 0 -> 2492 bytes dependencyParser/experimental/mate-tools/classes/is2/data/Long2IntExact.class | Bin 0 -> 1052 bytes dependencyParser/experimental/mate-tools/classes/is2/data/Long2IntInterface.class | Bin 0 -> 166 bytes dependencyParser/experimental/mate-tools/classes/is2/data/Long2IntQuick.class | Bin 0 -> 718 bytes dependencyParser/experimental/mate-tools/classes/is2/data/MFB.class | Bin 0 -> 6510 bytes dependencyParser/experimental/mate-tools/classes/is2/data/MFC.class | Bin 0 -> 6546 bytes dependencyParser/experimental/mate-tools/classes/is2/data/MFO$Data4.class | Bin 0 -> 809 bytes dependencyParser/experimental/mate-tools/classes/is2/data/MFO.class | Bin 0 -> 8558 bytes dependencyParser/experimental/mate-tools/classes/is2/data/Open.class | Bin 0 -> 1047 bytes dependencyParser/experimental/mate-tools/classes/is2/data/PSTree.class | Bin 0 -> 11849 bytes dependencyParser/experimental/mate-tools/classes/is2/data/Parameter.class | Bin 0 -> 270 bytes dependencyParser/experimental/mate-tools/classes/is2/data/ParametersFloat.class | Bin 0 -> 4869 bytes dependencyParser/experimental/mate-tools/classes/is2/data/Parse.class | Bin 0 -> 3425 bytes dependencyParser/experimental/mate-tools/classes/is2/data/ParseNBest.class | Bin 0 -> 2410 bytes dependencyParser/experimental/mate-tools/classes/is2/data/PipeGen.class | Bin 0 -> 3772 bytes dependencyParser/experimental/mate-tools/classes/is2/data/PrimeFinder.class | Bin 0 -> 3237 bytes dependencyParser/experimental/mate-tools/classes/is2/data/RandomIndex.class | Bin 0 -> 2136 bytes dependencyParser/experimental/mate-tools/classes/is2/data/SentenceData09.class | Bin 0 -> 10528 bytes dependencyParser/experimental/mate-tools/classes/is2/data/Thesaurus.class | Bin 0 -> 4767 bytes dependencyParser/experimental/mate-tools/classes/is2/io/CONLLReader04.class | Bin 0 -> 6133 bytes dependencyParser/experimental/mate-tools/classes/is2/io/CONLLReader06.class | Bin 0 -> 6262 bytes dependencyParser/experimental/mate-tools/classes/is2/io/CONLLReader08.class | Bin 0 -> 7771 bytes dependencyParser/experimental/mate-tools/classes/is2/io/CONLLReader09.class | Bin 0 -> 8166 bytes dependencyParser/experimental/mate-tools/classes/is2/io/CONLLWriter06.class | Bin 0 -> 5397 bytes dependencyParser/experimental/mate-tools/classes/is2/io/CONLLWriter09.class | Bin 0 -> 7210 bytes dependencyParser/experimental/mate-tools/classes/is2/io/IOGenerals.class | Bin 0 -> 803 bytes dependencyParser/experimental/mate-tools/classes/is2/io/PSReader.class | Bin 0 -> 210 bytes dependencyParser/experimental/mate-tools/classes/is2/io/TigerReader$Line.class | Bin 0 -> 462 bytes dependencyParser/experimental/mate-tools/classes/is2/io/TigerReader.class | Bin 0 -> 4750 bytes dependencyParser/experimental/mate-tools/classes/is2/lemmatizer/Evaluator$1.class | Bin 0 -> 1371 bytes dependencyParser/experimental/mate-tools/classes/is2/lemmatizer/Evaluator.class | Bin 0 -> 3837 bytes dependencyParser/experimental/mate-tools/classes/is2/lemmatizer/Lemmatizer$1.class | Bin 0 -> 1499 bytes dependencyParser/experimental/mate-tools/classes/is2/lemmatizer/Lemmatizer.class | Bin 0 -> 15094 bytes dependencyParser/experimental/mate-tools/classes/is2/lemmatizer/MFO.class | Bin 0 -> 6423 bytes dependencyParser/experimental/mate-tools/classes/is2/lemmatizer/Options.class | Bin 0 -> 3195 bytes dependencyParser/experimental/mate-tools/classes/is2/lemmatizer/Pipe$1.class | Bin 0 -> 1430 bytes dependencyParser/experimental/mate-tools/classes/is2/lemmatizer/Pipe.class | Bin 0 -> 18093 bytes dependencyParser/experimental/mate-tools/classes/is2/lemmatizer/StringEdit.class | Bin 0 -> 5863 bytes dependencyParser/experimental/mate-tools/classes/is2/mtag/Convert.class | Bin 0 -> 3442 bytes dependencyParser/experimental/mate-tools/classes/is2/mtag/Evaluator$1.class | Bin 0 -> 1353 bytes dependencyParser/experimental/mate-tools/classes/is2/mtag/Evaluator.class | Bin 0 -> 5012 bytes dependencyParser/experimental/mate-tools/classes/is2/mtag/ExtractorM.class | Bin 0 -> 16754 bytes dependencyParser/experimental/mate-tools/classes/is2/mtag/MFO$Data.class | Bin 0 -> 576 bytes dependencyParser/experimental/mate-tools/classes/is2/mtag/MFO$Data4.class | Bin 0 -> 3022 bytes dependencyParser/experimental/mate-tools/classes/is2/mtag/MFO.class | Bin 0 -> 8628 bytes dependencyParser/experimental/mate-tools/classes/is2/mtag/Options.class | Bin 0 -> 2760 bytes dependencyParser/experimental/mate-tools/classes/is2/mtag/Pipe.class | Bin 0 -> 16478 bytes dependencyParser/experimental/mate-tools/classes/is2/mtag/Tagger.class | Bin 0 -> 11439 bytes dependencyParser/experimental/mate-tools/classes/is2/parser/Closed.class | Bin 0 -> 806 bytes dependencyParser/experimental/mate-tools/classes/is2/parser/D5.class | Bin 0 -> 4353 bytes dependencyParser/experimental/mate-tools/classes/is2/parser/Decoder.class | Bin 0 -> 5509 bytes dependencyParser/experimental/mate-tools/classes/is2/parser/Edges$C.class | Bin 0 -> 1476 bytes dependencyParser/experimental/mate-tools/classes/is2/parser/Edges.class | Bin 0 -> 4849 bytes dependencyParser/experimental/mate-tools/classes/is2/parser/Evaluator$Results.class | Bin 0 -> 424 bytes dependencyParser/experimental/mate-tools/classes/is2/parser/Evaluator.class | Bin 0 -> 3009 bytes dependencyParser/experimental/mate-tools/classes/is2/parser/Extractor.class | Bin 0 -> 37772 bytes dependencyParser/experimental/mate-tools/classes/is2/parser/MFO.class | Bin 0 -> 7825 bytes dependencyParser/experimental/mate-tools/classes/is2/parser/Open.class | Bin 0 -> 1059 bytes dependencyParser/experimental/mate-tools/classes/is2/parser/Options.class | Bin 0 -> 3330 bytes dependencyParser/experimental/mate-tools/classes/is2/parser/ParallelDecoder$DSet.class | Bin 0 -> 497 bytes dependencyParser/experimental/mate-tools/classes/is2/parser/ParallelDecoder.class | Bin 0 -> 7039 bytes dependencyParser/experimental/mate-tools/classes/is2/parser/ParallelExtract$DSet.class | Bin 0 -> 402 bytes dependencyParser/experimental/mate-tools/classes/is2/parser/ParallelExtract.class | Bin 0 -> 6618 bytes dependencyParser/experimental/mate-tools/classes/is2/parser/ParallelRearrange$PA.class | Bin 0 -> 595 bytes dependencyParser/experimental/mate-tools/classes/is2/parser/ParallelRearrange.class | Bin 0 -> 2669 bytes dependencyParser/experimental/mate-tools/classes/is2/parser/Parameters.class | Bin 0 -> 598 bytes dependencyParser/experimental/mate-tools/classes/is2/parser/ParametersFloat.class | Bin 0 -> 3497 bytes dependencyParser/experimental/mate-tools/classes/is2/parser/Parser.class | Bin 0 -> 18990 bytes dependencyParser/experimental/mate-tools/classes/is2/parser/Pipe.class | Bin 0 -> 6984 bytes dependencyParser/experimental/mate-tools/classes/is2/parser/package.html | 11 +++++++++++ dependencyParser/experimental/mate-tools/classes/is2/parserR2/Decoder.class | Bin 0 -> 8871 bytes dependencyParser/experimental/mate-tools/classes/is2/parserR2/Options.class | Bin 0 -> 3864 bytes dependencyParser/experimental/mate-tools/classes/is2/parserR2/Parameters.class | Bin 0 -> 602 bytes dependencyParser/experimental/mate-tools/classes/is2/parserR2/ParametersFloat.class | Bin 0 -> 4532 bytes dependencyParser/experimental/mate-tools/classes/is2/parserR2/Parser.class | Bin 0 -> 17961 bytes dependencyParser/experimental/mate-tools/classes/is2/parserR2/Pipe.class | Bin 0 -> 7608 bytes dependencyParser/experimental/mate-tools/classes/is2/parserR2/PipeReranker.class | Bin 0 -> 4042 bytes dependencyParser/experimental/mate-tools/classes/is2/parserR2/Reranker.class | Bin 0 -> 26638 bytes dependencyParser/experimental/mate-tools/classes/is2/parserR2/package.html | 3 +++ dependencyParser/experimental/mate-tools/classes/is2/tag/ExtractorT2.class | Bin 0 -> 17820 bytes dependencyParser/experimental/mate-tools/classes/is2/tag/Lexicon.class | Bin 0 -> 3857 bytes dependencyParser/experimental/mate-tools/classes/is2/tag/MFO$Data4.class | Bin 0 -> 3019 bytes dependencyParser/experimental/mate-tools/classes/is2/tag/MFO.class | Bin 0 -> 8816 bytes dependencyParser/experimental/mate-tools/classes/is2/tag/Options.class | Bin 0 -> 4563 bytes dependencyParser/experimental/mate-tools/classes/is2/tag/POS.class | Bin 0 -> 1042 bytes dependencyParser/experimental/mate-tools/classes/is2/tag/Tagger.class | Bin 0 -> 12998 bytes dependencyParser/experimental/mate-tools/classes/is2/tag/package.html | 4 ++++ dependencyParser/experimental/mate-tools/classes/is2/tools/IPipe.class | Bin 0 -> 268 bytes dependencyParser/experimental/mate-tools/classes/is2/tools/Retrainable.class | Bin 0 -> 206 bytes dependencyParser/experimental/mate-tools/classes/is2/tools/Tool.class | Bin 0 -> 170 bytes dependencyParser/experimental/mate-tools/classes/is2/tools/ToolIO.class | Bin 0 -> 129 bytes dependencyParser/experimental/mate-tools/classes/is2/tools/Train.class | Bin 0 -> 365 bytes dependencyParser/experimental/mate-tools/classes/is2/util/Convert.class | Bin 0 -> 8979 bytes dependencyParser/experimental/mate-tools/classes/is2/util/Convert0409.class | Bin 0 -> 3967 bytes dependencyParser/experimental/mate-tools/classes/is2/util/ConvertADJ.class | Bin 0 -> 3356 bytes dependencyParser/experimental/mate-tools/classes/is2/util/ConvertLowerCase0909.class | Bin 0 -> 1702 bytes dependencyParser/experimental/mate-tools/classes/is2/util/ConvertTiger2CoNLL.class | Bin 0 -> 3559 bytes dependencyParser/experimental/mate-tools/classes/is2/util/DB.class | Bin 0 -> 2535 bytes dependencyParser/experimental/mate-tools/classes/is2/util/Edges$C.class | Bin 0 -> 1470 bytes dependencyParser/experimental/mate-tools/classes/is2/util/Edges.class | Bin 0 -> 4211 bytes dependencyParser/experimental/mate-tools/classes/is2/util/Evaluator$1.class | Bin 0 -> 1359 bytes dependencyParser/experimental/mate-tools/classes/is2/util/Evaluator$Results.class | Bin 0 -> 558 bytes dependencyParser/experimental/mate-tools/classes/is2/util/Evaluator.class | Bin 0 -> 14710 bytes dependencyParser/experimental/mate-tools/classes/is2/util/EvaluatorTagger$1.class | Bin 0 -> 1383 bytes dependencyParser/experimental/mate-tools/classes/is2/util/EvaluatorTagger$2.class | Bin 0 -> 1412 bytes dependencyParser/experimental/mate-tools/classes/is2/util/EvaluatorTagger$Results.class | Bin 0 -> 582 bytes dependencyParser/experimental/mate-tools/classes/is2/util/EvaluatorTagger.class | Bin 0 -> 18350 bytes dependencyParser/experimental/mate-tools/classes/is2/util/ExtractParagraphs.class | Bin 0 -> 2592 bytes dependencyParser/experimental/mate-tools/classes/is2/util/IntStack.class | Bin 0 -> 1918 bytes dependencyParser/experimental/mate-tools/classes/is2/util/Long2Int.class | Bin 0 -> 892 bytes dependencyParser/experimental/mate-tools/classes/is2/util/Options.class | Bin 0 -> 4636 bytes dependencyParser/experimental/mate-tools/classes/is2/util/OptionsSuper.class | Bin 0 -> 7107 bytes dependencyParser/experimental/mate-tools/classes/is2/util/ParserEvaluator$Results.class | Bin 0 -> 442 bytes dependencyParser/experimental/mate-tools/classes/is2/util/ParserEvaluator.class | Bin 0 -> 3074 bytes dependencyParser/experimental/mate-tools/classes/is2/util/Split.class | Bin 0 -> 2958 bytes dependencyParser/experimental/mate-tools/classes/is2/util/Split2.class | Bin 0 -> 2147 bytes dependencyParser/experimental/mate-tools/classes/is2/util/Split3.class | Bin 0 -> 1688 bytes dependencyParser/experimental/mate-tools/lib/commons-math-2.2.jar | Bin 0 -> 988514 bytes dependencyParser/experimental/mate-tools/lib/trove-2.0.4.jar | Bin 0 -> 746790 bytes dependencyParser/experimental/mate-tools/src/decoder/ParallelDecoder.java | 189 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ dependencyParser/experimental/mate-tools/src/decoder/ParallelRearrangeNBest.java | 144 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ dependencyParser/experimental/mate-tools/src/decoder/ParallelRearrangeNBest2.java | 158 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ dependencyParser/experimental/mate-tools/src/examples/DependencyParser.java | 90 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ dependencyParser/experimental/mate-tools/src/examples/FullPipelineSpanish.java | 108 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ dependencyParser/experimental/mate-tools/src/examples/FullPipelineTest.java | 110 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ dependencyParser/experimental/mate-tools/src/examples/MorphTagger.java | 79 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ dependencyParser/experimental/mate-tools/src/examples/ParseOnly.java | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ dependencyParser/experimental/mate-tools/src/examples/Pipeline.java | 90 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ dependencyParser/experimental/mate-tools/src/extractors/Extractor.java | 52 ++++++++++++++++++++++++++++++++++++++++++++++++++++ dependencyParser/experimental/mate-tools/src/extractors/ExtractorClusterStacked.java | 1946 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ dependencyParser/experimental/mate-tools/src/extractors/ExtractorClusterStackedR2.java | 1929 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ dependencyParser/experimental/mate-tools/src/extractors/ExtractorFactory.java | 42 ++++++++++++++++++++++++++++++++++++++++++ dependencyParser/experimental/mate-tools/src/extractors/ExtractorReranker.java | 1080 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ dependencyParser/experimental/mate-tools/src/extractors/ParallelExtract.java | 193 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ dependencyParser/experimental/mate-tools/src/is2/data/Closed.java | 28 ++++++++++++++++++++++++++++ dependencyParser/experimental/mate-tools/src/is2/data/Cluster.java | 163 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ dependencyParser/experimental/mate-tools/src/is2/data/D4.java | 252 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ dependencyParser/experimental/mate-tools/src/is2/data/D6.java | 260 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ dependencyParser/experimental/mate-tools/src/is2/data/D7.java | 290 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ dependencyParser/experimental/mate-tools/src/is2/data/DPSTree.java | 109 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ dependencyParser/experimental/mate-tools/src/is2/data/DX.java | 56 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ dependencyParser/experimental/mate-tools/src/is2/data/DataF.java | 35 +++++++++++++++++++++++++++++++++++ dependencyParser/experimental/mate-tools/src/is2/data/DataFES.java | 71 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ dependencyParser/experimental/mate-tools/src/is2/data/DataT.java | 19 +++++++++++++++++++ dependencyParser/experimental/mate-tools/src/is2/data/Edges.java | 216 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ dependencyParser/experimental/mate-tools/src/is2/data/F2S.java | 54 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ dependencyParser/experimental/mate-tools/src/is2/data/F2SD.java | 44 ++++++++++++++++++++++++++++++++++++++++++++ dependencyParser/experimental/mate-tools/src/is2/data/F2SF.java | 77 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ dependencyParser/experimental/mate-tools/src/is2/data/F2SP.java | 77 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ dependencyParser/experimental/mate-tools/src/is2/data/F2ST.java | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ dependencyParser/experimental/mate-tools/src/is2/data/FV.java | 562 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ dependencyParser/experimental/mate-tools/src/is2/data/FVR.java | 435 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ dependencyParser/experimental/mate-tools/src/is2/data/IEncoder.java | 27 +++++++++++++++++++++++++++ dependencyParser/experimental/mate-tools/src/is2/data/IEncoderPlus.java | 27 +++++++++++++++++++++++++++ dependencyParser/experimental/mate-tools/src/is2/data/IFV.java | 29 +++++++++++++++++++++++++++++ dependencyParser/experimental/mate-tools/src/is2/data/Instances.java | 408 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ dependencyParser/experimental/mate-tools/src/is2/data/InstancesTagger.java | 95 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ dependencyParser/experimental/mate-tools/src/is2/data/IntIntHash.java | 255 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ dependencyParser/experimental/mate-tools/src/is2/data/Long2Int.java | 112 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ dependencyParser/experimental/mate-tools/src/is2/data/Long2IntExact.java | 65 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ dependencyParser/experimental/mate-tools/src/is2/data/Long2IntInterface.java | 16 ++++++++++++++++ dependencyParser/experimental/mate-tools/src/is2/data/Long2IntQuick.java | 51 +++++++++++++++++++++++++++++++++++++++++++++++++++ dependencyParser/experimental/mate-tools/src/is2/data/MFB.java | 248 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ dependencyParser/experimental/mate-tools/src/is2/data/MFC.java | 243 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ dependencyParser/experimental/mate-tools/src/is2/data/MFO.java | 380 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ dependencyParser/experimental/mate-tools/src/is2/data/Open.java | 38 ++++++++++++++++++++++++++++++++++++++ dependencyParser/experimental/mate-tools/src/is2/data/PSTree.java | 745 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ dependencyParser/experimental/mate-tools/src/is2/data/Parameter.java | 13 +++++++++++++ dependencyParser/experimental/mate-tools/src/is2/data/ParametersFloat.java | 181 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ dependencyParser/experimental/mate-tools/src/is2/data/Parse.java | 157 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ dependencyParser/experimental/mate-tools/src/is2/data/ParseNBest.java | 103 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ dependencyParser/experimental/mate-tools/src/is2/data/PipeGen.java | 83 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ dependencyParser/experimental/mate-tools/src/is2/data/PrimeFinder.java | 51 +++++++++++++++++++++++++++++++++++++++++++++++++++ dependencyParser/experimental/mate-tools/src/is2/data/RandomIndex.java | 150 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ dependencyParser/experimental/mate-tools/src/is2/data/SentenceData09.java | 530 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ dependencyParser/experimental/mate-tools/src/is2/data/Thesaurus.java | 200 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ dependencyParser/experimental/mate-tools/src/is2/io/CONLLReader04.java | 264 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ dependencyParser/experimental/mate-tools/src/is2/io/CONLLReader06.java | 271 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ dependencyParser/experimental/mate-tools/src/is2/io/CONLLReader08.java | 407 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ dependencyParser/experimental/mate-tools/src/is2/io/CONLLReader09.java | 409 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ dependencyParser/experimental/mate-tools/src/is2/io/CONLLWriter06.java | 199 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ dependencyParser/experimental/mate-tools/src/is2/io/CONLLWriter09.java | 334 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ dependencyParser/experimental/mate-tools/src/is2/io/IOGenerals.java | 32 ++++++++++++++++++++++++++++++++ dependencyParser/experimental/mate-tools/src/is2/io/PSReader.java | 23 +++++++++++++++++++++++ dependencyParser/experimental/mate-tools/src/is2/io/TigerReader.java | 208 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ dependencyParser/experimental/mate-tools/src/is2/lemmatizer/Evaluator.java | 108 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ dependencyParser/experimental/mate-tools/src/is2/lemmatizer/Lemmatizer.java | 543 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ dependencyParser/experimental/mate-tools/src/is2/lemmatizer/MFO.java | 246 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ dependencyParser/experimental/mate-tools/src/is2/lemmatizer/Options.java | 72 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ dependencyParser/experimental/mate-tools/src/is2/lemmatizer/Pipe.java | 671 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ dependencyParser/experimental/mate-tools/src/is2/lemmatizer/StringEdit.java | 303 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ dependencyParser/experimental/mate-tools/src/is2/mtag/Convert.java | 99 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ dependencyParser/experimental/mate-tools/src/is2/mtag/Evaluator.java | 149 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ dependencyParser/experimental/mate-tools/src/is2/mtag/ExtractorM.java | 683 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ dependencyParser/experimental/mate-tools/src/is2/mtag/MFO.java | 532 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ dependencyParser/experimental/mate-tools/src/is2/mtag/Options.java | 54 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ dependencyParser/experimental/mate-tools/src/is2/mtag/Pipe.java | 675 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ dependencyParser/experimental/mate-tools/src/is2/mtag/Tagger.java | 386 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ dependencyParser/experimental/mate-tools/src/is2/parser/Closed.java | 30 ++++++++++++++++++++++++++++++ dependencyParser/experimental/mate-tools/src/is2/parser/D5.java | 293 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ dependencyParser/experimental/mate-tools/src/is2/parser/Decoder.java | 243 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ dependencyParser/experimental/mate-tools/src/is2/parser/Edges.java | 208 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ dependencyParser/experimental/mate-tools/src/is2/parser/Evaluator.java | 100 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ dependencyParser/experimental/mate-tools/src/is2/parser/Extractor.java | 1726 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ dependencyParser/experimental/mate-tools/src/is2/parser/MFO.java | 267 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ dependencyParser/experimental/mate-tools/src/is2/parser/Open.java | 40 ++++++++++++++++++++++++++++++++++++++++ dependencyParser/experimental/mate-tools/src/is2/parser/Options.java | 70 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ dependencyParser/experimental/mate-tools/src/is2/parser/ParallelDecoder.java | 194 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ dependencyParser/experimental/mate-tools/src/is2/parser/ParallelExtract.java | 248 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ dependencyParser/experimental/mate-tools/src/is2/parser/ParallelRearrange.java | 146 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ dependencyParser/experimental/mate-tools/src/is2/parser/Parameters.java | 37 +++++++++++++++++++++++++++++++++++++ dependencyParser/experimental/mate-tools/src/is2/parser/ParametersFloat.java | 138 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ dependencyParser/experimental/mate-tools/src/is2/parser/Parser.java | 789 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ dependencyParser/experimental/mate-tools/src/is2/parser/Pipe.java | 224 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ dependencyParser/experimental/mate-tools/src/is2/parser/package.html | 11 +++++++++++ dependencyParser/experimental/mate-tools/src/is2/parserR2/Decoder.java | 405 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ dependencyParser/experimental/mate-tools/src/is2/parserR2/Options.java | 92 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ dependencyParser/experimental/mate-tools/src/is2/parserR2/Parameters.java | 37 +++++++++++++++++++++++++++++++++++++ dependencyParser/experimental/mate-tools/src/is2/parserR2/ParametersFloat.java | 178 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ dependencyParser/experimental/mate-tools/src/is2/parserR2/Parser.java | 647 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ dependencyParser/experimental/mate-tools/src/is2/parserR2/Pipe.java | 261 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ dependencyParser/experimental/mate-tools/src/is2/parserR2/PipeReranker.java | 123 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ dependencyParser/experimental/mate-tools/src/is2/parserR2/Reranker.java | 991 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ dependencyParser/experimental/mate-tools/src/is2/parserR2/package.html | 3 +++ dependencyParser/experimental/mate-tools/src/is2/tag/ExtractorT2.java | 766 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ dependencyParser/experimental/mate-tools/src/is2/tag/Lexicon.java | 150 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ dependencyParser/experimental/mate-tools/src/is2/tag/MFO.java | 527 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ dependencyParser/experimental/mate-tools/src/is2/tag/Options.java | 132 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ dependencyParser/experimental/mate-tools/src/is2/tag/POS.java | 30 ++++++++++++++++++++++++++++++ dependencyParser/experimental/mate-tools/src/is2/tag/Tagger.java | 506 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ dependencyParser/experimental/mate-tools/src/is2/tag/package.html | 4 ++++ dependencyParser/experimental/mate-tools/src/is2/tools/IPipe.java | 28 ++++++++++++++++++++++++++++ dependencyParser/experimental/mate-tools/src/is2/tools/Retrainable.java | 30 ++++++++++++++++++++++++++++++ dependencyParser/experimental/mate-tools/src/is2/tools/Tool.java | 25 +++++++++++++++++++++++++ dependencyParser/experimental/mate-tools/src/is2/tools/ToolIO.java | 15 +++++++++++++++ dependencyParser/experimental/mate-tools/src/is2/tools/Train.java | 25 +++++++++++++++++++++++++ dependencyParser/experimental/mate-tools/src/is2/util/Convert.java | 453 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ dependencyParser/experimental/mate-tools/src/is2/util/Convert0409.java | 176 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ dependencyParser/experimental/mate-tools/src/is2/util/ConvertADJ.java | 121 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ dependencyParser/experimental/mate-tools/src/is2/util/ConvertLowerCase0909.java | 76 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ dependencyParser/experimental/mate-tools/src/is2/util/ConvertTiger2CoNLL.java | 120 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ dependencyParser/experimental/mate-tools/src/is2/util/DB.java | 78 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ dependencyParser/experimental/mate-tools/src/is2/util/Edges.java | 197 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ dependencyParser/experimental/mate-tools/src/is2/util/Evaluator.java | 603 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ dependencyParser/experimental/mate-tools/src/is2/util/EvaluatorTagger.java | 707 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ dependencyParser/experimental/mate-tools/src/is2/util/ExtractParagraphs.java | 74 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ dependencyParser/experimental/mate-tools/src/is2/util/IntStack.java | 90 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ dependencyParser/experimental/mate-tools/src/is2/util/Long2Int.java | 81 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ dependencyParser/experimental/mate-tools/src/is2/util/Options.java | 133 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ dependencyParser/experimental/mate-tools/src/is2/util/OptionsSuper.java | 231 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ dependencyParser/experimental/mate-tools/src/is2/util/ParserEvaluator.java | 100 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ dependencyParser/experimental/mate-tools/src/is2/util/Split.java | 89 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ dependencyParser/experimental/mate-tools/src/is2/util/Split2.java | 56 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ dependencyParser/experimental/mate-tools/src/is2/util/Split3.java | 51 +++++++++++++++++++++++++++++++++++++++++++++++++++ dependencyParser/mate-tools/.classpath | 8 -------- dependencyParser/mate-tools/.externalToolBuilders/New_Builder.launch | 8 -------- dependencyParser/mate-tools/.externalToolBuilders/ana.launch | 20 -------------------- dependencyParser/mate-tools/.project | 17 ----------------- dependencyParser/mate-tools/build.xml | 64 ---------------------------------------------------------------- dependencyParser/mate-tools/classes/decoder/ParallelDecoder$DSet.class | Bin 485 -> 0 bytes dependencyParser/mate-tools/classes/decoder/ParallelDecoder.class | Bin 7230 -> 0 bytes dependencyParser/mate-tools/classes/decoder/ParallelRearrangeNBest$PA.class | Bin 563 -> 0 bytes dependencyParser/mate-tools/classes/decoder/ParallelRearrangeNBest.class | Bin 2802 -> 0 bytes dependencyParser/mate-tools/classes/decoder/ParallelRearrangeNBest2$PA.class | Bin 729 -> 0 bytes dependencyParser/mate-tools/classes/decoder/ParallelRearrangeNBest2.class | Bin 3214 -> 0 bytes dependencyParser/mate-tools/classes/examples/DependencyParser.class | Bin 2933 -> 0 bytes dependencyParser/mate-tools/classes/examples/FullPipelineSpanish.class | Bin 3598 -> 0 bytes dependencyParser/mate-tools/classes/examples/FullPipelineTest.class | Bin 2998 -> 0 bytes dependencyParser/mate-tools/classes/examples/MorphTagger.class | Bin 2729 -> 0 bytes dependencyParser/mate-tools/classes/examples/ParseOnly.class | Bin 1484 -> 0 bytes dependencyParser/mate-tools/classes/examples/Pipeline.class | Bin 3068 -> 0 bytes dependencyParser/mate-tools/classes/extractors/Extractor.class | Bin 644 -> 0 bytes dependencyParser/mate-tools/classes/extractors/ExtractorClusterStacked.class | Bin 34872 -> 0 bytes dependencyParser/mate-tools/classes/extractors/ExtractorClusterStackedR2.class | Bin 34015 -> 0 bytes dependencyParser/mate-tools/classes/extractors/ExtractorFactory.class | Bin 856 -> 0 bytes dependencyParser/mate-tools/classes/extractors/ExtractorReranker.class | Bin 18998 -> 0 bytes dependencyParser/mate-tools/classes/extractors/ParallelExtract$DSet.class | Bin 402 -> 0 bytes dependencyParser/mate-tools/classes/extractors/ParallelExtract.class | Bin 5033 -> 0 bytes dependencyParser/mate-tools/classes/is2/data/Closed.class | Bin 889 -> 0 bytes dependencyParser/mate-tools/classes/is2/data/Cluster.class | Bin 4313 -> 0 bytes dependencyParser/mate-tools/classes/is2/data/D4.class | Bin 5263 -> 0 bytes dependencyParser/mate-tools/classes/is2/data/D6.class | Bin 4876 -> 0 bytes dependencyParser/mate-tools/classes/is2/data/D7.class | Bin 5529 -> 0 bytes dependencyParser/mate-tools/classes/is2/data/DPSTree.class | Bin 2035 -> 0 bytes dependencyParser/mate-tools/classes/is2/data/DX.class | Bin 785 -> 0 bytes dependencyParser/mate-tools/classes/is2/data/DataF.class | Bin 604 -> 0 bytes dependencyParser/mate-tools/classes/is2/data/DataFES.class | Bin 2439 -> 0 bytes dependencyParser/mate-tools/classes/is2/data/DataT.class | Bin 437 -> 0 bytes dependencyParser/mate-tools/classes/is2/data/Edges$C.class | Bin 1470 -> 0 bytes dependencyParser/mate-tools/classes/is2/data/Edges.class | Bin 4827 -> 0 bytes dependencyParser/mate-tools/classes/is2/data/F2S.class | Bin 1066 -> 0 bytes dependencyParser/mate-tools/classes/is2/data/F2SD.class | Bin 907 -> 0 bytes dependencyParser/mate-tools/classes/is2/data/F2SF.class | Bin 1659 -> 0 bytes dependencyParser/mate-tools/classes/is2/data/F2SP.class | Bin 1660 -> 0 bytes dependencyParser/mate-tools/classes/is2/data/F2ST.class | Bin 984 -> 0 bytes dependencyParser/mate-tools/classes/is2/data/FV.class | Bin 10524 -> 0 bytes dependencyParser/mate-tools/classes/is2/data/FVR.class | Bin 7780 -> 0 bytes dependencyParser/mate-tools/classes/is2/data/IEncoder.class | Bin 384 -> 0 bytes dependencyParser/mate-tools/classes/is2/data/IEncoderPlus.class | Bin 407 -> 0 bytes dependencyParser/mate-tools/classes/is2/data/IFV.class | Bin 974 -> 0 bytes dependencyParser/mate-tools/classes/is2/data/Instances.class | Bin 9232 -> 0 bytes dependencyParser/mate-tools/classes/is2/data/InstancesTagger.class | Bin 4141 -> 0 bytes dependencyParser/mate-tools/classes/is2/data/IntIntHash.class | Bin 5365 -> 0 bytes dependencyParser/mate-tools/classes/is2/data/Long2Int.class | Bin 2492 -> 0 bytes dependencyParser/mate-tools/classes/is2/data/Long2IntExact.class | Bin 1052 -> 0 bytes dependencyParser/mate-tools/classes/is2/data/Long2IntInterface.class | Bin 166 -> 0 bytes dependencyParser/mate-tools/classes/is2/data/Long2IntQuick.class | Bin 718 -> 0 bytes dependencyParser/mate-tools/classes/is2/data/MFB.class | Bin 6510 -> 0 bytes dependencyParser/mate-tools/classes/is2/data/MFC.class | Bin 6546 -> 0 bytes dependencyParser/mate-tools/classes/is2/data/MFO$Data4.class | Bin 809 -> 0 bytes dependencyParser/mate-tools/classes/is2/data/MFO.class | Bin 8558 -> 0 bytes dependencyParser/mate-tools/classes/is2/data/Open.class | Bin 1047 -> 0 bytes dependencyParser/mate-tools/classes/is2/data/PSTree.class | Bin 11849 -> 0 bytes dependencyParser/mate-tools/classes/is2/data/Parameter.class | Bin 270 -> 0 bytes dependencyParser/mate-tools/classes/is2/data/ParametersFloat.class | Bin 4869 -> 0 bytes dependencyParser/mate-tools/classes/is2/data/Parse.class | Bin 3425 -> 0 bytes dependencyParser/mate-tools/classes/is2/data/ParseNBest.class | Bin 2410 -> 0 bytes dependencyParser/mate-tools/classes/is2/data/PipeGen.class | Bin 3772 -> 0 bytes dependencyParser/mate-tools/classes/is2/data/PrimeFinder.class | Bin 3237 -> 0 bytes dependencyParser/mate-tools/classes/is2/data/RandomIndex.class | Bin 2136 -> 0 bytes dependencyParser/mate-tools/classes/is2/data/SentenceData09.class | Bin 10528 -> 0 bytes dependencyParser/mate-tools/classes/is2/data/Thesaurus.class | Bin 4767 -> 0 bytes dependencyParser/mate-tools/classes/is2/io/CONLLReader04.class | Bin 6133 -> 0 bytes dependencyParser/mate-tools/classes/is2/io/CONLLReader06.class | Bin 6262 -> 0 bytes dependencyParser/mate-tools/classes/is2/io/CONLLReader08.class | Bin 7771 -> 0 bytes dependencyParser/mate-tools/classes/is2/io/CONLLReader09.class | Bin 8166 -> 0 bytes dependencyParser/mate-tools/classes/is2/io/CONLLWriter06.class | Bin 5397 -> 0 bytes dependencyParser/mate-tools/classes/is2/io/CONLLWriter09.class | Bin 7210 -> 0 bytes dependencyParser/mate-tools/classes/is2/io/IOGenerals.class | Bin 803 -> 0 bytes dependencyParser/mate-tools/classes/is2/io/PSReader.class | Bin 210 -> 0 bytes dependencyParser/mate-tools/classes/is2/io/TigerReader$Line.class | Bin 462 -> 0 bytes dependencyParser/mate-tools/classes/is2/io/TigerReader.class | Bin 4750 -> 0 bytes dependencyParser/mate-tools/classes/is2/lemmatizer/Evaluator$1.class | Bin 1371 -> 0 bytes dependencyParser/mate-tools/classes/is2/lemmatizer/Evaluator.class | Bin 3837 -> 0 bytes dependencyParser/mate-tools/classes/is2/lemmatizer/Lemmatizer$1.class | Bin 1499 -> 0 bytes dependencyParser/mate-tools/classes/is2/lemmatizer/Lemmatizer.class | Bin 15094 -> 0 bytes dependencyParser/mate-tools/classes/is2/lemmatizer/MFO.class | Bin 6423 -> 0 bytes dependencyParser/mate-tools/classes/is2/lemmatizer/Options.class | Bin 3195 -> 0 bytes dependencyParser/mate-tools/classes/is2/lemmatizer/Pipe$1.class | Bin 1430 -> 0 bytes dependencyParser/mate-tools/classes/is2/lemmatizer/Pipe.class | Bin 18093 -> 0 bytes dependencyParser/mate-tools/classes/is2/lemmatizer/StringEdit.class | Bin 5863 -> 0 bytes dependencyParser/mate-tools/classes/is2/mtag/Convert.class | Bin 3442 -> 0 bytes dependencyParser/mate-tools/classes/is2/mtag/Evaluator$1.class | Bin 1353 -> 0 bytes dependencyParser/mate-tools/classes/is2/mtag/Evaluator.class | Bin 5012 -> 0 bytes dependencyParser/mate-tools/classes/is2/mtag/ExtractorM.class | Bin 16754 -> 0 bytes dependencyParser/mate-tools/classes/is2/mtag/MFO$Data.class | Bin 576 -> 0 bytes dependencyParser/mate-tools/classes/is2/mtag/MFO$Data4.class | Bin 3022 -> 0 bytes dependencyParser/mate-tools/classes/is2/mtag/MFO.class | Bin 8628 -> 0 bytes dependencyParser/mate-tools/classes/is2/mtag/Options.class | Bin 2760 -> 0 bytes dependencyParser/mate-tools/classes/is2/mtag/Pipe.class | Bin 16478 -> 0 bytes dependencyParser/mate-tools/classes/is2/mtag/Tagger.class | Bin 11439 -> 0 bytes dependencyParser/mate-tools/classes/is2/parser/Closed.class | Bin 806 -> 0 bytes dependencyParser/mate-tools/classes/is2/parser/D5.class | Bin 4353 -> 0 bytes dependencyParser/mate-tools/classes/is2/parser/Decoder.class | Bin 5509 -> 0 bytes dependencyParser/mate-tools/classes/is2/parser/Edges$C.class | Bin 1476 -> 0 bytes dependencyParser/mate-tools/classes/is2/parser/Edges.class | Bin 4849 -> 0 bytes dependencyParser/mate-tools/classes/is2/parser/Evaluator$Results.class | Bin 424 -> 0 bytes dependencyParser/mate-tools/classes/is2/parser/Evaluator.class | Bin 3009 -> 0 bytes dependencyParser/mate-tools/classes/is2/parser/Extractor.class | Bin 37772 -> 0 bytes dependencyParser/mate-tools/classes/is2/parser/MFO.class | Bin 7825 -> 0 bytes dependencyParser/mate-tools/classes/is2/parser/Open.class | Bin 1059 -> 0 bytes dependencyParser/mate-tools/classes/is2/parser/Options.class | Bin 3330 -> 0 bytes dependencyParser/mate-tools/classes/is2/parser/ParallelDecoder$DSet.class | Bin 497 -> 0 bytes dependencyParser/mate-tools/classes/is2/parser/ParallelDecoder.class | Bin 7039 -> 0 bytes dependencyParser/mate-tools/classes/is2/parser/ParallelExtract$DSet.class | Bin 402 -> 0 bytes dependencyParser/mate-tools/classes/is2/parser/ParallelExtract.class | Bin 6618 -> 0 bytes dependencyParser/mate-tools/classes/is2/parser/ParallelRearrange$PA.class | Bin 595 -> 0 bytes dependencyParser/mate-tools/classes/is2/parser/ParallelRearrange.class | Bin 2669 -> 0 bytes dependencyParser/mate-tools/classes/is2/parser/Parameters.class | Bin 598 -> 0 bytes dependencyParser/mate-tools/classes/is2/parser/ParametersFloat.class | Bin 3497 -> 0 bytes dependencyParser/mate-tools/classes/is2/parser/Parser.class | Bin 18990 -> 0 bytes dependencyParser/mate-tools/classes/is2/parser/Pipe.class | Bin 6984 -> 0 bytes dependencyParser/mate-tools/classes/is2/parser/package.html | 11 ----------- dependencyParser/mate-tools/classes/is2/parserR2/Decoder.class | Bin 8871 -> 0 bytes dependencyParser/mate-tools/classes/is2/parserR2/Options.class | Bin 3864 -> 0 bytes dependencyParser/mate-tools/classes/is2/parserR2/Parameters.class | Bin 602 -> 0 bytes dependencyParser/mate-tools/classes/is2/parserR2/ParametersFloat.class | Bin 4532 -> 0 bytes dependencyParser/mate-tools/classes/is2/parserR2/Parser.class | Bin 17961 -> 0 bytes dependencyParser/mate-tools/classes/is2/parserR2/Pipe.class | Bin 7608 -> 0 bytes dependencyParser/mate-tools/classes/is2/parserR2/PipeReranker.class | Bin 4042 -> 0 bytes dependencyParser/mate-tools/classes/is2/parserR2/Reranker.class | Bin 26638 -> 0 bytes dependencyParser/mate-tools/classes/is2/parserR2/package.html | 3 --- dependencyParser/mate-tools/classes/is2/tag/ExtractorT2.class | Bin 17820 -> 0 bytes dependencyParser/mate-tools/classes/is2/tag/Lexicon.class | Bin 3857 -> 0 bytes dependencyParser/mate-tools/classes/is2/tag/MFO$Data4.class | Bin 3019 -> 0 bytes dependencyParser/mate-tools/classes/is2/tag/MFO.class | Bin 8816 -> 0 bytes dependencyParser/mate-tools/classes/is2/tag/Options.class | Bin 4563 -> 0 bytes dependencyParser/mate-tools/classes/is2/tag/POS.class | Bin 1042 -> 0 bytes dependencyParser/mate-tools/classes/is2/tag/Tagger.class | Bin 12998 -> 0 bytes dependencyParser/mate-tools/classes/is2/tag/package.html | 4 ---- dependencyParser/mate-tools/classes/is2/tools/IPipe.class | Bin 268 -> 0 bytes dependencyParser/mate-tools/classes/is2/tools/Retrainable.class | Bin 206 -> 0 bytes dependencyParser/mate-tools/classes/is2/tools/Tool.class | Bin 170 -> 0 bytes dependencyParser/mate-tools/classes/is2/tools/ToolIO.class | Bin 129 -> 0 bytes dependencyParser/mate-tools/classes/is2/tools/Train.class | Bin 365 -> 0 bytes dependencyParser/mate-tools/classes/is2/util/Convert.class | Bin 8979 -> 0 bytes dependencyParser/mate-tools/classes/is2/util/Convert0409.class | Bin 3967 -> 0 bytes dependencyParser/mate-tools/classes/is2/util/ConvertADJ.class | Bin 3356 -> 0 bytes dependencyParser/mate-tools/classes/is2/util/ConvertLowerCase0909.class | Bin 1702 -> 0 bytes dependencyParser/mate-tools/classes/is2/util/ConvertTiger2CoNLL.class | Bin 3559 -> 0 bytes dependencyParser/mate-tools/classes/is2/util/DB.class | Bin 2535 -> 0 bytes dependencyParser/mate-tools/classes/is2/util/Edges$C.class | Bin 1470 -> 0 bytes dependencyParser/mate-tools/classes/is2/util/Edges.class | Bin 4211 -> 0 bytes dependencyParser/mate-tools/classes/is2/util/Evaluator$1.class | Bin 1359 -> 0 bytes dependencyParser/mate-tools/classes/is2/util/Evaluator$Results.class | Bin 558 -> 0 bytes dependencyParser/mate-tools/classes/is2/util/Evaluator.class | Bin 14710 -> 0 bytes dependencyParser/mate-tools/classes/is2/util/EvaluatorTagger$1.class | Bin 1383 -> 0 bytes dependencyParser/mate-tools/classes/is2/util/EvaluatorTagger$2.class | Bin 1412 -> 0 bytes dependencyParser/mate-tools/classes/is2/util/EvaluatorTagger$Results.class | Bin 582 -> 0 bytes dependencyParser/mate-tools/classes/is2/util/EvaluatorTagger.class | Bin 18350 -> 0 bytes dependencyParser/mate-tools/classes/is2/util/ExtractParagraphs.class | Bin 2592 -> 0 bytes dependencyParser/mate-tools/classes/is2/util/IntStack.class | Bin 1918 -> 0 bytes dependencyParser/mate-tools/classes/is2/util/Long2Int.class | Bin 892 -> 0 bytes dependencyParser/mate-tools/classes/is2/util/Options.class | Bin 4636 -> 0 bytes dependencyParser/mate-tools/classes/is2/util/OptionsSuper.class | Bin 7107 -> 0 bytes dependencyParser/mate-tools/classes/is2/util/ParserEvaluator$Results.class | Bin 442 -> 0 bytes dependencyParser/mate-tools/classes/is2/util/ParserEvaluator.class | Bin 3074 -> 0 bytes dependencyParser/mate-tools/classes/is2/util/Split.class | Bin 2958 -> 0 bytes dependencyParser/mate-tools/classes/is2/util/Split2.class | Bin 2147 -> 0 bytes dependencyParser/mate-tools/classes/is2/util/Split3.class | Bin 1688 -> 0 bytes dependencyParser/mate-tools/lib/commons-math-2.2.jar | Bin 988514 -> 0 bytes dependencyParser/mate-tools/lib/trove-2.0.4.jar | Bin 746790 -> 0 bytes dependencyParser/mate-tools/src/decoder/ParallelDecoder.java | 189 --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- dependencyParser/mate-tools/src/decoder/ParallelRearrangeNBest.java | 144 ------------------------------------------------------------------------------------------------------------------------------------------------ dependencyParser/mate-tools/src/decoder/ParallelRearrangeNBest2.java | 158 -------------------------------------------------------------------------------------------------------------------------------------------------------------- dependencyParser/mate-tools/src/examples/DependencyParser.java | 90 ------------------------------------------------------------------------------------------ dependencyParser/mate-tools/src/examples/FullPipelineSpanish.java | 108 ------------------------------------------------------------------------------------------------------------ dependencyParser/mate-tools/src/examples/FullPipelineTest.java | 110 -------------------------------------------------------------------------------------------------------------- dependencyParser/mate-tools/src/examples/MorphTagger.java | 79 ------------------------------------------------------------------------------- dependencyParser/mate-tools/src/examples/ParseOnly.java | 48 ------------------------------------------------ dependencyParser/mate-tools/src/examples/Pipeline.java | 90 ------------------------------------------------------------------------------------------ dependencyParser/mate-tools/src/extractors/Extractor.java | 52 ---------------------------------------------------- dependencyParser/mate-tools/src/extractors/ExtractorClusterStacked.java | 1946 -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- dependencyParser/mate-tools/src/extractors/ExtractorClusterStackedR2.java | 1929 --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- dependencyParser/mate-tools/src/extractors/ExtractorFactory.java | 42 ------------------------------------------ dependencyParser/mate-tools/src/extractors/ExtractorReranker.java | 1080 ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ dependencyParser/mate-tools/src/extractors/ParallelExtract.java | 193 ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- dependencyParser/mate-tools/src/is2/data/Closed.java | 28 ---------------------------- dependencyParser/mate-tools/src/is2/data/Cluster.java | 163 ------------------------------------------------------------------------------------------------------------------------------------------------------------------- dependencyParser/mate-tools/src/is2/data/D4.java | 252 ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ dependencyParser/mate-tools/src/is2/data/D6.java | 260 -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- dependencyParser/mate-tools/src/is2/data/D7.java | 290 -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- dependencyParser/mate-tools/src/is2/data/DPSTree.java | 109 ------------------------------------------------------------------------------------------------------------- dependencyParser/mate-tools/src/is2/data/DX.java | 56 -------------------------------------------------------- dependencyParser/mate-tools/src/is2/data/DataF.java | 35 ----------------------------------- dependencyParser/mate-tools/src/is2/data/DataFES.java | 71 ----------------------------------------------------------------------- dependencyParser/mate-tools/src/is2/data/DataT.java | 19 ------------------- dependencyParser/mate-tools/src/is2/data/Edges.java | 216 ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ dependencyParser/mate-tools/src/is2/data/F2S.java | 54 ------------------------------------------------------ dependencyParser/mate-tools/src/is2/data/F2SD.java | 44 -------------------------------------------- dependencyParser/mate-tools/src/is2/data/F2SF.java | 77 ----------------------------------------------------------------------------- dependencyParser/mate-tools/src/is2/data/F2SP.java | 77 ----------------------------------------------------------------------------- dependencyParser/mate-tools/src/is2/data/F2ST.java | 48 ------------------------------------------------ dependencyParser/mate-tools/src/is2/data/FV.java | 562 ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- dependencyParser/mate-tools/src/is2/data/FVR.java | 435 --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- dependencyParser/mate-tools/src/is2/data/IEncoder.java | 27 --------------------------- dependencyParser/mate-tools/src/is2/data/IEncoderPlus.java | 27 --------------------------- dependencyParser/mate-tools/src/is2/data/IFV.java | 29 ----------------------------- dependencyParser/mate-tools/src/is2/data/Instances.java | 408 ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ dependencyParser/mate-tools/src/is2/data/InstancesTagger.java | 95 ----------------------------------------------------------------------------------------------- dependencyParser/mate-tools/src/is2/data/IntIntHash.java | 255 --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- dependencyParser/mate-tools/src/is2/data/Long2Int.java | 112 ---------------------------------------------------------------------------------------------------------------- dependencyParser/mate-tools/src/is2/data/Long2IntExact.java | 65 ----------------------------------------------------------------- dependencyParser/mate-tools/src/is2/data/Long2IntInterface.java | 16 ---------------- dependencyParser/mate-tools/src/is2/data/Long2IntQuick.java | 51 --------------------------------------------------- dependencyParser/mate-tools/src/is2/data/MFB.java | 248 -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- dependencyParser/mate-tools/src/is2/data/MFC.java | 243 --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- dependencyParser/mate-tools/src/is2/data/MFO.java | 380 -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- dependencyParser/mate-tools/src/is2/data/Open.java | 38 -------------------------------------- dependencyParser/mate-tools/src/is2/data/PSTree.java | 745 ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- dependencyParser/mate-tools/src/is2/data/Parameter.java | 13 ------------- dependencyParser/mate-tools/src/is2/data/ParametersFloat.java | 181 ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- dependencyParser/mate-tools/src/is2/data/Parse.java | 157 ------------------------------------------------------------------------------------------------------------------------------------------------------------- dependencyParser/mate-tools/src/is2/data/ParseNBest.java | 103 ------------------------------------------------------------------------------------------------------- dependencyParser/mate-tools/src/is2/data/PipeGen.java | 83 ----------------------------------------------------------------------------------- dependencyParser/mate-tools/src/is2/data/PrimeFinder.java | 51 --------------------------------------------------- dependencyParser/mate-tools/src/is2/data/RandomIndex.java | 150 ------------------------------------------------------------------------------------------------------------------------------------------------------ dependencyParser/mate-tools/src/is2/data/SentenceData09.java | 530 -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- dependencyParser/mate-tools/src/is2/data/Thesaurus.java | 200 -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- dependencyParser/mate-tools/src/is2/io/CONLLReader04.java | 264 ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ dependencyParser/mate-tools/src/is2/io/CONLLReader06.java | 271 ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- dependencyParser/mate-tools/src/is2/io/CONLLReader08.java | 407 ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- dependencyParser/mate-tools/src/is2/io/CONLLReader09.java | 409 ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- dependencyParser/mate-tools/src/is2/io/CONLLWriter06.java | 199 ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- dependencyParser/mate-tools/src/is2/io/CONLLWriter09.java | 334 ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- dependencyParser/mate-tools/src/is2/io/IOGenerals.java | 32 -------------------------------- dependencyParser/mate-tools/src/is2/io/PSReader.java | 23 ----------------------- dependencyParser/mate-tools/src/is2/io/TigerReader.java | 208 ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- dependencyParser/mate-tools/src/is2/lemmatizer/Evaluator.java | 108 ------------------------------------------------------------------------------------------------------------ dependencyParser/mate-tools/src/is2/lemmatizer/Lemmatizer.java | 543 --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- dependencyParser/mate-tools/src/is2/lemmatizer/MFO.java | 246 ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ dependencyParser/mate-tools/src/is2/lemmatizer/Options.java | 72 ------------------------------------------------------------------------ dependencyParser/mate-tools/src/is2/lemmatizer/Pipe.java | 671 ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- dependencyParser/mate-tools/src/is2/lemmatizer/StringEdit.java | 303 --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- dependencyParser/mate-tools/src/is2/mtag/Convert.java | 99 --------------------------------------------------------------------------------------------------- dependencyParser/mate-tools/src/is2/mtag/Evaluator.java | 149 ----------------------------------------------------------------------------------------------------------------------------------------------------- dependencyParser/mate-tools/src/is2/mtag/ExtractorM.java | 683 ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- dependencyParser/mate-tools/src/is2/mtag/MFO.java | 532 ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- dependencyParser/mate-tools/src/is2/mtag/Options.java | 54 ------------------------------------------------------ dependencyParser/mate-tools/src/is2/mtag/Pipe.java | 675 --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- dependencyParser/mate-tools/src/is2/mtag/Tagger.java | 386 -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- dependencyParser/mate-tools/src/is2/parser/Closed.java | 30 ------------------------------ dependencyParser/mate-tools/src/is2/parser/D5.java | 293 ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- dependencyParser/mate-tools/src/is2/parser/Decoder.java | 243 --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- dependencyParser/mate-tools/src/is2/parser/Edges.java | 208 ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- dependencyParser/mate-tools/src/is2/parser/Evaluator.java | 100 ---------------------------------------------------------------------------------------------------- dependencyParser/mate-tools/src/is2/parser/Extractor.java | 1726 ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- dependencyParser/mate-tools/src/is2/parser/MFO.java | 267 --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- dependencyParser/mate-tools/src/is2/parser/Open.java | 40 ---------------------------------------- dependencyParser/mate-tools/src/is2/parser/Options.java | 70 ---------------------------------------------------------------------- dependencyParser/mate-tools/src/is2/parser/ParallelDecoder.java | 194 -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- dependencyParser/mate-tools/src/is2/parser/ParallelExtract.java | 248 -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- dependencyParser/mate-tools/src/is2/parser/ParallelRearrange.java | 146 -------------------------------------------------------------------------------------------------------------------------------------------------- dependencyParser/mate-tools/src/is2/parser/Parameters.java | 37 ------------------------------------- dependencyParser/mate-tools/src/is2/parser/ParametersFloat.java | 138 ------------------------------------------------------------------------------------------------------------------------------------------ dependencyParser/mate-tools/src/is2/parser/Parser.java | 789 --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- dependencyParser/mate-tools/src/is2/parser/Pipe.java | 224 -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- dependencyParser/mate-tools/src/is2/parser/package.html | 11 ----------- dependencyParser/mate-tools/src/is2/parserR2/Decoder.java | 405 --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- dependencyParser/mate-tools/src/is2/parserR2/Options.java | 92 -------------------------------------------------------------------------------------------- dependencyParser/mate-tools/src/is2/parserR2/Parameters.java | 37 ------------------------------------- dependencyParser/mate-tools/src/is2/parserR2/ParametersFloat.java | 178 ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- dependencyParser/mate-tools/src/is2/parserR2/Parser.java | 647 ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- dependencyParser/mate-tools/src/is2/parserR2/Pipe.java | 261 --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- dependencyParser/mate-tools/src/is2/parserR2/PipeReranker.java | 123 --------------------------------------------------------------------------------------------------------------------------- dependencyParser/mate-tools/src/is2/parserR2/Reranker.java | 991 ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- dependencyParser/mate-tools/src/is2/parserR2/package.html | 3 --- dependencyParser/mate-tools/src/is2/tag/ExtractorT2.java | 766 ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- dependencyParser/mate-tools/src/is2/tag/Lexicon.java | 150 ------------------------------------------------------------------------------------------------------------------------------------------------------ dependencyParser/mate-tools/src/is2/tag/MFO.java | 527 ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- dependencyParser/mate-tools/src/is2/tag/Options.java | 132 ------------------------------------------------------------------------------------------------------------------------------------ dependencyParser/mate-tools/src/is2/tag/POS.java | 30 ------------------------------ dependencyParser/mate-tools/src/is2/tag/Tagger.java | 506 -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- dependencyParser/mate-tools/src/is2/tag/package.html | 4 ---- dependencyParser/mate-tools/src/is2/tools/IPipe.java | 28 ---------------------------- dependencyParser/mate-tools/src/is2/tools/Retrainable.java | 30 ------------------------------ dependencyParser/mate-tools/src/is2/tools/Tool.java | 25 ------------------------- dependencyParser/mate-tools/src/is2/tools/ToolIO.java | 15 --------------- dependencyParser/mate-tools/src/is2/tools/Train.java | 25 ------------------------- dependencyParser/mate-tools/src/is2/util/Convert.java | 453 --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- dependencyParser/mate-tools/src/is2/util/Convert0409.java | 176 -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- dependencyParser/mate-tools/src/is2/util/ConvertADJ.java | 121 ------------------------------------------------------------------------------------------------------------------------- dependencyParser/mate-tools/src/is2/util/ConvertLowerCase0909.java | 76 ---------------------------------------------------------------------------- dependencyParser/mate-tools/src/is2/util/ConvertTiger2CoNLL.java | 120 ------------------------------------------------------------------------------------------------------------------------ dependencyParser/mate-tools/src/is2/util/DB.java | 78 ------------------------------------------------------------------------------ dependencyParser/mate-tools/src/is2/util/Edges.java | 197 ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- dependencyParser/mate-tools/src/is2/util/Evaluator.java | 603 --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- dependencyParser/mate-tools/src/is2/util/EvaluatorTagger.java | 707 ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- dependencyParser/mate-tools/src/is2/util/ExtractParagraphs.java | 74 -------------------------------------------------------------------------- dependencyParser/mate-tools/src/is2/util/IntStack.java | 90 ------------------------------------------------------------------------------------------ dependencyParser/mate-tools/src/is2/util/Long2Int.java | 81 --------------------------------------------------------------------------------- dependencyParser/mate-tools/src/is2/util/Options.java | 133 ------------------------------------------------------------------------------------------------------------------------------------- dependencyParser/mate-tools/src/is2/util/OptionsSuper.java | 231 --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- dependencyParser/mate-tools/src/is2/util/ParserEvaluator.java | 100 ---------------------------------------------------------------------------------------------------- dependencyParser/mate-tools/src/is2/util/Split.java | 89 ----------------------------------------------------------------------------------------- dependencyParser/mate-tools/src/is2/util/Split2.java | 56 -------------------------------------------------------- dependencyParser/mate-tools/src/is2/util/Split3.java | 51 --------------------------------------------------- 760 files changed, 67387 insertions(+), 38242 deletions(-) create mode 100644 dependencyParser/basic/mate-tools/.classpath create mode 100644 dependencyParser/basic/mate-tools/.externalToolBuilders/New_Builder.launch create mode 100644 dependencyParser/basic/mate-tools/.externalToolBuilders/ana.launch create mode 100644 dependencyParser/basic/mate-tools/.project create mode 100644 dependencyParser/basic/mate-tools/build.xml create mode 100644 dependencyParser/basic/mate-tools/lib/commons-math-2.2.jar create mode 100644 dependencyParser/basic/mate-tools/lib/trove-2.0.4.jar create mode 100755 dependencyParser/basic/mate-tools/src/decoder/ParallelDecoder.java create mode 100755 dependencyParser/basic/mate-tools/src/decoder/ParallelRearrangeNBest.java create mode 100644 dependencyParser/basic/mate-tools/src/decoder/ParallelRearrangeNBest2.java create mode 100644 dependencyParser/basic/mate-tools/src/examples/DependencyParser.java create mode 100644 dependencyParser/basic/mate-tools/src/examples/FullPipelineSpanish.java create mode 100644 dependencyParser/basic/mate-tools/src/examples/FullPipelineTest.java create mode 100644 dependencyParser/basic/mate-tools/src/examples/MorphTagger.java create mode 100755 dependencyParser/basic/mate-tools/src/examples/ParseOnly.java create mode 100644 dependencyParser/basic/mate-tools/src/examples/Pipeline.java create mode 100644 dependencyParser/basic/mate-tools/src/extractors/Extractor.java create mode 100755 dependencyParser/basic/mate-tools/src/extractors/ExtractorClusterStacked.java create mode 100644 dependencyParser/basic/mate-tools/src/extractors/ExtractorClusterStackedR2.java create mode 100644 dependencyParser/basic/mate-tools/src/extractors/ExtractorFactory.java create mode 100644 dependencyParser/basic/mate-tools/src/extractors/ExtractorReranker.java create mode 100755 dependencyParser/basic/mate-tools/src/extractors/ParallelExtract.java create mode 100755 dependencyParser/basic/mate-tools/src/is2/data/Closed.java create mode 100644 dependencyParser/basic/mate-tools/src/is2/data/Cluster.java create mode 100644 dependencyParser/basic/mate-tools/src/is2/data/D4.java create mode 100644 dependencyParser/basic/mate-tools/src/is2/data/D6.java create mode 100644 dependencyParser/basic/mate-tools/src/is2/data/D7.java create mode 100644 dependencyParser/basic/mate-tools/src/is2/data/DPSTree.java create mode 100644 dependencyParser/basic/mate-tools/src/is2/data/DX.java create mode 100755 dependencyParser/basic/mate-tools/src/is2/data/DataF.java create mode 100644 dependencyParser/basic/mate-tools/src/is2/data/DataFES.java create mode 100644 dependencyParser/basic/mate-tools/src/is2/data/DataT.java create mode 100644 dependencyParser/basic/mate-tools/src/is2/data/Edges.java create mode 100755 dependencyParser/basic/mate-tools/src/is2/data/F2S.java create mode 100755 dependencyParser/basic/mate-tools/src/is2/data/F2SD.java create mode 100755 dependencyParser/basic/mate-tools/src/is2/data/F2SF.java create mode 100644 dependencyParser/basic/mate-tools/src/is2/data/F2SP.java create mode 100644 dependencyParser/basic/mate-tools/src/is2/data/F2ST.java create mode 100755 dependencyParser/basic/mate-tools/src/is2/data/FV.java create mode 100644 dependencyParser/basic/mate-tools/src/is2/data/FVR.java create mode 100755 dependencyParser/basic/mate-tools/src/is2/data/IEncoder.java create mode 100644 dependencyParser/basic/mate-tools/src/is2/data/IEncoderPlus.java create mode 100755 dependencyParser/basic/mate-tools/src/is2/data/IFV.java create mode 100755 dependencyParser/basic/mate-tools/src/is2/data/Instances.java create mode 100644 dependencyParser/basic/mate-tools/src/is2/data/InstancesTagger.java create mode 100644 dependencyParser/basic/mate-tools/src/is2/data/IntIntHash.java create mode 100755 dependencyParser/basic/mate-tools/src/is2/data/Long2Int.java create mode 100644 dependencyParser/basic/mate-tools/src/is2/data/Long2IntExact.java create mode 100755 dependencyParser/basic/mate-tools/src/is2/data/Long2IntInterface.java create mode 100644 dependencyParser/basic/mate-tools/src/is2/data/Long2IntQuick.java create mode 100755 dependencyParser/basic/mate-tools/src/is2/data/MFB.java create mode 100644 dependencyParser/basic/mate-tools/src/is2/data/MFC.java create mode 100755 dependencyParser/basic/mate-tools/src/is2/data/MFO.java create mode 100755 dependencyParser/basic/mate-tools/src/is2/data/Open.java create mode 100644 dependencyParser/basic/mate-tools/src/is2/data/PSTree.java create mode 100644 dependencyParser/basic/mate-tools/src/is2/data/Parameter.java create mode 100755 dependencyParser/basic/mate-tools/src/is2/data/ParametersFloat.java create mode 100755 dependencyParser/basic/mate-tools/src/is2/data/Parse.java create mode 100644 dependencyParser/basic/mate-tools/src/is2/data/ParseNBest.java create mode 100755 dependencyParser/basic/mate-tools/src/is2/data/PipeGen.java create mode 100644 dependencyParser/basic/mate-tools/src/is2/data/PrimeFinder.java create mode 100644 dependencyParser/basic/mate-tools/src/is2/data/RandomIndex.java create mode 100755 dependencyParser/basic/mate-tools/src/is2/data/SentenceData09.java create mode 100644 dependencyParser/basic/mate-tools/src/is2/data/Thesaurus.java create mode 100644 dependencyParser/basic/mate-tools/src/is2/io/CONLLReader04.java create mode 100755 dependencyParser/basic/mate-tools/src/is2/io/CONLLReader06.java create mode 100644 dependencyParser/basic/mate-tools/src/is2/io/CONLLReader08.java create mode 100755 dependencyParser/basic/mate-tools/src/is2/io/CONLLReader09.java create mode 100755 dependencyParser/basic/mate-tools/src/is2/io/CONLLWriter06.java create mode 100755 dependencyParser/basic/mate-tools/src/is2/io/CONLLWriter09.java create mode 100644 dependencyParser/basic/mate-tools/src/is2/io/IOGenerals.java create mode 100644 dependencyParser/basic/mate-tools/src/is2/io/PSReader.java create mode 100644 dependencyParser/basic/mate-tools/src/is2/io/TigerReader.java create mode 100755 dependencyParser/basic/mate-tools/src/is2/lemmatizer/Evaluator.java create mode 100755 dependencyParser/basic/mate-tools/src/is2/lemmatizer/Lemmatizer.java create mode 100755 dependencyParser/basic/mate-tools/src/is2/lemmatizer/MFO.java create mode 100755 dependencyParser/basic/mate-tools/src/is2/lemmatizer/Options.java create mode 100755 dependencyParser/basic/mate-tools/src/is2/lemmatizer/Pipe.java create mode 100755 dependencyParser/basic/mate-tools/src/is2/lemmatizer/StringEdit.java create mode 100755 dependencyParser/basic/mate-tools/src/is2/mtag/Convert.java create mode 100755 dependencyParser/basic/mate-tools/src/is2/mtag/Evaluator.java create mode 100644 dependencyParser/basic/mate-tools/src/is2/mtag/ExtractorM.java create mode 100755 dependencyParser/basic/mate-tools/src/is2/mtag/MFO.java create mode 100755 dependencyParser/basic/mate-tools/src/is2/mtag/Options.java create mode 100755 dependencyParser/basic/mate-tools/src/is2/mtag/Pipe.java create mode 100644 dependencyParser/basic/mate-tools/src/is2/mtag/Tagger.java create mode 100755 dependencyParser/basic/mate-tools/src/is2/parser/Closed.java create mode 100644 dependencyParser/basic/mate-tools/src/is2/parser/D5.java create mode 100755 dependencyParser/basic/mate-tools/src/is2/parser/Decoder.java create mode 100644 dependencyParser/basic/mate-tools/src/is2/parser/Edges.java create mode 100755 dependencyParser/basic/mate-tools/src/is2/parser/Evaluator.java create mode 100755 dependencyParser/basic/mate-tools/src/is2/parser/Extractor.java create mode 100755 dependencyParser/basic/mate-tools/src/is2/parser/MFO.java create mode 100755 dependencyParser/basic/mate-tools/src/is2/parser/Open.java create mode 100755 dependencyParser/basic/mate-tools/src/is2/parser/Options.java create mode 100755 dependencyParser/basic/mate-tools/src/is2/parser/ParallelDecoder.java create mode 100755 dependencyParser/basic/mate-tools/src/is2/parser/ParallelExtract.java create mode 100755 dependencyParser/basic/mate-tools/src/is2/parser/ParallelRearrange.java create mode 100755 dependencyParser/basic/mate-tools/src/is2/parser/Parameters.java create mode 100755 dependencyParser/basic/mate-tools/src/is2/parser/ParametersFloat.java create mode 100755 dependencyParser/basic/mate-tools/src/is2/parser/Parser.java create mode 100755 dependencyParser/basic/mate-tools/src/is2/parser/Pipe.java create mode 100755 dependencyParser/basic/mate-tools/src/is2/parser/package.html create mode 100755 dependencyParser/basic/mate-tools/src/is2/parserR2/Decoder.java create mode 100755 dependencyParser/basic/mate-tools/src/is2/parserR2/Options.java create mode 100755 dependencyParser/basic/mate-tools/src/is2/parserR2/Parameters.java create mode 100755 dependencyParser/basic/mate-tools/src/is2/parserR2/ParametersFloat.java create mode 100755 dependencyParser/basic/mate-tools/src/is2/parserR2/Parser.java create mode 100755 dependencyParser/basic/mate-tools/src/is2/parserR2/Pipe.java create mode 100644 dependencyParser/basic/mate-tools/src/is2/parserR2/PipeReranker.java create mode 100644 dependencyParser/basic/mate-tools/src/is2/parserR2/Reranker.java create mode 100755 dependencyParser/basic/mate-tools/src/is2/parserR2/package.html create mode 100644 dependencyParser/basic/mate-tools/src/is2/tag/ExtractorT2.java create mode 100644 dependencyParser/basic/mate-tools/src/is2/tag/Lexicon.java create mode 100644 dependencyParser/basic/mate-tools/src/is2/tag/MFO.java create mode 100644 dependencyParser/basic/mate-tools/src/is2/tag/Options.java create mode 100644 dependencyParser/basic/mate-tools/src/is2/tag/POS.java create mode 100644 dependencyParser/basic/mate-tools/src/is2/tag/Tagger.java create mode 100644 dependencyParser/basic/mate-tools/src/is2/tag/package.html create mode 100644 dependencyParser/basic/mate-tools/src/is2/tools/IPipe.java create mode 100644 dependencyParser/basic/mate-tools/src/is2/tools/Retrainable.java create mode 100644 dependencyParser/basic/mate-tools/src/is2/tools/Tool.java create mode 100644 dependencyParser/basic/mate-tools/src/is2/tools/ToolIO.java create mode 100644 dependencyParser/basic/mate-tools/src/is2/tools/Train.java create mode 100644 dependencyParser/basic/mate-tools/src/is2/util/Convert.java create mode 100644 dependencyParser/basic/mate-tools/src/is2/util/Convert0409.java create mode 100644 dependencyParser/basic/mate-tools/src/is2/util/ConvertADJ.java create mode 100644 dependencyParser/basic/mate-tools/src/is2/util/ConvertLowerCase0909.java create mode 100644 dependencyParser/basic/mate-tools/src/is2/util/ConvertTiger2CoNLL.java create mode 100755 dependencyParser/basic/mate-tools/src/is2/util/DB.java create mode 100644 dependencyParser/basic/mate-tools/src/is2/util/Edges.java create mode 100644 dependencyParser/basic/mate-tools/src/is2/util/Evaluator.java create mode 100644 dependencyParser/basic/mate-tools/src/is2/util/EvaluatorTagger.java create mode 100644 dependencyParser/basic/mate-tools/src/is2/util/ExtractParagraphs.java create mode 100644 dependencyParser/basic/mate-tools/src/is2/util/IntStack.java create mode 100644 dependencyParser/basic/mate-tools/src/is2/util/Long2Int.java create mode 100644 dependencyParser/basic/mate-tools/src/is2/util/Options.java create mode 100755 dependencyParser/basic/mate-tools/src/is2/util/OptionsSuper.java create mode 100644 dependencyParser/basic/mate-tools/src/is2/util/ParserEvaluator.java create mode 100755 dependencyParser/basic/mate-tools/src/is2/util/Split.java create mode 100644 dependencyParser/basic/mate-tools/src/is2/util/Split2.java create mode 100644 dependencyParser/basic/mate-tools/src/is2/util/Split3.java delete mode 100644 dependencyParser/examples/README.txt delete mode 100644 dependencyParser/examples/d2 output.txt delete mode 100644 dependencyParser/examples/edges output.txt delete mode 100644 dependencyParser/examples/is output.txt delete mode 100644 dependencyParser/examples/test.csv delete mode 100644 dependencyParser/examples/test.out create mode 100644 dependencyParser/experimental/examples/README.txt create mode 100644 dependencyParser/experimental/examples/d2 output.txt create mode 100644 dependencyParser/experimental/examples/edges output.txt create mode 100644 dependencyParser/experimental/examples/is output.txt create mode 100644 dependencyParser/experimental/examples/test.csv create mode 100644 dependencyParser/experimental/examples/test.out create mode 100644 dependencyParser/experimental/mate-tools/.classpath create mode 100644 dependencyParser/experimental/mate-tools/.externalToolBuilders/New_Builder.launch create mode 100644 dependencyParser/experimental/mate-tools/.externalToolBuilders/ana.launch create mode 100644 dependencyParser/experimental/mate-tools/.project create mode 100644 dependencyParser/experimental/mate-tools/build.xml create mode 100644 dependencyParser/experimental/mate-tools/classes/decoder/ParallelDecoder$DSet.class create mode 100644 dependencyParser/experimental/mate-tools/classes/decoder/ParallelDecoder.class create mode 100644 dependencyParser/experimental/mate-tools/classes/decoder/ParallelRearrangeNBest$PA.class create mode 100644 dependencyParser/experimental/mate-tools/classes/decoder/ParallelRearrangeNBest.class create mode 100644 dependencyParser/experimental/mate-tools/classes/decoder/ParallelRearrangeNBest2$PA.class create mode 100644 dependencyParser/experimental/mate-tools/classes/decoder/ParallelRearrangeNBest2.class create mode 100644 dependencyParser/experimental/mate-tools/classes/examples/DependencyParser.class create mode 100644 dependencyParser/experimental/mate-tools/classes/examples/FullPipelineSpanish.class create mode 100644 dependencyParser/experimental/mate-tools/classes/examples/FullPipelineTest.class create mode 100644 dependencyParser/experimental/mate-tools/classes/examples/MorphTagger.class create mode 100644 dependencyParser/experimental/mate-tools/classes/examples/ParseOnly.class create mode 100644 dependencyParser/experimental/mate-tools/classes/examples/Pipeline.class create mode 100644 dependencyParser/experimental/mate-tools/classes/extractors/Extractor.class create mode 100644 dependencyParser/experimental/mate-tools/classes/extractors/ExtractorClusterStacked.class create mode 100644 dependencyParser/experimental/mate-tools/classes/extractors/ExtractorClusterStackedR2.class create mode 100644 dependencyParser/experimental/mate-tools/classes/extractors/ExtractorFactory.class create mode 100644 dependencyParser/experimental/mate-tools/classes/extractors/ExtractorReranker.class create mode 100644 dependencyParser/experimental/mate-tools/classes/extractors/ParallelExtract$DSet.class create mode 100644 dependencyParser/experimental/mate-tools/classes/extractors/ParallelExtract.class create mode 100644 dependencyParser/experimental/mate-tools/classes/is2/data/Closed.class create mode 100644 dependencyParser/experimental/mate-tools/classes/is2/data/Cluster.class create mode 100644 dependencyParser/experimental/mate-tools/classes/is2/data/D4.class create mode 100644 dependencyParser/experimental/mate-tools/classes/is2/data/D6.class create mode 100644 dependencyParser/experimental/mate-tools/classes/is2/data/D7.class create mode 100644 dependencyParser/experimental/mate-tools/classes/is2/data/DPSTree.class create mode 100644 dependencyParser/experimental/mate-tools/classes/is2/data/DX.class create mode 100644 dependencyParser/experimental/mate-tools/classes/is2/data/DataF.class create mode 100644 dependencyParser/experimental/mate-tools/classes/is2/data/DataFES.class create mode 100644 dependencyParser/experimental/mate-tools/classes/is2/data/DataT.class create mode 100644 dependencyParser/experimental/mate-tools/classes/is2/data/Edges$C.class create mode 100644 dependencyParser/experimental/mate-tools/classes/is2/data/Edges.class create mode 100644 dependencyParser/experimental/mate-tools/classes/is2/data/F2S.class create mode 100644 dependencyParser/experimental/mate-tools/classes/is2/data/F2SD.class create mode 100644 dependencyParser/experimental/mate-tools/classes/is2/data/F2SF.class create mode 100644 dependencyParser/experimental/mate-tools/classes/is2/data/F2SP.class create mode 100644 dependencyParser/experimental/mate-tools/classes/is2/data/F2ST.class create mode 100644 dependencyParser/experimental/mate-tools/classes/is2/data/FV.class create mode 100644 dependencyParser/experimental/mate-tools/classes/is2/data/FVR.class create mode 100644 dependencyParser/experimental/mate-tools/classes/is2/data/IEncoder.class create mode 100644 dependencyParser/experimental/mate-tools/classes/is2/data/IEncoderPlus.class create mode 100644 dependencyParser/experimental/mate-tools/classes/is2/data/IFV.class create mode 100644 dependencyParser/experimental/mate-tools/classes/is2/data/Instances.class create mode 100644 dependencyParser/experimental/mate-tools/classes/is2/data/InstancesTagger.class create mode 100644 dependencyParser/experimental/mate-tools/classes/is2/data/IntIntHash.class create mode 100644 dependencyParser/experimental/mate-tools/classes/is2/data/Long2Int.class create mode 100644 dependencyParser/experimental/mate-tools/classes/is2/data/Long2IntExact.class create mode 100644 dependencyParser/experimental/mate-tools/classes/is2/data/Long2IntInterface.class create mode 100644 dependencyParser/experimental/mate-tools/classes/is2/data/Long2IntQuick.class create mode 100644 dependencyParser/experimental/mate-tools/classes/is2/data/MFB.class create mode 100644 dependencyParser/experimental/mate-tools/classes/is2/data/MFC.class create mode 100644 dependencyParser/experimental/mate-tools/classes/is2/data/MFO$Data4.class create mode 100644 dependencyParser/experimental/mate-tools/classes/is2/data/MFO.class create mode 100644 dependencyParser/experimental/mate-tools/classes/is2/data/Open.class create mode 100644 dependencyParser/experimental/mate-tools/classes/is2/data/PSTree.class create mode 100644 dependencyParser/experimental/mate-tools/classes/is2/data/Parameter.class create mode 100644 dependencyParser/experimental/mate-tools/classes/is2/data/ParametersFloat.class create mode 100644 dependencyParser/experimental/mate-tools/classes/is2/data/Parse.class create mode 100644 dependencyParser/experimental/mate-tools/classes/is2/data/ParseNBest.class create mode 100644 dependencyParser/experimental/mate-tools/classes/is2/data/PipeGen.class create mode 100644 dependencyParser/experimental/mate-tools/classes/is2/data/PrimeFinder.class create mode 100644 dependencyParser/experimental/mate-tools/classes/is2/data/RandomIndex.class create mode 100644 dependencyParser/experimental/mate-tools/classes/is2/data/SentenceData09.class create mode 100644 dependencyParser/experimental/mate-tools/classes/is2/data/Thesaurus.class create mode 100644 dependencyParser/experimental/mate-tools/classes/is2/io/CONLLReader04.class create mode 100644 dependencyParser/experimental/mate-tools/classes/is2/io/CONLLReader06.class create mode 100644 dependencyParser/experimental/mate-tools/classes/is2/io/CONLLReader08.class create mode 100644 dependencyParser/experimental/mate-tools/classes/is2/io/CONLLReader09.class create mode 100644 dependencyParser/experimental/mate-tools/classes/is2/io/CONLLWriter06.class create mode 100644 dependencyParser/experimental/mate-tools/classes/is2/io/CONLLWriter09.class create mode 100644 dependencyParser/experimental/mate-tools/classes/is2/io/IOGenerals.class create mode 100644 dependencyParser/experimental/mate-tools/classes/is2/io/PSReader.class create mode 100644 dependencyParser/experimental/mate-tools/classes/is2/io/TigerReader$Line.class create mode 100644 dependencyParser/experimental/mate-tools/classes/is2/io/TigerReader.class create mode 100644 dependencyParser/experimental/mate-tools/classes/is2/lemmatizer/Evaluator$1.class create mode 100644 dependencyParser/experimental/mate-tools/classes/is2/lemmatizer/Evaluator.class create mode 100644 dependencyParser/experimental/mate-tools/classes/is2/lemmatizer/Lemmatizer$1.class create mode 100644 dependencyParser/experimental/mate-tools/classes/is2/lemmatizer/Lemmatizer.class create mode 100644 dependencyParser/experimental/mate-tools/classes/is2/lemmatizer/MFO.class create mode 100644 dependencyParser/experimental/mate-tools/classes/is2/lemmatizer/Options.class create mode 100644 dependencyParser/experimental/mate-tools/classes/is2/lemmatizer/Pipe$1.class create mode 100644 dependencyParser/experimental/mate-tools/classes/is2/lemmatizer/Pipe.class create mode 100644 dependencyParser/experimental/mate-tools/classes/is2/lemmatizer/StringEdit.class create mode 100644 dependencyParser/experimental/mate-tools/classes/is2/mtag/Convert.class create mode 100644 dependencyParser/experimental/mate-tools/classes/is2/mtag/Evaluator$1.class create mode 100644 dependencyParser/experimental/mate-tools/classes/is2/mtag/Evaluator.class create mode 100644 dependencyParser/experimental/mate-tools/classes/is2/mtag/ExtractorM.class create mode 100644 dependencyParser/experimental/mate-tools/classes/is2/mtag/MFO$Data.class create mode 100644 dependencyParser/experimental/mate-tools/classes/is2/mtag/MFO$Data4.class create mode 100644 dependencyParser/experimental/mate-tools/classes/is2/mtag/MFO.class create mode 100644 dependencyParser/experimental/mate-tools/classes/is2/mtag/Options.class create mode 100644 dependencyParser/experimental/mate-tools/classes/is2/mtag/Pipe.class create mode 100644 dependencyParser/experimental/mate-tools/classes/is2/mtag/Tagger.class create mode 100644 dependencyParser/experimental/mate-tools/classes/is2/parser/Closed.class create mode 100644 dependencyParser/experimental/mate-tools/classes/is2/parser/D5.class create mode 100644 dependencyParser/experimental/mate-tools/classes/is2/parser/Decoder.class create mode 100644 dependencyParser/experimental/mate-tools/classes/is2/parser/Edges$C.class create mode 100644 dependencyParser/experimental/mate-tools/classes/is2/parser/Edges.class create mode 100644 dependencyParser/experimental/mate-tools/classes/is2/parser/Evaluator$Results.class create mode 100644 dependencyParser/experimental/mate-tools/classes/is2/parser/Evaluator.class create mode 100644 dependencyParser/experimental/mate-tools/classes/is2/parser/Extractor.class create mode 100644 dependencyParser/experimental/mate-tools/classes/is2/parser/MFO.class create mode 100644 dependencyParser/experimental/mate-tools/classes/is2/parser/Open.class create mode 100644 dependencyParser/experimental/mate-tools/classes/is2/parser/Options.class create mode 100644 dependencyParser/experimental/mate-tools/classes/is2/parser/ParallelDecoder$DSet.class create mode 100644 dependencyParser/experimental/mate-tools/classes/is2/parser/ParallelDecoder.class create mode 100644 dependencyParser/experimental/mate-tools/classes/is2/parser/ParallelExtract$DSet.class create mode 100644 dependencyParser/experimental/mate-tools/classes/is2/parser/ParallelExtract.class create mode 100644 dependencyParser/experimental/mate-tools/classes/is2/parser/ParallelRearrange$PA.class create mode 100644 dependencyParser/experimental/mate-tools/classes/is2/parser/ParallelRearrange.class create mode 100644 dependencyParser/experimental/mate-tools/classes/is2/parser/Parameters.class create mode 100644 dependencyParser/experimental/mate-tools/classes/is2/parser/ParametersFloat.class create mode 100644 dependencyParser/experimental/mate-tools/classes/is2/parser/Parser.class create mode 100644 dependencyParser/experimental/mate-tools/classes/is2/parser/Pipe.class create mode 100755 dependencyParser/experimental/mate-tools/classes/is2/parser/package.html create mode 100644 dependencyParser/experimental/mate-tools/classes/is2/parserR2/Decoder.class create mode 100644 dependencyParser/experimental/mate-tools/classes/is2/parserR2/Options.class create mode 100644 dependencyParser/experimental/mate-tools/classes/is2/parserR2/Parameters.class create mode 100644 dependencyParser/experimental/mate-tools/classes/is2/parserR2/ParametersFloat.class create mode 100644 dependencyParser/experimental/mate-tools/classes/is2/parserR2/Parser.class create mode 100644 dependencyParser/experimental/mate-tools/classes/is2/parserR2/Pipe.class create mode 100644 dependencyParser/experimental/mate-tools/classes/is2/parserR2/PipeReranker.class create mode 100644 dependencyParser/experimental/mate-tools/classes/is2/parserR2/Reranker.class create mode 100755 dependencyParser/experimental/mate-tools/classes/is2/parserR2/package.html create mode 100644 dependencyParser/experimental/mate-tools/classes/is2/tag/ExtractorT2.class create mode 100644 dependencyParser/experimental/mate-tools/classes/is2/tag/Lexicon.class create mode 100644 dependencyParser/experimental/mate-tools/classes/is2/tag/MFO$Data4.class create mode 100644 dependencyParser/experimental/mate-tools/classes/is2/tag/MFO.class create mode 100644 dependencyParser/experimental/mate-tools/classes/is2/tag/Options.class create mode 100644 dependencyParser/experimental/mate-tools/classes/is2/tag/POS.class create mode 100644 dependencyParser/experimental/mate-tools/classes/is2/tag/Tagger.class create mode 100644 dependencyParser/experimental/mate-tools/classes/is2/tag/package.html create mode 100644 dependencyParser/experimental/mate-tools/classes/is2/tools/IPipe.class create mode 100644 dependencyParser/experimental/mate-tools/classes/is2/tools/Retrainable.class create mode 100644 dependencyParser/experimental/mate-tools/classes/is2/tools/Tool.class create mode 100644 dependencyParser/experimental/mate-tools/classes/is2/tools/ToolIO.class create mode 100644 dependencyParser/experimental/mate-tools/classes/is2/tools/Train.class create mode 100644 dependencyParser/experimental/mate-tools/classes/is2/util/Convert.class create mode 100644 dependencyParser/experimental/mate-tools/classes/is2/util/Convert0409.class create mode 100644 dependencyParser/experimental/mate-tools/classes/is2/util/ConvertADJ.class create mode 100644 dependencyParser/experimental/mate-tools/classes/is2/util/ConvertLowerCase0909.class create mode 100644 dependencyParser/experimental/mate-tools/classes/is2/util/ConvertTiger2CoNLL.class create mode 100644 dependencyParser/experimental/mate-tools/classes/is2/util/DB.class create mode 100644 dependencyParser/experimental/mate-tools/classes/is2/util/Edges$C.class create mode 100644 dependencyParser/experimental/mate-tools/classes/is2/util/Edges.class create mode 100644 dependencyParser/experimental/mate-tools/classes/is2/util/Evaluator$1.class create mode 100644 dependencyParser/experimental/mate-tools/classes/is2/util/Evaluator$Results.class create mode 100644 dependencyParser/experimental/mate-tools/classes/is2/util/Evaluator.class create mode 100644 dependencyParser/experimental/mate-tools/classes/is2/util/EvaluatorTagger$1.class create mode 100644 dependencyParser/experimental/mate-tools/classes/is2/util/EvaluatorTagger$2.class create mode 100644 dependencyParser/experimental/mate-tools/classes/is2/util/EvaluatorTagger$Results.class create mode 100644 dependencyParser/experimental/mate-tools/classes/is2/util/EvaluatorTagger.class create mode 100644 dependencyParser/experimental/mate-tools/classes/is2/util/ExtractParagraphs.class create mode 100644 dependencyParser/experimental/mate-tools/classes/is2/util/IntStack.class create mode 100644 dependencyParser/experimental/mate-tools/classes/is2/util/Long2Int.class create mode 100644 dependencyParser/experimental/mate-tools/classes/is2/util/Options.class create mode 100644 dependencyParser/experimental/mate-tools/classes/is2/util/OptionsSuper.class create mode 100644 dependencyParser/experimental/mate-tools/classes/is2/util/ParserEvaluator$Results.class create mode 100644 dependencyParser/experimental/mate-tools/classes/is2/util/ParserEvaluator.class create mode 100644 dependencyParser/experimental/mate-tools/classes/is2/util/Split.class create mode 100644 dependencyParser/experimental/mate-tools/classes/is2/util/Split2.class create mode 100644 dependencyParser/experimental/mate-tools/classes/is2/util/Split3.class create mode 100644 dependencyParser/experimental/mate-tools/lib/commons-math-2.2.jar create mode 100644 dependencyParser/experimental/mate-tools/lib/trove-2.0.4.jar create mode 100755 dependencyParser/experimental/mate-tools/src/decoder/ParallelDecoder.java create mode 100755 dependencyParser/experimental/mate-tools/src/decoder/ParallelRearrangeNBest.java create mode 100644 dependencyParser/experimental/mate-tools/src/decoder/ParallelRearrangeNBest2.java create mode 100644 dependencyParser/experimental/mate-tools/src/examples/DependencyParser.java create mode 100644 dependencyParser/experimental/mate-tools/src/examples/FullPipelineSpanish.java create mode 100644 dependencyParser/experimental/mate-tools/src/examples/FullPipelineTest.java create mode 100644 dependencyParser/experimental/mate-tools/src/examples/MorphTagger.java create mode 100755 dependencyParser/experimental/mate-tools/src/examples/ParseOnly.java create mode 100644 dependencyParser/experimental/mate-tools/src/examples/Pipeline.java create mode 100644 dependencyParser/experimental/mate-tools/src/extractors/Extractor.java create mode 100755 dependencyParser/experimental/mate-tools/src/extractors/ExtractorClusterStacked.java create mode 100644 dependencyParser/experimental/mate-tools/src/extractors/ExtractorClusterStackedR2.java create mode 100644 dependencyParser/experimental/mate-tools/src/extractors/ExtractorFactory.java create mode 100644 dependencyParser/experimental/mate-tools/src/extractors/ExtractorReranker.java create mode 100755 dependencyParser/experimental/mate-tools/src/extractors/ParallelExtract.java create mode 100755 dependencyParser/experimental/mate-tools/src/is2/data/Closed.java create mode 100644 dependencyParser/experimental/mate-tools/src/is2/data/Cluster.java create mode 100644 dependencyParser/experimental/mate-tools/src/is2/data/D4.java create mode 100644 dependencyParser/experimental/mate-tools/src/is2/data/D6.java create mode 100644 dependencyParser/experimental/mate-tools/src/is2/data/D7.java create mode 100644 dependencyParser/experimental/mate-tools/src/is2/data/DPSTree.java create mode 100644 dependencyParser/experimental/mate-tools/src/is2/data/DX.java create mode 100755 dependencyParser/experimental/mate-tools/src/is2/data/DataF.java create mode 100644 dependencyParser/experimental/mate-tools/src/is2/data/DataFES.java create mode 100644 dependencyParser/experimental/mate-tools/src/is2/data/DataT.java create mode 100644 dependencyParser/experimental/mate-tools/src/is2/data/Edges.java create mode 100755 dependencyParser/experimental/mate-tools/src/is2/data/F2S.java create mode 100755 dependencyParser/experimental/mate-tools/src/is2/data/F2SD.java create mode 100755 dependencyParser/experimental/mate-tools/src/is2/data/F2SF.java create mode 100644 dependencyParser/experimental/mate-tools/src/is2/data/F2SP.java create mode 100644 dependencyParser/experimental/mate-tools/src/is2/data/F2ST.java create mode 100755 dependencyParser/experimental/mate-tools/src/is2/data/FV.java create mode 100644 dependencyParser/experimental/mate-tools/src/is2/data/FVR.java create mode 100755 dependencyParser/experimental/mate-tools/src/is2/data/IEncoder.java create mode 100644 dependencyParser/experimental/mate-tools/src/is2/data/IEncoderPlus.java create mode 100755 dependencyParser/experimental/mate-tools/src/is2/data/IFV.java create mode 100755 dependencyParser/experimental/mate-tools/src/is2/data/Instances.java create mode 100644 dependencyParser/experimental/mate-tools/src/is2/data/InstancesTagger.java create mode 100644 dependencyParser/experimental/mate-tools/src/is2/data/IntIntHash.java create mode 100755 dependencyParser/experimental/mate-tools/src/is2/data/Long2Int.java create mode 100644 dependencyParser/experimental/mate-tools/src/is2/data/Long2IntExact.java create mode 100755 dependencyParser/experimental/mate-tools/src/is2/data/Long2IntInterface.java create mode 100644 dependencyParser/experimental/mate-tools/src/is2/data/Long2IntQuick.java create mode 100755 dependencyParser/experimental/mate-tools/src/is2/data/MFB.java create mode 100644 dependencyParser/experimental/mate-tools/src/is2/data/MFC.java create mode 100755 dependencyParser/experimental/mate-tools/src/is2/data/MFO.java create mode 100755 dependencyParser/experimental/mate-tools/src/is2/data/Open.java create mode 100644 dependencyParser/experimental/mate-tools/src/is2/data/PSTree.java create mode 100644 dependencyParser/experimental/mate-tools/src/is2/data/Parameter.java create mode 100755 dependencyParser/experimental/mate-tools/src/is2/data/ParametersFloat.java create mode 100755 dependencyParser/experimental/mate-tools/src/is2/data/Parse.java create mode 100644 dependencyParser/experimental/mate-tools/src/is2/data/ParseNBest.java create mode 100755 dependencyParser/experimental/mate-tools/src/is2/data/PipeGen.java create mode 100644 dependencyParser/experimental/mate-tools/src/is2/data/PrimeFinder.java create mode 100644 dependencyParser/experimental/mate-tools/src/is2/data/RandomIndex.java create mode 100755 dependencyParser/experimental/mate-tools/src/is2/data/SentenceData09.java create mode 100644 dependencyParser/experimental/mate-tools/src/is2/data/Thesaurus.java create mode 100644 dependencyParser/experimental/mate-tools/src/is2/io/CONLLReader04.java create mode 100755 dependencyParser/experimental/mate-tools/src/is2/io/CONLLReader06.java create mode 100644 dependencyParser/experimental/mate-tools/src/is2/io/CONLLReader08.java create mode 100755 dependencyParser/experimental/mate-tools/src/is2/io/CONLLReader09.java create mode 100755 dependencyParser/experimental/mate-tools/src/is2/io/CONLLWriter06.java create mode 100755 dependencyParser/experimental/mate-tools/src/is2/io/CONLLWriter09.java create mode 100644 dependencyParser/experimental/mate-tools/src/is2/io/IOGenerals.java create mode 100644 dependencyParser/experimental/mate-tools/src/is2/io/PSReader.java create mode 100644 dependencyParser/experimental/mate-tools/src/is2/io/TigerReader.java create mode 100755 dependencyParser/experimental/mate-tools/src/is2/lemmatizer/Evaluator.java create mode 100755 dependencyParser/experimental/mate-tools/src/is2/lemmatizer/Lemmatizer.java create mode 100755 dependencyParser/experimental/mate-tools/src/is2/lemmatizer/MFO.java create mode 100755 dependencyParser/experimental/mate-tools/src/is2/lemmatizer/Options.java create mode 100755 dependencyParser/experimental/mate-tools/src/is2/lemmatizer/Pipe.java create mode 100755 dependencyParser/experimental/mate-tools/src/is2/lemmatizer/StringEdit.java create mode 100755 dependencyParser/experimental/mate-tools/src/is2/mtag/Convert.java create mode 100755 dependencyParser/experimental/mate-tools/src/is2/mtag/Evaluator.java create mode 100644 dependencyParser/experimental/mate-tools/src/is2/mtag/ExtractorM.java create mode 100755 dependencyParser/experimental/mate-tools/src/is2/mtag/MFO.java create mode 100755 dependencyParser/experimental/mate-tools/src/is2/mtag/Options.java create mode 100755 dependencyParser/experimental/mate-tools/src/is2/mtag/Pipe.java create mode 100644 dependencyParser/experimental/mate-tools/src/is2/mtag/Tagger.java create mode 100755 dependencyParser/experimental/mate-tools/src/is2/parser/Closed.java create mode 100644 dependencyParser/experimental/mate-tools/src/is2/parser/D5.java create mode 100755 dependencyParser/experimental/mate-tools/src/is2/parser/Decoder.java create mode 100644 dependencyParser/experimental/mate-tools/src/is2/parser/Edges.java create mode 100755 dependencyParser/experimental/mate-tools/src/is2/parser/Evaluator.java create mode 100755 dependencyParser/experimental/mate-tools/src/is2/parser/Extractor.java create mode 100755 dependencyParser/experimental/mate-tools/src/is2/parser/MFO.java create mode 100755 dependencyParser/experimental/mate-tools/src/is2/parser/Open.java create mode 100755 dependencyParser/experimental/mate-tools/src/is2/parser/Options.java create mode 100755 dependencyParser/experimental/mate-tools/src/is2/parser/ParallelDecoder.java create mode 100755 dependencyParser/experimental/mate-tools/src/is2/parser/ParallelExtract.java create mode 100755 dependencyParser/experimental/mate-tools/src/is2/parser/ParallelRearrange.java create mode 100755 dependencyParser/experimental/mate-tools/src/is2/parser/Parameters.java create mode 100755 dependencyParser/experimental/mate-tools/src/is2/parser/ParametersFloat.java create mode 100755 dependencyParser/experimental/mate-tools/src/is2/parser/Parser.java create mode 100755 dependencyParser/experimental/mate-tools/src/is2/parser/Pipe.java create mode 100755 dependencyParser/experimental/mate-tools/src/is2/parser/package.html create mode 100755 dependencyParser/experimental/mate-tools/src/is2/parserR2/Decoder.java create mode 100755 dependencyParser/experimental/mate-tools/src/is2/parserR2/Options.java create mode 100755 dependencyParser/experimental/mate-tools/src/is2/parserR2/Parameters.java create mode 100755 dependencyParser/experimental/mate-tools/src/is2/parserR2/ParametersFloat.java create mode 100755 dependencyParser/experimental/mate-tools/src/is2/parserR2/Parser.java create mode 100755 dependencyParser/experimental/mate-tools/src/is2/parserR2/Pipe.java create mode 100644 dependencyParser/experimental/mate-tools/src/is2/parserR2/PipeReranker.java create mode 100644 dependencyParser/experimental/mate-tools/src/is2/parserR2/Reranker.java create mode 100755 dependencyParser/experimental/mate-tools/src/is2/parserR2/package.html create mode 100644 dependencyParser/experimental/mate-tools/src/is2/tag/ExtractorT2.java create mode 100644 dependencyParser/experimental/mate-tools/src/is2/tag/Lexicon.java create mode 100644 dependencyParser/experimental/mate-tools/src/is2/tag/MFO.java create mode 100644 dependencyParser/experimental/mate-tools/src/is2/tag/Options.java create mode 100644 dependencyParser/experimental/mate-tools/src/is2/tag/POS.java create mode 100644 dependencyParser/experimental/mate-tools/src/is2/tag/Tagger.java create mode 100644 dependencyParser/experimental/mate-tools/src/is2/tag/package.html create mode 100644 dependencyParser/experimental/mate-tools/src/is2/tools/IPipe.java create mode 100644 dependencyParser/experimental/mate-tools/src/is2/tools/Retrainable.java create mode 100644 dependencyParser/experimental/mate-tools/src/is2/tools/Tool.java create mode 100644 dependencyParser/experimental/mate-tools/src/is2/tools/ToolIO.java create mode 100644 dependencyParser/experimental/mate-tools/src/is2/tools/Train.java create mode 100644 dependencyParser/experimental/mate-tools/src/is2/util/Convert.java create mode 100644 dependencyParser/experimental/mate-tools/src/is2/util/Convert0409.java create mode 100644 dependencyParser/experimental/mate-tools/src/is2/util/ConvertADJ.java create mode 100644 dependencyParser/experimental/mate-tools/src/is2/util/ConvertLowerCase0909.java create mode 100644 dependencyParser/experimental/mate-tools/src/is2/util/ConvertTiger2CoNLL.java create mode 100755 dependencyParser/experimental/mate-tools/src/is2/util/DB.java create mode 100644 dependencyParser/experimental/mate-tools/src/is2/util/Edges.java create mode 100644 dependencyParser/experimental/mate-tools/src/is2/util/Evaluator.java create mode 100644 dependencyParser/experimental/mate-tools/src/is2/util/EvaluatorTagger.java create mode 100644 dependencyParser/experimental/mate-tools/src/is2/util/ExtractParagraphs.java create mode 100644 dependencyParser/experimental/mate-tools/src/is2/util/IntStack.java create mode 100644 dependencyParser/experimental/mate-tools/src/is2/util/Long2Int.java create mode 100644 dependencyParser/experimental/mate-tools/src/is2/util/Options.java create mode 100755 dependencyParser/experimental/mate-tools/src/is2/util/OptionsSuper.java create mode 100644 dependencyParser/experimental/mate-tools/src/is2/util/ParserEvaluator.java create mode 100755 dependencyParser/experimental/mate-tools/src/is2/util/Split.java create mode 100644 dependencyParser/experimental/mate-tools/src/is2/util/Split2.java create mode 100644 dependencyParser/experimental/mate-tools/src/is2/util/Split3.java delete mode 100644 dependencyParser/mate-tools/.classpath delete mode 100644 dependencyParser/mate-tools/.externalToolBuilders/New_Builder.launch delete mode 100644 dependencyParser/mate-tools/.externalToolBuilders/ana.launch delete mode 100644 dependencyParser/mate-tools/.project delete mode 100644 dependencyParser/mate-tools/build.xml delete mode 100644 dependencyParser/mate-tools/classes/decoder/ParallelDecoder$DSet.class delete mode 100644 dependencyParser/mate-tools/classes/decoder/ParallelDecoder.class delete mode 100644 dependencyParser/mate-tools/classes/decoder/ParallelRearrangeNBest$PA.class delete mode 100644 dependencyParser/mate-tools/classes/decoder/ParallelRearrangeNBest.class delete mode 100644 dependencyParser/mate-tools/classes/decoder/ParallelRearrangeNBest2$PA.class delete mode 100644 dependencyParser/mate-tools/classes/decoder/ParallelRearrangeNBest2.class delete mode 100644 dependencyParser/mate-tools/classes/examples/DependencyParser.class delete mode 100644 dependencyParser/mate-tools/classes/examples/FullPipelineSpanish.class delete mode 100644 dependencyParser/mate-tools/classes/examples/FullPipelineTest.class delete mode 100644 dependencyParser/mate-tools/classes/examples/MorphTagger.class delete mode 100644 dependencyParser/mate-tools/classes/examples/ParseOnly.class delete mode 100644 dependencyParser/mate-tools/classes/examples/Pipeline.class delete mode 100644 dependencyParser/mate-tools/classes/extractors/Extractor.class delete mode 100644 dependencyParser/mate-tools/classes/extractors/ExtractorClusterStacked.class delete mode 100644 dependencyParser/mate-tools/classes/extractors/ExtractorClusterStackedR2.class delete mode 100644 dependencyParser/mate-tools/classes/extractors/ExtractorFactory.class delete mode 100644 dependencyParser/mate-tools/classes/extractors/ExtractorReranker.class delete mode 100644 dependencyParser/mate-tools/classes/extractors/ParallelExtract$DSet.class delete mode 100644 dependencyParser/mate-tools/classes/extractors/ParallelExtract.class delete mode 100644 dependencyParser/mate-tools/classes/is2/data/Closed.class delete mode 100644 dependencyParser/mate-tools/classes/is2/data/Cluster.class delete mode 100644 dependencyParser/mate-tools/classes/is2/data/D4.class delete mode 100644 dependencyParser/mate-tools/classes/is2/data/D6.class delete mode 100644 dependencyParser/mate-tools/classes/is2/data/D7.class delete mode 100644 dependencyParser/mate-tools/classes/is2/data/DPSTree.class delete mode 100644 dependencyParser/mate-tools/classes/is2/data/DX.class delete mode 100644 dependencyParser/mate-tools/classes/is2/data/DataF.class delete mode 100644 dependencyParser/mate-tools/classes/is2/data/DataFES.class delete mode 100644 dependencyParser/mate-tools/classes/is2/data/DataT.class delete mode 100644 dependencyParser/mate-tools/classes/is2/data/Edges$C.class delete mode 100644 dependencyParser/mate-tools/classes/is2/data/Edges.class delete mode 100644 dependencyParser/mate-tools/classes/is2/data/F2S.class delete mode 100644 dependencyParser/mate-tools/classes/is2/data/F2SD.class delete mode 100644 dependencyParser/mate-tools/classes/is2/data/F2SF.class delete mode 100644 dependencyParser/mate-tools/classes/is2/data/F2SP.class delete mode 100644 dependencyParser/mate-tools/classes/is2/data/F2ST.class delete mode 100644 dependencyParser/mate-tools/classes/is2/data/FV.class delete mode 100644 dependencyParser/mate-tools/classes/is2/data/FVR.class delete mode 100644 dependencyParser/mate-tools/classes/is2/data/IEncoder.class delete mode 100644 dependencyParser/mate-tools/classes/is2/data/IEncoderPlus.class delete mode 100644 dependencyParser/mate-tools/classes/is2/data/IFV.class delete mode 100644 dependencyParser/mate-tools/classes/is2/data/Instances.class delete mode 100644 dependencyParser/mate-tools/classes/is2/data/InstancesTagger.class delete mode 100644 dependencyParser/mate-tools/classes/is2/data/IntIntHash.class delete mode 100644 dependencyParser/mate-tools/classes/is2/data/Long2Int.class delete mode 100644 dependencyParser/mate-tools/classes/is2/data/Long2IntExact.class delete mode 100644 dependencyParser/mate-tools/classes/is2/data/Long2IntInterface.class delete mode 100644 dependencyParser/mate-tools/classes/is2/data/Long2IntQuick.class delete mode 100644 dependencyParser/mate-tools/classes/is2/data/MFB.class delete mode 100644 dependencyParser/mate-tools/classes/is2/data/MFC.class delete mode 100644 dependencyParser/mate-tools/classes/is2/data/MFO$Data4.class delete mode 100644 dependencyParser/mate-tools/classes/is2/data/MFO.class delete mode 100644 dependencyParser/mate-tools/classes/is2/data/Open.class delete mode 100644 dependencyParser/mate-tools/classes/is2/data/PSTree.class delete mode 100644 dependencyParser/mate-tools/classes/is2/data/Parameter.class delete mode 100644 dependencyParser/mate-tools/classes/is2/data/ParametersFloat.class delete mode 100644 dependencyParser/mate-tools/classes/is2/data/Parse.class delete mode 100644 dependencyParser/mate-tools/classes/is2/data/ParseNBest.class delete mode 100644 dependencyParser/mate-tools/classes/is2/data/PipeGen.class delete mode 100644 dependencyParser/mate-tools/classes/is2/data/PrimeFinder.class delete mode 100644 dependencyParser/mate-tools/classes/is2/data/RandomIndex.class delete mode 100644 dependencyParser/mate-tools/classes/is2/data/SentenceData09.class delete mode 100644 dependencyParser/mate-tools/classes/is2/data/Thesaurus.class delete mode 100644 dependencyParser/mate-tools/classes/is2/io/CONLLReader04.class delete mode 100644 dependencyParser/mate-tools/classes/is2/io/CONLLReader06.class delete mode 100644 dependencyParser/mate-tools/classes/is2/io/CONLLReader08.class delete mode 100644 dependencyParser/mate-tools/classes/is2/io/CONLLReader09.class delete mode 100644 dependencyParser/mate-tools/classes/is2/io/CONLLWriter06.class delete mode 100644 dependencyParser/mate-tools/classes/is2/io/CONLLWriter09.class delete mode 100644 dependencyParser/mate-tools/classes/is2/io/IOGenerals.class delete mode 100644 dependencyParser/mate-tools/classes/is2/io/PSReader.class delete mode 100644 dependencyParser/mate-tools/classes/is2/io/TigerReader$Line.class delete mode 100644 dependencyParser/mate-tools/classes/is2/io/TigerReader.class delete mode 100644 dependencyParser/mate-tools/classes/is2/lemmatizer/Evaluator$1.class delete mode 100644 dependencyParser/mate-tools/classes/is2/lemmatizer/Evaluator.class delete mode 100644 dependencyParser/mate-tools/classes/is2/lemmatizer/Lemmatizer$1.class delete mode 100644 dependencyParser/mate-tools/classes/is2/lemmatizer/Lemmatizer.class delete mode 100644 dependencyParser/mate-tools/classes/is2/lemmatizer/MFO.class delete mode 100644 dependencyParser/mate-tools/classes/is2/lemmatizer/Options.class delete mode 100644 dependencyParser/mate-tools/classes/is2/lemmatizer/Pipe$1.class delete mode 100644 dependencyParser/mate-tools/classes/is2/lemmatizer/Pipe.class delete mode 100644 dependencyParser/mate-tools/classes/is2/lemmatizer/StringEdit.class delete mode 100644 dependencyParser/mate-tools/classes/is2/mtag/Convert.class delete mode 100644 dependencyParser/mate-tools/classes/is2/mtag/Evaluator$1.class delete mode 100644 dependencyParser/mate-tools/classes/is2/mtag/Evaluator.class delete mode 100644 dependencyParser/mate-tools/classes/is2/mtag/ExtractorM.class delete mode 100644 dependencyParser/mate-tools/classes/is2/mtag/MFO$Data.class delete mode 100644 dependencyParser/mate-tools/classes/is2/mtag/MFO$Data4.class delete mode 100644 dependencyParser/mate-tools/classes/is2/mtag/MFO.class delete mode 100644 dependencyParser/mate-tools/classes/is2/mtag/Options.class delete mode 100644 dependencyParser/mate-tools/classes/is2/mtag/Pipe.class delete mode 100644 dependencyParser/mate-tools/classes/is2/mtag/Tagger.class delete mode 100644 dependencyParser/mate-tools/classes/is2/parser/Closed.class delete mode 100644 dependencyParser/mate-tools/classes/is2/parser/D5.class delete mode 100644 dependencyParser/mate-tools/classes/is2/parser/Decoder.class delete mode 100644 dependencyParser/mate-tools/classes/is2/parser/Edges$C.class delete mode 100644 dependencyParser/mate-tools/classes/is2/parser/Edges.class delete mode 100644 dependencyParser/mate-tools/classes/is2/parser/Evaluator$Results.class delete mode 100644 dependencyParser/mate-tools/classes/is2/parser/Evaluator.class delete mode 100644 dependencyParser/mate-tools/classes/is2/parser/Extractor.class delete mode 100644 dependencyParser/mate-tools/classes/is2/parser/MFO.class delete mode 100644 dependencyParser/mate-tools/classes/is2/parser/Open.class delete mode 100644 dependencyParser/mate-tools/classes/is2/parser/Options.class delete mode 100644 dependencyParser/mate-tools/classes/is2/parser/ParallelDecoder$DSet.class delete mode 100644 dependencyParser/mate-tools/classes/is2/parser/ParallelDecoder.class delete mode 100644 dependencyParser/mate-tools/classes/is2/parser/ParallelExtract$DSet.class delete mode 100644 dependencyParser/mate-tools/classes/is2/parser/ParallelExtract.class delete mode 100644 dependencyParser/mate-tools/classes/is2/parser/ParallelRearrange$PA.class delete mode 100644 dependencyParser/mate-tools/classes/is2/parser/ParallelRearrange.class delete mode 100644 dependencyParser/mate-tools/classes/is2/parser/Parameters.class delete mode 100644 dependencyParser/mate-tools/classes/is2/parser/ParametersFloat.class delete mode 100644 dependencyParser/mate-tools/classes/is2/parser/Parser.class delete mode 100644 dependencyParser/mate-tools/classes/is2/parser/Pipe.class delete mode 100755 dependencyParser/mate-tools/classes/is2/parser/package.html delete mode 100644 dependencyParser/mate-tools/classes/is2/parserR2/Decoder.class delete mode 100644 dependencyParser/mate-tools/classes/is2/parserR2/Options.class delete mode 100644 dependencyParser/mate-tools/classes/is2/parserR2/Parameters.class delete mode 100644 dependencyParser/mate-tools/classes/is2/parserR2/ParametersFloat.class delete mode 100644 dependencyParser/mate-tools/classes/is2/parserR2/Parser.class delete mode 100644 dependencyParser/mate-tools/classes/is2/parserR2/Pipe.class delete mode 100644 dependencyParser/mate-tools/classes/is2/parserR2/PipeReranker.class delete mode 100644 dependencyParser/mate-tools/classes/is2/parserR2/Reranker.class delete mode 100755 dependencyParser/mate-tools/classes/is2/parserR2/package.html delete mode 100644 dependencyParser/mate-tools/classes/is2/tag/ExtractorT2.class delete mode 100644 dependencyParser/mate-tools/classes/is2/tag/Lexicon.class delete mode 100644 dependencyParser/mate-tools/classes/is2/tag/MFO$Data4.class delete mode 100644 dependencyParser/mate-tools/classes/is2/tag/MFO.class delete mode 100644 dependencyParser/mate-tools/classes/is2/tag/Options.class delete mode 100644 dependencyParser/mate-tools/classes/is2/tag/POS.class delete mode 100644 dependencyParser/mate-tools/classes/is2/tag/Tagger.class delete mode 100644 dependencyParser/mate-tools/classes/is2/tag/package.html delete mode 100644 dependencyParser/mate-tools/classes/is2/tools/IPipe.class delete mode 100644 dependencyParser/mate-tools/classes/is2/tools/Retrainable.class delete mode 100644 dependencyParser/mate-tools/classes/is2/tools/Tool.class delete mode 100644 dependencyParser/mate-tools/classes/is2/tools/ToolIO.class delete mode 100644 dependencyParser/mate-tools/classes/is2/tools/Train.class delete mode 100644 dependencyParser/mate-tools/classes/is2/util/Convert.class delete mode 100644 dependencyParser/mate-tools/classes/is2/util/Convert0409.class delete mode 100644 dependencyParser/mate-tools/classes/is2/util/ConvertADJ.class delete mode 100644 dependencyParser/mate-tools/classes/is2/util/ConvertLowerCase0909.class delete mode 100644 dependencyParser/mate-tools/classes/is2/util/ConvertTiger2CoNLL.class delete mode 100644 dependencyParser/mate-tools/classes/is2/util/DB.class delete mode 100644 dependencyParser/mate-tools/classes/is2/util/Edges$C.class delete mode 100644 dependencyParser/mate-tools/classes/is2/util/Edges.class delete mode 100644 dependencyParser/mate-tools/classes/is2/util/Evaluator$1.class delete mode 100644 dependencyParser/mate-tools/classes/is2/util/Evaluator$Results.class delete mode 100644 dependencyParser/mate-tools/classes/is2/util/Evaluator.class delete mode 100644 dependencyParser/mate-tools/classes/is2/util/EvaluatorTagger$1.class delete mode 100644 dependencyParser/mate-tools/classes/is2/util/EvaluatorTagger$2.class delete mode 100644 dependencyParser/mate-tools/classes/is2/util/EvaluatorTagger$Results.class delete mode 100644 dependencyParser/mate-tools/classes/is2/util/EvaluatorTagger.class delete mode 100644 dependencyParser/mate-tools/classes/is2/util/ExtractParagraphs.class delete mode 100644 dependencyParser/mate-tools/classes/is2/util/IntStack.class delete mode 100644 dependencyParser/mate-tools/classes/is2/util/Long2Int.class delete mode 100644 dependencyParser/mate-tools/classes/is2/util/Options.class delete mode 100644 dependencyParser/mate-tools/classes/is2/util/OptionsSuper.class delete mode 100644 dependencyParser/mate-tools/classes/is2/util/ParserEvaluator$Results.class delete mode 100644 dependencyParser/mate-tools/classes/is2/util/ParserEvaluator.class delete mode 100644 dependencyParser/mate-tools/classes/is2/util/Split.class delete mode 100644 dependencyParser/mate-tools/classes/is2/util/Split2.class delete mode 100644 dependencyParser/mate-tools/classes/is2/util/Split3.class delete mode 100644 dependencyParser/mate-tools/lib/commons-math-2.2.jar delete mode 100644 dependencyParser/mate-tools/lib/trove-2.0.4.jar delete mode 100755 dependencyParser/mate-tools/src/decoder/ParallelDecoder.java delete mode 100755 dependencyParser/mate-tools/src/decoder/ParallelRearrangeNBest.java delete mode 100644 dependencyParser/mate-tools/src/decoder/ParallelRearrangeNBest2.java delete mode 100644 dependencyParser/mate-tools/src/examples/DependencyParser.java delete mode 100644 dependencyParser/mate-tools/src/examples/FullPipelineSpanish.java delete mode 100644 dependencyParser/mate-tools/src/examples/FullPipelineTest.java delete mode 100644 dependencyParser/mate-tools/src/examples/MorphTagger.java delete mode 100755 dependencyParser/mate-tools/src/examples/ParseOnly.java delete mode 100644 dependencyParser/mate-tools/src/examples/Pipeline.java delete mode 100644 dependencyParser/mate-tools/src/extractors/Extractor.java delete mode 100755 dependencyParser/mate-tools/src/extractors/ExtractorClusterStacked.java delete mode 100644 dependencyParser/mate-tools/src/extractors/ExtractorClusterStackedR2.java delete mode 100644 dependencyParser/mate-tools/src/extractors/ExtractorFactory.java delete mode 100644 dependencyParser/mate-tools/src/extractors/ExtractorReranker.java delete mode 100755 dependencyParser/mate-tools/src/extractors/ParallelExtract.java delete mode 100755 dependencyParser/mate-tools/src/is2/data/Closed.java delete mode 100644 dependencyParser/mate-tools/src/is2/data/Cluster.java delete mode 100644 dependencyParser/mate-tools/src/is2/data/D4.java delete mode 100644 dependencyParser/mate-tools/src/is2/data/D6.java delete mode 100644 dependencyParser/mate-tools/src/is2/data/D7.java delete mode 100644 dependencyParser/mate-tools/src/is2/data/DPSTree.java delete mode 100644 dependencyParser/mate-tools/src/is2/data/DX.java delete mode 100755 dependencyParser/mate-tools/src/is2/data/DataF.java delete mode 100644 dependencyParser/mate-tools/src/is2/data/DataFES.java delete mode 100644 dependencyParser/mate-tools/src/is2/data/DataT.java delete mode 100644 dependencyParser/mate-tools/src/is2/data/Edges.java delete mode 100755 dependencyParser/mate-tools/src/is2/data/F2S.java delete mode 100755 dependencyParser/mate-tools/src/is2/data/F2SD.java delete mode 100755 dependencyParser/mate-tools/src/is2/data/F2SF.java delete mode 100644 dependencyParser/mate-tools/src/is2/data/F2SP.java delete mode 100644 dependencyParser/mate-tools/src/is2/data/F2ST.java delete mode 100755 dependencyParser/mate-tools/src/is2/data/FV.java delete mode 100644 dependencyParser/mate-tools/src/is2/data/FVR.java delete mode 100755 dependencyParser/mate-tools/src/is2/data/IEncoder.java delete mode 100644 dependencyParser/mate-tools/src/is2/data/IEncoderPlus.java delete mode 100755 dependencyParser/mate-tools/src/is2/data/IFV.java delete mode 100755 dependencyParser/mate-tools/src/is2/data/Instances.java delete mode 100644 dependencyParser/mate-tools/src/is2/data/InstancesTagger.java delete mode 100644 dependencyParser/mate-tools/src/is2/data/IntIntHash.java delete mode 100755 dependencyParser/mate-tools/src/is2/data/Long2Int.java delete mode 100644 dependencyParser/mate-tools/src/is2/data/Long2IntExact.java delete mode 100755 dependencyParser/mate-tools/src/is2/data/Long2IntInterface.java delete mode 100644 dependencyParser/mate-tools/src/is2/data/Long2IntQuick.java delete mode 100755 dependencyParser/mate-tools/src/is2/data/MFB.java delete mode 100644 dependencyParser/mate-tools/src/is2/data/MFC.java delete mode 100755 dependencyParser/mate-tools/src/is2/data/MFO.java delete mode 100755 dependencyParser/mate-tools/src/is2/data/Open.java delete mode 100644 dependencyParser/mate-tools/src/is2/data/PSTree.java delete mode 100644 dependencyParser/mate-tools/src/is2/data/Parameter.java delete mode 100755 dependencyParser/mate-tools/src/is2/data/ParametersFloat.java delete mode 100755 dependencyParser/mate-tools/src/is2/data/Parse.java delete mode 100644 dependencyParser/mate-tools/src/is2/data/ParseNBest.java delete mode 100755 dependencyParser/mate-tools/src/is2/data/PipeGen.java delete mode 100644 dependencyParser/mate-tools/src/is2/data/PrimeFinder.java delete mode 100644 dependencyParser/mate-tools/src/is2/data/RandomIndex.java delete mode 100755 dependencyParser/mate-tools/src/is2/data/SentenceData09.java delete mode 100644 dependencyParser/mate-tools/src/is2/data/Thesaurus.java delete mode 100644 dependencyParser/mate-tools/src/is2/io/CONLLReader04.java delete mode 100755 dependencyParser/mate-tools/src/is2/io/CONLLReader06.java delete mode 100644 dependencyParser/mate-tools/src/is2/io/CONLLReader08.java delete mode 100755 dependencyParser/mate-tools/src/is2/io/CONLLReader09.java delete mode 100755 dependencyParser/mate-tools/src/is2/io/CONLLWriter06.java delete mode 100755 dependencyParser/mate-tools/src/is2/io/CONLLWriter09.java delete mode 100644 dependencyParser/mate-tools/src/is2/io/IOGenerals.java delete mode 100644 dependencyParser/mate-tools/src/is2/io/PSReader.java delete mode 100644 dependencyParser/mate-tools/src/is2/io/TigerReader.java delete mode 100755 dependencyParser/mate-tools/src/is2/lemmatizer/Evaluator.java delete mode 100755 dependencyParser/mate-tools/src/is2/lemmatizer/Lemmatizer.java delete mode 100755 dependencyParser/mate-tools/src/is2/lemmatizer/MFO.java delete mode 100755 dependencyParser/mate-tools/src/is2/lemmatizer/Options.java delete mode 100755 dependencyParser/mate-tools/src/is2/lemmatizer/Pipe.java delete mode 100755 dependencyParser/mate-tools/src/is2/lemmatizer/StringEdit.java delete mode 100755 dependencyParser/mate-tools/src/is2/mtag/Convert.java delete mode 100755 dependencyParser/mate-tools/src/is2/mtag/Evaluator.java delete mode 100644 dependencyParser/mate-tools/src/is2/mtag/ExtractorM.java delete mode 100755 dependencyParser/mate-tools/src/is2/mtag/MFO.java delete mode 100755 dependencyParser/mate-tools/src/is2/mtag/Options.java delete mode 100755 dependencyParser/mate-tools/src/is2/mtag/Pipe.java delete mode 100644 dependencyParser/mate-tools/src/is2/mtag/Tagger.java delete mode 100755 dependencyParser/mate-tools/src/is2/parser/Closed.java delete mode 100644 dependencyParser/mate-tools/src/is2/parser/D5.java delete mode 100755 dependencyParser/mate-tools/src/is2/parser/Decoder.java delete mode 100644 dependencyParser/mate-tools/src/is2/parser/Edges.java delete mode 100755 dependencyParser/mate-tools/src/is2/parser/Evaluator.java delete mode 100755 dependencyParser/mate-tools/src/is2/parser/Extractor.java delete mode 100755 dependencyParser/mate-tools/src/is2/parser/MFO.java delete mode 100755 dependencyParser/mate-tools/src/is2/parser/Open.java delete mode 100755 dependencyParser/mate-tools/src/is2/parser/Options.java delete mode 100755 dependencyParser/mate-tools/src/is2/parser/ParallelDecoder.java delete mode 100755 dependencyParser/mate-tools/src/is2/parser/ParallelExtract.java delete mode 100755 dependencyParser/mate-tools/src/is2/parser/ParallelRearrange.java delete mode 100755 dependencyParser/mate-tools/src/is2/parser/Parameters.java delete mode 100755 dependencyParser/mate-tools/src/is2/parser/ParametersFloat.java delete mode 100755 dependencyParser/mate-tools/src/is2/parser/Parser.java delete mode 100755 dependencyParser/mate-tools/src/is2/parser/Pipe.java delete mode 100755 dependencyParser/mate-tools/src/is2/parser/package.html delete mode 100755 dependencyParser/mate-tools/src/is2/parserR2/Decoder.java delete mode 100755 dependencyParser/mate-tools/src/is2/parserR2/Options.java delete mode 100755 dependencyParser/mate-tools/src/is2/parserR2/Parameters.java delete mode 100755 dependencyParser/mate-tools/src/is2/parserR2/ParametersFloat.java delete mode 100755 dependencyParser/mate-tools/src/is2/parserR2/Parser.java delete mode 100755 dependencyParser/mate-tools/src/is2/parserR2/Pipe.java delete mode 100644 dependencyParser/mate-tools/src/is2/parserR2/PipeReranker.java delete mode 100644 dependencyParser/mate-tools/src/is2/parserR2/Reranker.java delete mode 100755 dependencyParser/mate-tools/src/is2/parserR2/package.html delete mode 100644 dependencyParser/mate-tools/src/is2/tag/ExtractorT2.java delete mode 100644 dependencyParser/mate-tools/src/is2/tag/Lexicon.java delete mode 100644 dependencyParser/mate-tools/src/is2/tag/MFO.java delete mode 100644 dependencyParser/mate-tools/src/is2/tag/Options.java delete mode 100644 dependencyParser/mate-tools/src/is2/tag/POS.java delete mode 100644 dependencyParser/mate-tools/src/is2/tag/Tagger.java delete mode 100644 dependencyParser/mate-tools/src/is2/tag/package.html delete mode 100644 dependencyParser/mate-tools/src/is2/tools/IPipe.java delete mode 100644 dependencyParser/mate-tools/src/is2/tools/Retrainable.java delete mode 100644 dependencyParser/mate-tools/src/is2/tools/Tool.java delete mode 100644 dependencyParser/mate-tools/src/is2/tools/ToolIO.java delete mode 100644 dependencyParser/mate-tools/src/is2/tools/Train.java delete mode 100644 dependencyParser/mate-tools/src/is2/util/Convert.java delete mode 100644 dependencyParser/mate-tools/src/is2/util/Convert0409.java delete mode 100644 dependencyParser/mate-tools/src/is2/util/ConvertADJ.java delete mode 100644 dependencyParser/mate-tools/src/is2/util/ConvertLowerCase0909.java delete mode 100644 dependencyParser/mate-tools/src/is2/util/ConvertTiger2CoNLL.java delete mode 100755 dependencyParser/mate-tools/src/is2/util/DB.java delete mode 100644 dependencyParser/mate-tools/src/is2/util/Edges.java delete mode 100644 dependencyParser/mate-tools/src/is2/util/Evaluator.java delete mode 100644 dependencyParser/mate-tools/src/is2/util/EvaluatorTagger.java delete mode 100644 dependencyParser/mate-tools/src/is2/util/ExtractParagraphs.java delete mode 100644 dependencyParser/mate-tools/src/is2/util/IntStack.java delete mode 100644 dependencyParser/mate-tools/src/is2/util/Long2Int.java delete mode 100644 dependencyParser/mate-tools/src/is2/util/Options.java delete mode 100755 dependencyParser/mate-tools/src/is2/util/OptionsSuper.java delete mode 100644 dependencyParser/mate-tools/src/is2/util/ParserEvaluator.java delete mode 100755 dependencyParser/mate-tools/src/is2/util/Split.java delete mode 100644 dependencyParser/mate-tools/src/is2/util/Split2.java delete mode 100644 dependencyParser/mate-tools/src/is2/util/Split3.java diff --git a/dependencyParser/basic/mate-tools/.classpath b/dependencyParser/basic/mate-tools/.classpath new file mode 100644 index 0000000..8092159 --- /dev/null +++ b/dependencyParser/basic/mate-tools/.classpath @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="UTF-8"?> +<classpath> + <classpathentry kind="src" path="src"/> + <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/> + <classpathentry kind="lib" path="/mtt/lib/trove.jar"/> + <classpathentry kind="lib" path="lib/commons-math-2.2.jar"/> + <classpathentry kind="output" path="classes"/> +</classpath> diff --git a/dependencyParser/basic/mate-tools/.externalToolBuilders/New_Builder.launch b/dependencyParser/basic/mate-tools/.externalToolBuilders/New_Builder.launch new file mode 100644 index 0000000..eca73f7 --- /dev/null +++ b/dependencyParser/basic/mate-tools/.externalToolBuilders/New_Builder.launch @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="UTF-8"?> +<launchConfiguration type="org.eclipse.ui.externaltools.ProgramBuilderLaunchConfigurationType"> +<booleanAttribute key="org.eclipse.debug.ui.ATTR_LAUNCH_IN_BACKGROUND" value="false"/> +<stringAttribute key="org.eclipse.ui.externaltools.ATTR_LOCATION" value="${workspace_loc:/mate-tools/.project}"/> +<stringAttribute key="org.eclipse.ui.externaltools.ATTR_RUN_BUILD_KINDS" value="full,incremental,"/> +<booleanAttribute key="org.eclipse.ui.externaltools.ATTR_TRIGGERS_CONFIGURED" value="true"/> +<stringAttribute key="org.eclipse.ui.externaltools.ATTR_WORKING_DIRECTORY" value="${workspace_loc:/mate-tools}"/> +</launchConfiguration> diff --git a/dependencyParser/basic/mate-tools/.externalToolBuilders/ana.launch b/dependencyParser/basic/mate-tools/.externalToolBuilders/ana.launch new file mode 100644 index 0000000..09df90d --- /dev/null +++ b/dependencyParser/basic/mate-tools/.externalToolBuilders/ana.launch @@ -0,0 +1,20 @@ +<?xml version="1.0" encoding="UTF-8"?> +<launchConfiguration type="org.eclipse.ant.AntBuilderLaunchConfigurationType"> +<booleanAttribute key="org.eclipse.ant.ui.ATTR_TARGETS_UPDATED" value="true"/> +<booleanAttribute key="org.eclipse.ant.ui.DEFAULT_VM_INSTALL" value="false"/> +<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS"> +<listEntry value="/mate-tools/scripts/build.xml"/> +</listAttribute> +<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES"> +<listEntry value="1"/> +</listAttribute> +<booleanAttribute key="org.eclipse.debug.ui.ATTR_LAUNCH_IN_BACKGROUND" value="false"/> +<stringAttribute key="org.eclipse.jdt.launching.CLASSPATH_PROVIDER" value="org.eclipse.ant.ui.AntClasspathProvider"/> +<booleanAttribute key="org.eclipse.jdt.launching.DEFAULT_CLASSPATH" value="true"/> +<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="mate-tools"/> +<booleanAttribute key="org.eclipse.ui.externaltools.ATTR_BUILDER_ENABLED" value="false"/> +<stringAttribute key="org.eclipse.ui.externaltools.ATTR_LOCATION" value="${workspace_loc:/mate-tools/scripts/build.xml}"/> +<stringAttribute key="org.eclipse.ui.externaltools.ATTR_RUN_BUILD_KINDS" value="full,incremental,"/> +<booleanAttribute key="org.eclipse.ui.externaltools.ATTR_TRIGGERS_CONFIGURED" value="true"/> +<stringAttribute key="org.eclipse.ui.externaltools.ATTR_WORKING_DIRECTORY" value="${workspace_loc:/mate-tools}"/> +</launchConfiguration> diff --git a/dependencyParser/basic/mate-tools/.project b/dependencyParser/basic/mate-tools/.project new file mode 100644 index 0000000..f813b9e --- /dev/null +++ b/dependencyParser/basic/mate-tools/.project @@ -0,0 +1,17 @@ +<?xml version="1.0" encoding="UTF-8"?> +<projectDescription> + <name>mate-tools</name> + <comment></comment> + <projects> + </projects> + <buildSpec> + <buildCommand> + <name>org.eclipse.jdt.core.javabuilder</name> + <arguments> + </arguments> + </buildCommand> + </buildSpec> + <natures> + <nature>org.eclipse.jdt.core.javanature</nature> + </natures> +</projectDescription> diff --git a/dependencyParser/basic/mate-tools/build.xml b/dependencyParser/basic/mate-tools/build.xml new file mode 100644 index 0000000..c558279 --- /dev/null +++ b/dependencyParser/basic/mate-tools/build.xml @@ -0,0 +1,64 @@ +<project name="analyse" default="compile" basedir="."> + <description> + The base ant build file. + </description> + + <!-- set global properties for this build --> + <property name="src" location="src"/> + <property name="classes" location="classes"/> + <property name="dist" location="dist"/> + <property name="include" location="include"/> + + + <target name="init" description="Clears the /class directory"> + <!-- Create the time stamp --> + <tstamp/> + <mkdir dir="dist"/> + <mkdir dir="javadoc"/> + <mkdir dir="classes"/> + </target> + + <target name="compile" depends="init" description="Compile the source" > + <!-- Compile the java code from ${src} into ${build} executable="javac" --> + + <javac srcdir="${src}" + destdir="${classes}" + includeantruntime="false" + executable="javac.exe" + optimize="true" + debug="off" + classpath=""/> + + </target> + + <target name="build" description="Build the distribution .jar file" > + <!-- Create the temporary distribution directory --> + <delete includeEmptyDirs="true"><fileset dir="dist" includes="**/*" excludes="gtc*.jar"/></delete> + <mkdir dir="${dist}/temp-${DSTAMP}"/> + <copy todir="${dist}/temp-${DSTAMP}"><fileset dir="${classes}" /></copy> + <copy todir="${dist}/temp-${DSTAMP}"><fileset dir="${include}" /></copy> + <!-- copy everything from /include/others to dist + <copy todir="${dist}/temp-${DSTAMP}"><fileset dir="${include}/others" /></copy>--> + <!-- copy everything from /include/classes to dist + <copy todir="${dist}/temp-${DSTAMP}"><fileset dir="${include}/classes" /></copy>--> + <!-- pack everything into a .jar file --> + <jar jarfile="${dist}/anna-3.5.jar" + basedir="${dist}/temp-${DSTAMP}"/> + <delete dir="${dist}/temp-{DSTAMP}" /> + </target> + + <target name="javadoc" depends="init" description="Create the javadoc API documentation" > + <delete includeEmptyDirs="true"><fileset dir="javadoc" includes="**/*"/></delete> + <!-- TODO: you might add new packages to packagenames --> + <javadoc destdir="javadoc" access="package" source="1.4" + use="false" notree="false" nonavbar="false" noindex="true" + splitindex="false" author="true" version="true" + nodeprecatedlist="true" nodeprecated="false" + packagenames="gtc.*.*" + sourcepath="src" classpath="class"/> + </target> + + + <target name="all" depends="init,compile,javadoc" description="Make all" /> +</project> + diff --git a/dependencyParser/basic/mate-tools/lib/commons-math-2.2.jar b/dependencyParser/basic/mate-tools/lib/commons-math-2.2.jar new file mode 100644 index 0000000..b29a39c Binary files /dev/null and b/dependencyParser/basic/mate-tools/lib/commons-math-2.2.jar differ diff --git a/dependencyParser/basic/mate-tools/lib/trove-2.0.4.jar b/dependencyParser/basic/mate-tools/lib/trove-2.0.4.jar new file mode 100644 index 0000000..cb1c8f1 Binary files /dev/null and b/dependencyParser/basic/mate-tools/lib/trove-2.0.4.jar differ diff --git a/dependencyParser/basic/mate-tools/src/decoder/ParallelDecoder.java b/dependencyParser/basic/mate-tools/src/decoder/ParallelDecoder.java new file mode 100755 index 0000000..0dd1c18 --- /dev/null +++ b/dependencyParser/basic/mate-tools/src/decoder/ParallelDecoder.java @@ -0,0 +1,155 @@ +package decoder; + +import is2.data.Closed; +import is2.data.DataF; +import is2.data.Edges; +import is2.data.Open; + +import java.util.ArrayList; +import java.util.concurrent.Callable; + +/** + * @author Bernd Bohnet, 30.08.2009 + * + * This class implements a parallel feature extractor. + */ +final public class ParallelDecoder implements Callable<Object> +{ + // some constants + private static final float INIT_BEST = (-1.0F / 0.0F); + private static final boolean[] DIR ={false,true}; + + // the data space of the weights for a dependency tree + final private DataF x; + + private short[] pos; + + private Open O[][][][]; + private Closed C[][][][] ; + + private int n; + + boolean done=false; + public boolean waiting =false; + + /** + * Initialize the parallel decoder. + * + * @param pos part-of-speech + * @param d data + * @param edges part-of-speech edge mapping + * @param o open spans + * @param c closed spans + * @param n number of words + */ + public ParallelDecoder(short[] pos, DataF d, Open o[][][][], Closed c[][][][], int n) { + + this.pos =pos; + this.x =d; + + this.O=o; + this.C=c; + this.n=n; + } + + + private static class DSet { short w1,w2;} + + @Override + public Object call() { + + while (true){ + + DSet set = get(); + if (done && set==null) break; + + if (set ==null) return null; + + short s=set.w1, t=set.w2; + + for(short dir =1;dir>=0;dir--) { + + short[] labs = (dir==1) ? Edges.get(pos[s],pos[t], false):Edges.get(pos[t],pos[s], true); + + O[s][t][dir] = new Open[labs.length]; + for (int l = O[s][t][dir].length - 1; l >= 0; l--) { + + double tRP = INIT_BEST; + + Closed tL = null, tR = null; + + for (int r = s; r < t; r++) { + + if (s == 0 && r != 0) continue; + + double tLPr = INIT_BEST,tRPr = INIT_BEST; + Closed tLCld = null, tRCld = null; + + if (r == s) tLPr = dir==1 ? x.sib[s][t][s][0][l] : x.gra[t][s][s][1 ][l]; + else + for (int i = s + 1; i <= r; i++) + if (((dir==1 ? x.sib[s][t][i][0][l] : x.gra[t][s][i][1][l]) + C[s][r][1][i].p) > tLPr) { + tLPr = ((dir==1 ? x.sib[s][t][i][0][l] : x.gra[t][s][i][1][l]) + C[s][r][1][i].p);tLCld = C[s][r][1][i];} + + if (r == t-1) tRPr = dir==1 ? x.gra[s][t][s][0][l] : x.sib[t][s][s][1][l]; + else + for (int i = r + 1; i < t; i++) + if (((dir == 1 ? x.gra[s][t][i][0][l] : x.sib[t][s][i][1][l]) + C[r+1][t][0][i].p) > tRPr) { + tRPr = ((dir==1?x.gra[s][t][i][0][l]:x.sib[t][s][i][1][l]) + C[r+1][t][0][i].p); tRCld=C[r + 1][t][0][i];} + + if (tLPr + tRPr > tRP) {tRP = tLPr + tRPr; tL = tLCld;tR = tRCld;} + } + O[s][t][dir][l] = new Open(s, t, dir, labs[l],tL, tR, + (float) ( tRP+((dir==1)?x.pl[s][t]: x.pl[t][s]) + ((dir==1)? x.lab[s][t][labs[l]][0]:x.lab[t][s][labs[l]][1]))); + } + } + C[s][t][1] = new Closed[n]; C[s][t][0] = new Closed[n]; + + for (int m = s ; m <= t; m++) { + for(boolean d : DIR) { + if ((d && m!=s)||!d && (m!=t && s!=0)) { + + // create closed structure + + double top = INIT_BEST; + + Open tU = null; Closed tL = null; + int numLabels =O[(d ? s : m)][(d ? m : t)][d?1:0].length; + + //for (int l = numLabels-1; l >=0; l--) { + for (int l = 0; l < numLabels; l++) { + + Open hi = O[(d ? s : m)][(d ? m : t)][d?1:0][l]; + for (int amb = m + (d?1:-1); amb != (d?t:s) + (d?1:-1); amb += (d?1:-1)) { + + if ((hi.p + C[d?m:s][d?t:m][d?1:0][amb].p +x.gra[d?s:t][m][amb][d?0:1][l]) > top) { + top = (hi.p + C[d?m:s][d?t:m][d?1:0][amb].p +x.gra[d?s:t][m][amb][(d?0:1)][l]); tU = hi; tL=C[d?m:s][d?t:m][d?1:0][amb];} + } + + if ((m == (d ? t : s)) && (hi.p + x.gra[d?s:t][m][d?s:t][(d ? 0 :1)][l]) > top) { + top = (hi.p + x.gra[(d ? s : t)][m][d?s:t][d?0:1][l]); tU = hi; tL = null;} + } + C[s][t][d?1:0][m] = new Closed(s, t, m, d?1:0,tU,tL,(float) top); + } + } + } + } + return null; + } + + public static ArrayList<DSet> sets = new ArrayList<DSet>(); + + static synchronized private DSet get() { + synchronized (sets) { + if (sets.size()==0) return null; + return sets.remove(sets.size()-1); + } + } + + public static void add(short w1, short w2){ + DSet ds =new DSet(); + ds.w1=w1; + ds.w2=w2; + sets.add(ds); + } +} diff --git a/dependencyParser/basic/mate-tools/src/decoder/ParallelRearrangeNBest.java b/dependencyParser/basic/mate-tools/src/decoder/ParallelRearrangeNBest.java new file mode 100755 index 0000000..493917b --- /dev/null +++ b/dependencyParser/basic/mate-tools/src/decoder/ParallelRearrangeNBest.java @@ -0,0 +1,136 @@ +package decoder; + +import is2.data.DataF; +import is2.data.Edges; +import is2.data.Parse; +import is2.data.ParseNBest; + +import java.util.ArrayList; +import java.util.concurrent.Callable; + +import extractors.Extractor; + +/** + * @author Dr. Bernd Bohnet, 30.08.2009 + * + * This class implements a parallel edge rearrangement for non-projective parsing; + * The linear method was first suggest by Rayn McDonald et. al. 2005. + */ +final public class ParallelRearrangeNBest implements Callable<Object> { + + // new parent child combination to explore + final static class PA { + final float p; + final short ch, pa; + + float best; + + + + public PA(float p2, short ch2, short pa2) { p=p2; ch=ch2;pa=pa2;} + } + + // list of parent child combinations + private static ArrayList<PA> parents = new ArrayList<PA>(); + + // some data from the dependency tree + private short[] pos; + private DataF x; + private boolean[][] isChild ; + public short[] heads,types; + private float lastNBest; + private float best; // best so far + private float threshold; + private Extractor extractor; + + + /** + * Initialize the parallel rearrange thread + * + * @param isChild2 is a child + * @param edgesC the part-of-speech edge mapping + * @param pos the part-of-speech + * @param x the data + * @param lastNBest + * @param s the heads + * @param ts the types + */ + public ParallelRearrangeNBest(short[] pos , DataF x, Parse p, float lastNBest, Extractor extractor, float best, float threshold) { + + + heads=p.heads; + + types= p.labels; + + isChild = new boolean[heads.length][heads.length]; + + for(int i = 1, l1=1; i < heads.length; i++,l1=i) + while((l1= heads[l1]) != -1) isChild[l1][i] = true; + + + this.lastNBest =lastNBest; + this.pos =pos; + this.x=x; + + this.extractor = extractor; + this.best=best; + this.threshold = threshold; + } + + public ArrayList<ParseNBest> parses = new ArrayList<ParseNBest>(); + + @Override + public Object call() { + + // check the list of new possible parents and children for a better combination + for(int ch = 1; ch < heads.length; ch++) { + for(short pa = 0; pa < heads.length; pa++) { + if(ch == pa || pa == heads[ch] || isChild[ch][pa]) continue; + + short oldP = heads[ch], oldT = types[ch]; + heads[ch]=pa; + + short[] labels = Edges.get(pos[pa], pos[ch],ch<pa); + + for(int l=0;l<labels.length;l++) { + + types[ch]=labels[l]; + float p_new = extractor.encode3(pos, heads, types, x); + + if (p_new<lastNBest || ((best+this.threshold)>p_new)) continue; + + ParseNBest p = new ParseNBest(); + p.signature(heads, types); + p.f1=p_new; + parses.add(p); + } + + // change back + heads[ch]= oldP; types[ch]=oldT; + + // consider changes to labels only + labels = Edges.get(pos[oldP], pos[ch],ch<oldP); + + for(int l=0;l<labels.length;l++) { + + types[ch]=labels[l]; + float p_new = (float) extractor.encode3(pos, heads, types, x); + + // optimization: add only if larger than smallest of n-best + if (p_new<lastNBest || ((best+this.threshold)>p_new)) continue; + + ParseNBest p = new ParseNBest(); + p.signature(heads, types); + p.f1=p_new; + parses.add(p); + } + + heads[ch]= oldP; types[ch]=oldT; + } + } + return parses; + } + + + +} diff --git a/dependencyParser/basic/mate-tools/src/decoder/ParallelRearrangeNBest2.java b/dependencyParser/basic/mate-tools/src/decoder/ParallelRearrangeNBest2.java new file mode 100644 index 0000000..a25b392 --- /dev/null +++ b/dependencyParser/basic/mate-tools/src/decoder/ParallelRearrangeNBest2.java @@ -0,0 +1,151 @@ +package decoder; + +import is2.data.DataF; +import is2.data.Edges; +import is2.data.Parse; +import is2.data.ParseNBest; + +import java.util.ArrayList; +import java.util.concurrent.Callable; + +import decoder.ParallelRearrangeNBest.PA; + +import extractors.Extractor; + +/** + * @author Dr. Bernd Bohnet, 30.08.2009 + * + * This class implements a parallel edge rearrangement for non-projective parsing; + * The linear method was first suggest by Rayn McDonald et. al. 2005. + */ +final public class ParallelRearrangeNBest2 implements Callable<Object> { + + // new parent child combination to explore + final static class PA { + final float p; + final short ch, pa; + + + public short[] heads,types; + + public PA(Parse p, short ch2, short pa2) { + this.p =(float)p.f1; + heads =p.heads; + types=p.labels; + ch=ch2;pa=pa2; + + } + } + + // list of parent child combinations + private static ArrayList<PA> parents = new ArrayList<PA>(); + + // some data from the dependency tree + private short[] pos; + private DataF x; + private float lastNBest; + private float threshold; + private Extractor extractor; + + + /** + * Initialize the parallel rearrange thread + * @param pos the part-of-speech + * @param x the data + * @param lastNBest + * @param isChild2 is a child + * @param edgesC the part-of-speech edge mapping + * @param s the heads + * @param ts the types + */ + public ParallelRearrangeNBest2(short[] pos , DataF x, float lastNBest, Extractor extractor, float threshold) { + + + + this.lastNBest =lastNBest; + this.pos =pos; + this.x=x; + + this.extractor = extractor; + this.threshold = threshold; + } + + public ArrayList<ParseNBest> parses = new ArrayList<ParseNBest>(); + + @Override + public Object call() { + + try { + + while(true) { + PA p = getPA(); + + if (p==null) return parses; + + short oldP = p.heads[p.ch], oldT = p.types[p.ch]; + p.heads[p.ch]=p.pa; + + short[] labels = Edges.get(pos[p.pa], pos[p.ch],p.ch<p.pa); + + for(int l=0;l<labels.length;l++) { + + p.types[p.ch]=labels[l]; + float p_new = extractor.encode3(pos, p.heads, p.types, x); + + if (p_new<lastNBest || ((p.p+this.threshold)>p_new)) continue; + + ParseNBest x = new ParseNBest(); + x.signature(p.heads, p.types); + x.f1=p_new; + parses.add(x); + } + + // change back + p.heads[p.ch]= oldP; p.types[p.ch]=oldT; + + // consider changes to labels only + labels = Edges.get(pos[oldP], pos[p.ch],p.ch<oldP); + + for(int l=0;l<labels.length;l++) { + + p.types[p.ch]=labels[l]; + float p_new = (float) extractor.encode3(pos, p.heads, p.types, x); + + // optimization: add only if larger than smallest of n-best + if (p_new<lastNBest || ((p.p+this.threshold)>p_new)) continue; + + ParseNBest x = new ParseNBest(); + x.signature(p.heads, p.types); + x.f1=p_new; + parses.add(x); + } + + p.heads[p.ch]= oldP; p.types[p.ch]=oldT; + } + } catch(Exception e) { + e.printStackTrace(); + } + return parses; + } + + /** + * Add a child-parent combination which are latter explored for rearrangement + * + * @param p2 + * @param ch2 + * @param pa + */ + public static void add(Parse p, short ch2, short pa) { + parents.add(new PA(p,ch2,pa)); + } + + public static PA getPA() { + synchronized(parents) { + if (parents.size()==0) return null; + return parents.remove(parents.size()-1); + } + } + + + +} diff --git a/dependencyParser/basic/mate-tools/src/examples/DependencyParser.java b/dependencyParser/basic/mate-tools/src/examples/DependencyParser.java new file mode 100644 index 0000000..c41a101 --- /dev/null +++ b/dependencyParser/basic/mate-tools/src/examples/DependencyParser.java @@ -0,0 +1,92 @@ +package examples; + + +import is2.data.InstancesTagger; +import is2.data.SentenceData09; +import is2.io.CONLLReader09; +import is2.lemmatizer.Lemmatizer; +import is2.lemmatizer.MFO; +import is2.parser.Parser; +import is2.tag.Tagger; +//import org.apache.log4j.Logger; + +import java.io.File; +import java.util.Arrays; + +/** + * Dependency parsing + * + * @author B. Piwowarski <benjamin@bpiwowar.net> + * @date 10/10/12 + */ +//@TaskDescription(name = "dependency-parser", project = "mate-tools") +public class DependencyParser { + // final static private Logger LOGGER = Logger.getLogger(DependencyParser.class); + //@Argument(name = "lemmatizer", required = true, checkers = IOChecker.Readable.class) + File lemmatizerFile; + + //@Argument(name = "tagger", required = true) + File taggerFile; + + //@Argument(name = "parser", required = true) + File parserFile; + + //@Override + public int execute() throws Throwable { + + // Load lemmatizer + //LOGGER.info("Loading lemmatizer"); + // true = do uppercase lemmatization + Lemmatizer lemmatizer = new Lemmatizer(lemmatizerFile.getAbsolutePath()); + + // Load tagger + //LOGGER.info("Loading tagger"); + Tagger tagger = new Tagger(taggerFile.getAbsolutePath()); + + // Load parser + //LOGGER.info("Loading parser"); + Parser parser = new Parser(parserFile.getAbsolutePath()); + + + // Sentences to parse + String sentences[] = new String[]{ + "Airfields have been constructed on a number of the islands .", + "Private investment has even made an increasingly modern ferry fleet possible .", + "Politically , the 1990s have been relatively quite times for the islands ." + }; + + CONLLReader09 reader = new CONLLReader09(CONLLReader09.NO_NORMALIZE); + + for (String sentence : sentences) { + // Prepare the sentence + InstancesTagger instanceTagger = new InstancesTagger(); + instanceTagger.init(1, new MFO()); + + String[] split = sentence.split("\\s+"); + String[] splitRoot = new String[split.length+1]; + System.arraycopy(split, 0, splitRoot, 1, split.length); + splitRoot[0] = CONLLReader09.ROOT; + + SentenceData09 instance = new SentenceData09(); + instance.init(splitRoot); + + reader.insert(instanceTagger, instance); + + SentenceData09 result = lemmatizer.apply(instance); + tagger.apply(result); + result = parser.parse(result, parser.params, false, parser.options); + + + // Output + System.out.println(Arrays.toString(result.forms)); + System.out.println(Arrays.toString(result.plemmas)); + System.out.println(Arrays.toString(result.ppos)); + System.out.println(Arrays.toString(result.pheads)); + System.out.println(Arrays.toString(result.plabels)); + System.out.println(); + + } + + return 0; + } +} diff --git a/dependencyParser/basic/mate-tools/src/examples/FullPipelineSpanish.java b/dependencyParser/basic/mate-tools/src/examples/FullPipelineSpanish.java new file mode 100644 index 0000000..a255595 --- /dev/null +++ b/dependencyParser/basic/mate-tools/src/examples/FullPipelineSpanish.java @@ -0,0 +1,98 @@ +package examples; + +import is2.data.SentenceData09; +import is2.io.CONLLWriter09; +import is2.lemmatizer.Lemmatizer; + +import is2.parser.Parser; +import is2.tag.Tagger; +import is2.tools.Tool; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.StringTokenizer; + +/** + * @author Bernd Bohnet, 13.09.2010 + * + * Illustrates the application the full pipeline: lemmatizer, morphologic, tagger, and parser + */ +public class FullPipelineSpanish { + + + // shows how to parse a sentences and call the tools + public static void main(String[] args) throws IOException { + + // Create a data container for a sentence + SentenceData09 i = new SentenceData09(); + + if (args.length==1) { // input might be a sentence: "This is another test ." + StringTokenizer st = new StringTokenizer(args[0]); + ArrayList<String> forms = new ArrayList<String>(); + + forms.add("<root>"); + while(st.hasMoreTokens()) forms.add(st.nextToken()); + + i.init(forms.toArray(new String[0])); + + } else { + // provide a default sentence: Haus has a mutated vowel + i.init(new String[] {"<root>","También","estuve","emocionado","pero","no","pude","imaginar","mi","vida","sin","la", + "gente","tan","intima","a","mí","."}); + + } + + // lemmatizing + + System.out.println("\nReading the model of the lemmatizer"); + Tool lemmatizer = new Lemmatizer("models/lemma-spa.model"); // create a lemmatizer + + System.out.println("Applying the lemmatizer"); + lemmatizer.apply(i); + + System.out.print(i.toString()); + System.out.print("Lemmata: "); for (String l : i.plemmas) System.out.print(l+" "); System.out.println(); + + // morphologic tagging + + System.out.println("\nReading the model of the morphologic tagger"); + is2.mtag.Tagger morphTagger = new is2.mtag.Tagger("models/mtag-spa.model"); + + System.out.println("\nApplying the morpholoigc tagger"); + morphTagger.apply(i); + + System.out.print(i.toString()); + System.out.print("Morph: "); for (String f : i.pfeats) System.out.print(f+" "); System.out.println(); + + // part-of-speech tagging + + System.out.println("\nReading the model of the part-of-speech tagger"); + Tool tagger = new Tagger("models/tag-spa.model"); + + System.out.println("\nApplying the part-of-speech tagger"); + tagger.apply(i); + + System.out.print(i.toString()); + System.out.print("Part-of-Speech tags: "); for (String p : i.ppos) System.out.print(p+" "); System.out.println(); + + // parsing + + System.out.println("\nReading the model of the dependency parser"); + Tool parser = new Parser("models/prs-spa.model"); + + System.out.println("\nApplying the parser"); + parser.apply(i); + + System.out.println(i.toString()); + + // write the result to a file + + CONLLWriter09 writer = new is2.io.CONLLWriter09("example-out.txt"); + + writer.write(i, CONLLWriter09.NO_ROOT); + writer.finishWriting(); + + } + + +} diff --git a/dependencyParser/basic/mate-tools/src/examples/FullPipelineTest.java b/dependencyParser/basic/mate-tools/src/examples/FullPipelineTest.java new file mode 100644 index 0000000..c8f992a --- /dev/null +++ b/dependencyParser/basic/mate-tools/src/examples/FullPipelineTest.java @@ -0,0 +1,110 @@ +package examples; + + +import is2.data.InstancesTagger; +import is2.data.SentenceData09; +import is2.io.CONLLReader09; +import is2.io.CONLLWriter09; +import is2.lemmatizer.Lemmatizer; +import is2.lemmatizer.MFO; +import is2.parser.Parser; +import is2.tag.Tagger; +//import org.apache.log4j.Logger; + +import java.io.File; +import java.util.Arrays; + +/** + * Dependency parsing + * + * @author B. Piwowarski <benjamin@bpiwowar.net> + * @date 10/10/12 + */ +//@TaskDescription(name = "dependency-parser", project = "mate-tools") +public class FullPipelineTest { + // final static private Logger LOGGER = Logger.getLogger(DependencyParser.class); + //@Argument(name = "lemmatizer", required = true, checkers = IOChecker.Readable.class) + public File lemmatizerFile; + + //@Argument(name = "tagger", required = true) + public File taggerFile; + + public File mtaggerFile; + + //@Argument(name = "parser", required = true) + public File parserFile; + + //@Override + public int execute(String source, String target) throws Throwable { + + // Load lemmatizer + //LOGGER.info("Loading lemmatizer"); + // true = do uppercase lemmatization + Lemmatizer lemmatizer = new Lemmatizer(lemmatizerFile.getAbsolutePath()); + + // Load tagger + //LOGGER.info("Loading tagger"); + Tagger tagger = new Tagger(taggerFile.getAbsolutePath()); + + is2.mtag.Tagger mtagger = new is2.mtag.Tagger(mtaggerFile.getAbsolutePath()); + + // Load parser + //LOGGER.info("Loading parser"); + Parser parser = new Parser(parserFile.getAbsolutePath()); + + + CONLLReader09 reader = new CONLLReader09(source); + CONLLWriter09 writer = new CONLLWriter09(target); + + int count=0; + while (true) { + // Prepare the sentence + InstancesTagger is = new InstancesTagger(); + is.init(1, new MFO()); + + SentenceData09 instance= reader.getNext(is); + if (instance ==null) break; + SentenceData09 result = null; +try { + + System.out.print("\b\b\b\b"+count); + result= lemmatizer.apply(instance); + + result = tagger.apply(result); + result= mtagger.apply(result); + result = parser.apply(result); + + count++; +} catch(Exception e) { + + System.out.println("error"+result); + System.out.println("error"+instance); + e.printStackTrace(); + break; +} + + // Output + writer.write(result); + + } + writer.finishWriting(); + return 0; + } + + public static void main(String args[]) throws Throwable { + + if (args.length<3) { + System.out.println("lemmatizer-model tagger-model parser-model source target"); + System.exit(0); + } + FullPipelineTest p = new FullPipelineTest(); + p.lemmatizerFile = new File(args[0]); + p.taggerFile = new File(args[1]); + p.mtaggerFile = new File(args[2]); + p.parserFile = new File(args[3]); + + p.execute(args[4], args[5]); + + } + +} diff --git a/dependencyParser/basic/mate-tools/src/examples/MorphTagger.java b/dependencyParser/basic/mate-tools/src/examples/MorphTagger.java new file mode 100644 index 0000000..0088426 --- /dev/null +++ b/dependencyParser/basic/mate-tools/src/examples/MorphTagger.java @@ -0,0 +1,79 @@ +package examples; + +import is2.data.SentenceData09; +import is2.lemmatizer.Lemmatizer; +import is2.lemmatizer.Options; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.StringTokenizer; + +/** + * @author Bernd Bohnet, 13.09.2010 + * + * Illustrates the application of some components: lemmatizer, tagger, and parser + */ +public class MorphTagger { + + + /** + * How to lemmatize a sentences? + */ + public static void main(String[] args) throws IOException { + + + // Create a data container for a sentence + SentenceData09 i = new SentenceData09(); + + if (args.length==1) { // input might be a sentence: "This is another test ." + StringTokenizer st = new StringTokenizer(args[0]); + ArrayList<String> forms = new ArrayList<String>(); + + forms.add("<root>"); + while(st.hasMoreTokens()) forms.add(st.nextToken()); + + i.init(forms.toArray(new String[0])); + + } else { + // provide a default sentence + i.init(new String[] {"<root>","Häuser","hat","ein","Umlaut","."}); + } + + //print the forms + for (String l : i.forms) System.out.println("forms : "+l); + + // tell the lemmatizer the location of the model + is2.lemmatizer.Options optsLemmatizer = new Options(new String[] {"-model","models/lemma-ger.model"}); + + // create a lemmatizer + Lemmatizer lemmatizer = new Lemmatizer(optsLemmatizer.modelName); + + // lemmatize a sentence; the result is stored in the stenenceData09 i + lemmatizer.apply(i); + + + // output the lemmata + for (String l : i.plemmas) System.out.println("lemma : "+l); + + + is2.mtag.Options morphologicTaggerOptions = new is2.mtag.Options(new String[] {"-model","models/mtag-ger.model"}); + + is2.mtag.Tagger mt = new is2.mtag.Tagger(morphologicTaggerOptions); + + try { + + + // SentenceData09 snt = is2.mtag.Main.out(i.forms, lemmata); + + SentenceData09 snt = mt.apply(i); + for(String f : snt.pfeats) System.out.println("feats "+f); + + } catch(Exception e){ + e.printStackTrace(); + } + + + } + + +} diff --git a/dependencyParser/basic/mate-tools/src/examples/ParseOnly.java b/dependencyParser/basic/mate-tools/src/examples/ParseOnly.java new file mode 100755 index 0000000..cec31dd --- /dev/null +++ b/dependencyParser/basic/mate-tools/src/examples/ParseOnly.java @@ -0,0 +1,50 @@ +package examples; + +import is2.data.SentenceData09; +import is2.parser.Options; +import is2.parser.Parser; + + +public class ParseOnly { + + public static void main(String[] args) { + + if (args.length ==0) { + plain(); + } + + } + + /** + * This example shows how to parse a sentence. + */ + public static void plain() { + + // initialize the options + String[] opts ={"-model","models/prs-eng-x.model"}; + Options options = new Options(opts); + + // create a parser + Parser parser = new Parser(options); + + // Create a data container for a sentence + SentenceData09 i = new SentenceData09(); + + // Provide the sentence + i.init(new String[] {"<root>","This","is","a","test","."}); + i.setPPos(new String[]{"<root-POS>","DT","VBZ","DT","NN","."}); + + // parse the sentence + SentenceData09 out = parser.apply(i); + + // output the sentence and dependency tree + System.out.println(out.toString()); + + // Get the parsing results + out.getLabels(); + out.getParents(); + + } + + +} diff --git a/dependencyParser/basic/mate-tools/src/examples/Pipeline.java b/dependencyParser/basic/mate-tools/src/examples/Pipeline.java new file mode 100644 index 0000000..e55869d --- /dev/null +++ b/dependencyParser/basic/mate-tools/src/examples/Pipeline.java @@ -0,0 +1,95 @@ +package examples; + +import java.io.File; +import java.io.IOException; +import java.util.ArrayList; +import java.util.StringTokenizer; + +import is2.data.SentenceData09; +import is2.lemmatizer.Lemmatizer; +import is2.parser.Options; +import is2.parser.Parser; +import is2.tag.Tagger; + +/** + * @author Bernd Bohnet, 13.09.2010 + * + * Illustrates the application of some components: lemmatizer, tagger, and parser + */ +public class Pipeline { + + + // how to parse a sentences and call the tools + public static void main(String[] args) throws IOException { + + + // Create a data container for a sentence + SentenceData09 i = new SentenceData09(); + + if (args.length==1) { // input might be a sentence: "This is another test ." + StringTokenizer st = new StringTokenizer(args[0]); + ArrayList<String> forms = new ArrayList<String>(); + + forms.add("<root>"); + while(st.hasMoreTokens()) forms.add(st.nextToken()); + + i.init(forms.toArray(new String[0])); + + } else { + // provide a default sentence + i.init(new String[] {"<root>","This","is","a","test","."}); + } + + //print the forms + for (String l : i.forms) System.out.println("form : "+l); + + // tell the lemmatizer the location of the model + is2.lemmatizer.Options optsLemmatizer = new is2.lemmatizer.Options(new String[] {"-model","models/lemma-eng.model"}); + + // create a lemmatizer + Lemmatizer lemmatizer = new Lemmatizer(optsLemmatizer.modelName); + + // lemmatize a sentence; the result is stored in the stenenceData09 i + i = lemmatizer.apply(i); + + + // output the lemmata + for (String l : i.plemmas) System.out.println("lemma : "+l); + + // tell the tagger the location of the model + is2.tag.Options optsTagger = new is2.tag.Options(new String[]{"-model","models/tag-eng.model"}); + Tagger tagger = new Tagger(optsTagger); + + + +// String pos[] =tagger.tag(i.forms, i.lemmas); +// i.setPPos(pos); + + + SentenceData09 tagged = tagger.tag(i); + for (String p : tagged.ppos) System.out.println("pos "+p); + + + + // initialize the options + Options optsParser = new Options(new String[]{"-model","models/prs-eng-x.model"}); + + // create a parser + Parser parser = new Parser(optsParser); + + // parse the sentence (you get a copy of the input i) + SentenceData09 parse = parser.apply(tagged); + + System.out.println(parse.toString()); + + // create some trash on the hard drive :-) + is2.io.CONLLWriter09 writer = new is2.io.CONLLWriter09("example-out.txt"); + + writer.write(i); + writer.finishWriting(); + } + + + + +} diff --git a/dependencyParser/basic/mate-tools/src/extractors/Extractor.java b/dependencyParser/basic/mate-tools/src/extractors/Extractor.java new file mode 100644 index 0000000..327895d --- /dev/null +++ b/dependencyParser/basic/mate-tools/src/extractors/Extractor.java @@ -0,0 +1,59 @@ +/** + * + */ +package extractors; + +import is2.data.Cluster; +import is2.data.DataF; +import is2.data.FV; +import is2.data.IFV; +import is2.data.Instances; + +/** + * @author Dr. Bernd Bohnet, 29.04.2011 + * + * + */ +public interface Extractor { + + + /** + * Initializes the Extractor general parts + */ + public void initStat(); + + /** + * Initializes the Extractor specific parts + */ + public void init(); + + public int basic(short[] pos, int[] forms, int w1, int w2, Cluster cluster, IFV f); + + public void firstm(Instances is, int i, int w1, int w2, int j, Cluster cluster, long[] svs); + + public void siblingm(Instances is, int i, short[] pos, int[] forms, + int[] lemmas, short[][] feats, int w1, int w2, int g, int j, + Cluster cluster, long[] svs, int n); + + public void gcm(Instances is, int i, int w1, int w2, int g, int j, Cluster cluster, long[] svs); + + public int getType(); + + public FV encodeCat(Instances is, int n, short[] pos, int[] is2, + int[] is3, short[] heads, short[] labels, short[][] s, Cluster cl, + FV pred); + + public void setMaxForm(int integer); + + /** + * @return + */ + public int getMaxForm(); + + + public float encode3(short[] pos, short[] heads, short[] labs, DataF x); + + + + +} diff --git a/dependencyParser/basic/mate-tools/src/extractors/ExtractorClusterStacked.java b/dependencyParser/basic/mate-tools/src/extractors/ExtractorClusterStacked.java new file mode 100755 index 0000000..79a44ca --- /dev/null +++ b/dependencyParser/basic/mate-tools/src/extractors/ExtractorClusterStacked.java @@ -0,0 +1,958 @@ +package extractors; + + +import is2.data.Cluster; +import is2.data.D4; +import is2.data.DataF; +import is2.data.Edges; +import is2.data.FV; +import is2.data.IFV; +import is2.data.Instances; +import is2.data.Long2IntInterface; +import is2.data.MFB; +import is2.util.DB; + + + +final public class ExtractorClusterStacked implements Extractor { + + public static int s_rel,s_word,s_type,s_dir,s_dist,s_feat,s_child,s_spath,s_lpath,s_pos; + + + final D4 d0 ,dl1,dl2, dwr,dr,dwwp,dw,dwp,dlf,d3lp, d2lp,d2pw,d2pp ; + + public final Long2IntInterface li; + + public ExtractorClusterStacked(Long2IntInterface li) { + + this.initFeatures(); + this.li=li; + d0 = new D4(li);dl1 = new D4(li);dl2 = new D4(li); + dwr = new D4(li); + dr = new D4(li); + dwwp = new D4(li); + + dw = new D4(li); + dwp = new D4(li); + + dlf = new D4(li); + d3lp = new D4(li); d2lp = new D4(li); d2pw = new D4(li); d2pp = new D4(li); + + } + + public void initStat() { + + + MFB mf = new MFB(); + s_rel = mf.getFeatureCounter().get(REL).intValue(); + s_pos = mf.getFeatureCounter().get(POS).intValue(); + s_word = mf.getFeatureCounter().get(WORD).intValue(); + s_type = mf.getFeatureCounter().get(TYPE).intValue();//mf.getFeatureBits(); + s_dir = mf.getFeatureCounter().get(DIR); + la = mf.getValue(DIR, LA); + ra = mf.getValue(DIR, RA); + s_dist = mf.getFeatureCounter().get(DIST);//mf.getFeatureBits(DIST); + s_feat = mf.getFeatureCounter().get(FEAT);//mf.getFeatureBits(Pipe.FEAT); + s_spath = mf.getFeatureCounter().get(Cluster.SPATH)==null?0:mf.getFeatureCounter().get(Cluster.SPATH);//mf.getFeatureBits(Cluster.SPATH); + s_lpath = mf.getFeatureCounter().get(Cluster.LPATH)==null?0:mf.getFeatureCounter().get(Cluster.LPATH);//mf.getFeatureBits(Cluster.LPATH); + } + + public void init(){ + // DB.println("init"); + d0.a0 = s_type;d0.a1 = s_pos;d0.a2 = s_pos;d0.a3 = s_pos;d0.a4 = s_pos;d0.a5 = s_pos;d0.a6 = s_pos;d0.a7 = s_pos; + dl1.a0 = s_type;dl1.a1 = s_rel; dl1.a2 = s_pos;dl1.a3 = s_pos; dl1.a4 = s_pos; dl1.a5 = s_pos; dl1.a6 = s_pos; dl1.a7 = s_pos; + dl2.a0 = s_type;dl2.a1 = s_rel;dl2.a2 = s_word;dl2.a3 = s_pos;dl2.a4 = s_pos;dl2.a5 = s_pos;dl2.a6 = s_pos;dl2.a7 = s_pos; + dwp.a0 = s_type; dwp.a1 = s_rel; dwp.a2 = s_word; dwp.a3 = s_pos; dwp.a4 = s_pos; dwp.a5 = s_word; + dwwp.a0 = s_type; dwwp.a1 = s_rel; dwwp.a2 = s_word; dwwp.a3 = s_word; dwwp.a4 = s_pos; dwwp.a5 = s_word; + dlf.a0 = s_type;dlf.a1 = s_rel; dlf.a2 = s_pos;dlf.a3 = s_pos; dlf.a4 = s_feat; dlf.a5 = s_feat; dlf.a6 = s_pos; dlf.a7 = s_pos; + d3lp.a0 = s_type; d3lp.a1 = s_rel; d3lp.a2 = s_lpath; d3lp.a3 = s_lpath; d3lp.a4 = s_lpath; d3lp.a5 = s_word; d3lp.a6 = s_spath; d3lp.a7 = s_spath; + d2lp.a0 = s_type; d2lp.a1 = s_rel; d2lp.a2 = s_lpath; d2lp.a3 = s_lpath; d2lp.a4 = s_word; d2lp.a5 = s_word; //d3lp.a6 = s_spath; d3lp.a7 = s_spath; + d2pw.a0 = s_type; d2pw.a1 = s_rel; d2pw.a2 = s_lpath; d2pw.a3 = s_lpath; d2pw.a4 = s_word; d2pw.a5 = s_word; //d3lp.a6 = s_spath; d3lp.a7 = s_spath; + d2pp.a0 = s_type; d2pp.a1 = s_rel; d2pp.a2 = s_lpath; d2pp.a3 = s_lpath; d2pp.a4 = s_pos; d2pp.a5 = s_pos; //d3lp.a6 = s_spath; d3lp.a7 = s_spath; + } + + + public int basic(short[] pposs, int[] form, int p, int d, Cluster cluster, IFV f) + { + + d0.clean(); dl1.clean(); dl2.clean(); dwp.clean(); dwwp.clean(); dlf.clean(); d3lp.clean(); + + d3lp.clean(); d2lp.clean();d2pw.clean(); d2pp.clean(); + + int n=1; + int dir= (p < d)? ra:la; + d0.v0= n++; d0.v1=pposs[p]; d0.v2=pposs[d]; //d0.stop=4; + int end= (p >= d ? p : d); + int start = (p >= d ? d : p) + 1; + + for(int i = start ; i <end ; i++) { + d0.v3=pposs[i]; + d0.cz4(); + d0.csa(s_dir,dir,f); + } + return n; + } + + + public void firstm(Instances is, int i, + int prnt, int dpnt, int label, Cluster cluster, long[] f) + { + + + //short[] pposs, int[] form, int[] lemmas, short[][] feats + for(int k=0;k<f.length;k++) f[k]=0; + + short[] pposs = is.pposs[i]; + int[] form =is.forms[i]; + short[][] feats = is.feats[i]; + + + int pF = form[prnt],dF = form[dpnt]; + int pL = is.plemmas[i][prnt],dL = is.plemmas[i][dpnt]; + int pP = pposs[prnt],dP = pposs[dpnt]; + + int prntLS = pF==-1?-1:cluster.getLP(pF), chldLS = dF==-1?-1:cluster.getLP(dF); + + final int dir= (prnt < dpnt)? ra:la; + + if (pF>maxForm) pF=-1; + if (pL>maxForm) pL=-1; + + if (dF>maxForm) dF=-1; + if (dL>maxForm) dL=-1; + + + int n=3,c=0; + + dl2.v1=label; + dl2.v0= n++; dl2.v2=pF; dl2.v3=dP; dl2.cz4(); f[c++]=dl2.csa(s_dir,dir); + dl2.v0= n++; dl2.cz3(); f[c++]=dl2.csa(s_dir,dir); + dl2.v0= n++; dl2.v2=dF; dl2.v3=pP; dl2.cz4(); f[c++]=dl2.csa(s_dir,dir); + dl2.v0= n++; dl2.cz3(); f[c++]=dl2.csa(s_dir,dir); + + + dwwp.v1=label; + dwwp.v0= n++; dwwp.v2=pF; dwwp.v3=dF; dwwp.cz4(); f[c++]=dwwp.csa(s_dir,dir); + + dl1.v1=label; + dl1.v0= n++; dl1.v2=dP; dl1.cz3(); f[c++]=dl1.csa(s_dir,dir); + dl1.v0= n++; dl1.v2=pP; dl1.cz3(); f[c++]=dl1.csa(s_dir,dir); + dl1.v0= n++; dl1.v3=dP; dl1.cz4(); f[c++]=dl1.csa(s_dir,dir); + + int pPm1 = prnt > 0 ? pposs[prnt - 1] : s_str, dPm1 = dpnt > 0 ? pposs[dpnt - 1] : s_str; + int pPp1 = prnt < pposs.length - 1 ? pposs[prnt + 1]:s_end, dPp1 = dpnt < pposs.length - 1 ? pposs[dpnt + 1]:s_end; + + int pPm2 = prnt > 1 ? pposs[prnt - 2] : s_str, dPm2 = dpnt > 1 ? pposs[dpnt - 2] : s_str; + int pPp2 = prnt < pposs.length - 2 ? pposs[prnt + 2]:s_end, dPp2 = dpnt < pposs.length - 2 ? pposs[dpnt + 2]:s_end; + + int pFm1 = prnt > 0 ? form[prnt - 1] : s_stwrd, dFm1 = dpnt > 0 ? form[dpnt - 1] : s_stwrd; + int pFp1 = prnt < form.length - 1 ? form[prnt + 1]:s_stwrd, dFp1 = dpnt < form.length - 1 ? form[dpnt + 1]:s_stwrd; + + + + dl1.v0= n++;dl1.v2=pP; dl1.v3=pPp1; dl1.v4=dP;dl1.v5=dPp1; dl1.cz6(); f[n++]=dl1.csa(s_dir,dir); + dl1.v0= n++; dl1.v5=dPm1; dl1.cz6(); f[n++]=dl1.csa(s_dir,dir); + dl1.v0= n++; dl1.v3=pPm1; dl1.cz6(); f[n++]=dl1.csa(s_dir,dir); + dl1.v0= n++; dl1.v5=dPp1; dl1.cz6(); f[n++]=dl1.csa(s_dir,dir); + + + dl1.v0= n++; dl1.v3=pPm1; dl1.cz5(); f[n++]=dl1.csa(s_dir,dir); + dl1.v0= n++; dl1.v3=dPm1; dl1.cz5(); f[n++]=dl1.csa(s_dir,dir); + dl1.v0= n++; dl1.v3=dPp1; dl1.cz5(); f[n++]=dl1.csa(s_dir,dir); + dl1.v0= n++; dl1.v3=pPp1; dl1.cz5(); f[n++]=dl1.csa(s_dir,dir); + + dl1.v0= n++;dl1.v2=pP; dl1.v3=pPp2; dl1.v4=dP;dl1.v5=dPp2; dl1.cz6(); f[n++]=dl1.csa(s_dir,dir); + dl1.v0= n++; dl1.v5=dPm2; dl1.cz6(); f[n++]=dl1.csa(s_dir,dir); + dl1.v0= n++; dl1.v3=pPm2; dl1.cz6(); f[n++]=dl1.csa(s_dir,dir); + dl1.v0= n++; dl1.v5=dPp2; dl1.cz6(); f[n++]=dl1.csa(s_dir,dir); + + dl1.v0= n++; dl1.v3=pPm2; dl1.cz5(); f[n++]=dl1.csa(s_dir,dir); + dl1.v0= n++; dl1.v3=dPm2; dl1.cz5(); f[n++]=dl1.csa(s_dir,dir); + dl1.v0= n++; dl1.v3=dPp2; dl1.cz5(); f[n++]=dl1.csa(s_dir,dir); + dl1.v0= n++; dl1.v3=pPp2; dl1.cz5(); f[n++]=dl1.csa(s_dir,dir); + + + + dl2.v0= n++; dl2.v3=dFm1; dl2.v3=pPp1;dl2.v4=pP; dl2.cz5(); f[n++]=dl2.getVal(); + dl2.v0= n++; dl2.v3=dFp1; dl2.v3=pPm1; dl2.cz5(); f[n++]=dl2.getVal(); + dl2.v0= n++; dl2.v3=pFm1; dl2.v3=dPp1;dl2.v4=dP; dl2.cz5(); f[n++]=dl2.getVal(); + dl2.v0= n++; dl2.v3=pFp1; dl2.v3=dPm1; dl2.cz5(); f[n++]=dl2.getVal(); + + + dl2.v0= n++; dl2.v3=dFm1; dl2.v3=dPm2;dl2.v4=pP; dl2.cz5(); f[n++]=dl2.getVal(); + dl2.v0= n++; dl2.v3=dFp1; dl2.v3=dPp2; dl2.cz5(); f[n++]=dl2.getVal(); + dl2.v0= n++; dl2.v3=pFm1; dl2.v3=pPm2;dl2.v4=dP; dl2.cz5(); f[n++]=dl2.getVal(); + dl2.v0= n++; dl2.v3=pFp1; dl2.v3=pPp2; dl2.cz5(); f[n++]=dl2.getVal(); + + + dwwp.v0= n++; dwwp.v2=pF; dwwp.v3=dF; dwwp.v4=dP; dwwp.cz5(); f[n++]=dwwp.csa(s_dir,dir); + dwwp.v0= n++; dwwp.v2=pF; dwwp.v3=dF; dwwp.v4=pP; dwwp.cz5(); f[n++]=dwwp.csa(s_dir,dir); + dwwp.v0= n++; dwwp.v2=dF; dwwp.v3=pF; dwwp.v4=pP; dwwp.v4=dP; dwwp.cz6(); f[n++]=dwwp.csa(s_dir,dir); + + + + // lemmas + + dl2.v1=label; + dl2.v0= n++; dl2.v2=pL; dl2.v3=dP; dl2.cz4(); f[c++]=dl2.csa(s_dir,dir); + dl2.v0= n++; dl2.cz3(); f[c++]=dl2.csa(s_dir,dir); + dl2.v0= n++; dl2.v2=dL; dl2.v3=pP; dl2.cz4(); f[c++]=dl2.csa(s_dir,dir); + dl2.v0= n++; dl2.cz3(); f[c++]=dl2.csa(s_dir,dir); + + + dwwp.v1=label; + dwwp.v0= n++; dwwp.v2=pL; dwwp.v3=dL; dwwp.cz4(); f[c++]=dwwp.csa(s_dir,dir); + + dwp.v1= label; + dwp.v0=n++;dwp.v2=dL; dwp.v3=pP;dwp.v4=dP;dwp.v5=pL; dwp.cz6(); f[c++]=dwp.csa(s_dir,dir); + dwp.v0=n++;dwp.cz5(); f[c++]=dwp.csa(s_dir,dir); + + dwp.v0=n++;dwp.v2=pL; dwp.cz5(); f[c++]=dwp.csa(s_dir,dir); + dwwp.v0= n++; dwwp.v2=pL; dwwp.v3=dL; dwwp.v4=dP; dwwp.cz5(); f[c++]=dwwp.csa(s_dir,dir); + dwwp.v0= n++; dwwp.v4=pP; dwwp.cz5(); f[c++]=dwwp.csa(s_dir,dir); + + + // cluster + + d2pw.v1=label; + d2pw.v0=n++; d2pw.v2=prntLS; d2pw.v3=chldLS; d2pw.cz4(); f[c++]=d2pw.csa(s_dir,dir); + d2pw.v0=n++; d2pw.v4=pF; d2pw.cz5(); f[c++]=d2pw.csa(s_dir,dir); + d2pw.v0=n++; d2pw.v4=dF; d2pw.cz5(); f[c++]=d2pw.csa(s_dir,dir); + d2pw.v0=n++; d2pw.v5=pF; d2pw.cz6(); f[c++]=d2pw.csa(s_dir,dir); + + + d2pp.v1=label; + d2pp.v0=n++; d2pp.v2=prntLS; d2pp.v3=chldLS; d2pp.cz4(); f[c++]=d2pp.csa(s_dir,dir); + d2pp.v0=n++; d2pp.v4=pP; d2pp.cz5(); f[c++]=d2pp.csa(s_dir,dir); + d2pp.v0=n++; d2pp.v4=dP; d2pp.cz5(); f[c++]=d2pp.csa(s_dir,dir); + d2pp.v0=n++; d2pp.v5=pP; d2pp.cz6(); f[c++]=d2pp.csa(s_dir,dir); + + + short[] prel = is.plabels[i]; + short[] phead = is.pheads[i]; + + + //take those in for stacking + // dl2.v1=label; + // dl2.v0= n++;dl2.v2=prel[dpnt];dl2.v3=pP;dl2.v4=dP; dl2.v5=prnt==phead[dpnt]?1:2; dl2.cz6(); f[c++]=dl2.csa(s_dir,dir); + // dl2.v0= n++;dl2.v2=pP;dl2.v3=dP; dl2.v4=prnt==phead[dpnt]?1:2; dl2.cz5(); f[c++]=dl2.csa(s_dir,dir); + + + + if (feats==null) return; + + short[] featsP =feats[prnt], featsD =feats[dpnt]; + dlf.v0= n++; dlf.v1=label; dlf.v2=pP; dlf.v3=dP; + extractFeat(f, c, dir, featsP, featsD); + + return; + } + + + + public void gcm(Instances is , int i, int p, int d, int gc, int label,Cluster cluster, long[] f) { + + for(int k=0;k<f.length;k++) f[k]=0; + + short[] pos= is.pposs[i]; + int[] forms=is.forms[i]; + int[] lemmas=is.plemmas[i]; + short[][] feats=is.feats[i]; + + int pP = pos[p], dP = pos[d]; + int prntF = forms[p], chldF = forms[d]; + int prntL = lemmas[p], chldL = lemmas[d]; + int prntLS = prntF==-1?-1:cluster.getLP(prntF), chldLS = chldF==-1?-1:cluster.getLP(chldF); + + int gP = gc != -1 ? pos[gc] : s_str; + int gcF = gc != -1 ? forms[gc] : s_stwrd; + int gcL = gc != -1 ? lemmas[gc] : s_stwrd; + int gcLS = (gc != -1) && (gcF!=-1) ? cluster.getLP(gcF) : s_stwrd; + + if (prntF>maxForm) prntF=-1; + if (prntL>maxForm) prntL=-1; + + if (chldF>maxForm) chldF=-1; + if (chldL>maxForm) chldL=-1; + + if (gcF>maxForm) gcF=-1; + if (gcL>maxForm) gcL=-1; + + + int dir= (p < d)? ra:la, dir_gra =(d < gc)? ra:la; + + int n=84,c=0; + + //dl1.v023(); + dl1.v1=label; + dl1.v0= n++; dl1.v2=pP; dl1.v3=dP;dl1.v4=gP; dl1.cz5(); dl1.cs(s_dir,dir);f[c++]=dl1.csa(s_dir,dir_gra); + dl1.v0= n++; dl1.v2=pP; dl1.v3=gP; dl1.cz4();dl1.cs(s_dir,dir);f[c++]=dl1.csa(s_dir,dir_gra); + dl1.v0= n++; dl1.v2=dP; dl1.cz4(); dl1.cs(s_dir,dir);f[c++]=dl1.csa(s_dir,dir_gra); + + dwwp.v1=label; + dwwp.v0= n++; dwwp.v2=prntF; dwwp.v3=gcF; + dwwp.cz4(); dwwp.cs(s_dir,dir);f[c++]=dwwp.csa(s_dir,dir_gra); + + dwwp.v0= n++; dwwp.v2=chldF; dwwp.v3=gcF; + dwwp.cz4(); dwwp.cs(s_dir,dir);f[c++]=dwwp.csa(s_dir,dir_gra); + + dwp.v1=label; + dwp.v0= n++; dwp.v2=gcF; dwp.v3=pP; + dwp.cz4(); dwp.cs(s_dir,dir);f[c++]=dwp.csa(s_dir,dir_gra); + + dwp.v0= n++; dwp.v2=gcF; dwp.v3=dP; + dwp.cz4(); dwp.cs(s_dir,dir);f[c++]=dwp.csa(s_dir,dir_gra); + + dwp.v0= n++; dwp.v2=prntF; dwp.v3=gP; + dwp.cz4(); dwp.cs(s_dir,dir);f[c++]=dwp.csa(s_dir,dir_gra); + + dwp.v0= n++; dwp.v2=chldF; dwp.v3=gP; + dwp.cz4(); dwp.cs(s_dir,dir); f[c++]=dwp.csa(s_dir,dir_gra); + + + // lemma + + dwwp.v0= n++; dwwp.v2=prntL; dwwp.v3=gcL; + dwwp.cz4();dwwp.cs(s_dir,dir);f[c++]=dwwp.csa(s_dir,dir_gra); + + dwwp.v0= n++; dwwp.v2=chldL; dwwp.v3=gcL; + dwwp.cz4(); dwwp.cs(s_dir,dir);f[c++]=dwwp.csa(s_dir,dir_gra); + + dwp.v0= n++; dwp.v2=gcL; dwp.v3=pP; + dwp.cz4(); dwp.cs(s_dir,dir);f[c++]=dwp.csa(s_dir,dir_gra); + + dwp.v0= n++; dwp.v2=gcL; dwp.v3=dP; + dwp.cz4(); dwp.cs(s_dir,dir);f[c++]=dwp.csa(s_dir,dir_gra); + + dwp.v0= n++; dwp.v2=prntL; dwp.v3=gP; + dwp.cz4(); dwp.cs(s_dir,dir);f[c++]=dwp.csa(s_dir,dir_gra); + + dwp.v0= n++; dwp.v2=chldL; dwp.v3=gP; + dwp.cz4(); dwp.cs(s_dir,dir); f[c++]=dwp.csa(s_dir,dir_gra); + + + // clusters + + d2lp.v1= label; + d2lp.v0= n++; d2lp.v2=prntLS; d2lp.v3=gcLS; d2lp.cz4(); d2lp.cs(s_dir,dir);f[c++]=d2lp.csa(s_dir,dir_gra);// f.add(li.l2i(l)); + d2lp.v0= n++; d2lp.v2=chldLS; d2lp.v3=gcLS; d2lp.cz4(); d2lp.cs(s_dir,dir);f[c++]=d2lp.csa(s_dir,dir_gra); + d3lp.v0= n++; d3lp.v1= label; d3lp.v2=prntLS; d3lp.v3=chldLS; d3lp.v4=gcLS; d3lp.cz5(); d3lp.cs(s_dir,dir);f[c++]=d3lp.csa(s_dir,dir_gra); + + //_f83; + d2lp.v0= n++; d2lp.v2=prntLS; d2lp.v3=chldLS; d2lp.v4=gcF; d2lp.cz5(); f[c++]=d2lp.csa(s_dir,dir); + d2lp.v0= n++; d2lp.v2=prntLS; d2lp.v3=gcLS; d2lp.v4=chldF; d2lp.cz5(); f[c++]=d2lp.csa(s_dir,dir); + d2lp.v0= n++; d2lp.v2=chldLS; d2lp.v3=gcLS; d2lp.v4=prntF; d2lp.cz5(); f[c++]=d2lp.csa(s_dir,dir); + + d2pp.v1= label; + d2pp.v0= n++; d2pp.v2=prntLS; d2pp.v3=chldLS; d2pp.v4=gP; d2pp.cz5(); f[c++]=d2pp.csa(s_dir,dir); + d2pp.v0= n++; d2pp.v2=prntLS; d2pp.v3=gcLS; d2pp.v4=dP; d2pp.cz5(); f[c++]=d2pp.csa(s_dir,dir); + d2pp.v0= n++; d2pp.v2=chldLS; d2pp.v3=gcLS; d2pp.v4=pP; d2pp.cz5(); f[c++]=d2pp.csa(s_dir,dir); + + + + // linear features + + int prntPm1 = p != 0 ? pos[p - 1] : s_str; // parent-pos-minus1 + int chldPm1 = d - 1 >=0 ? pos[d - 1] : s_str; // child-pos-minus1 + int prntPp1 = p != pos.length - 1 ? pos[p + 1] : s_end; + int chldPp1 = d != pos.length - 1 ? pos[d + 1] : s_end; + + int gcPm1 = gc > 0 ? pos[gc - 1] : s_str; + int gcPp1 = gc < pos.length - 1 ? pos[gc + 1] : s_end; + + dl1.v0= n++; dl1.v2=gP; dl1.v3=gcPp1;dl1.v4=dP; dl1.cz5(); f[c++]=dl1.csa(s_dir,dir); + dl1.v0= n++; dl1.v2=gP; dl1.v3=gcPm1;dl1.v4=dP; dl1.cz5(); f[c++]=dl1.csa(s_dir,dir); + dl1.v0= n++; dl1.v2=gP; dl1.v3=dP;dl1.v4=chldPp1; dl1.cz5(); f[c++]=dl1.csa(s_dir,dir); + dl1.v0= n++; dl1.v2=gP; dl1.v3=dP;dl1.v4=chldPm1; dl1.cz5(); f[c++]=dl1.csa(s_dir,dir); + dl1.v0= n++; dl1.v2=gP; dl1.v3=gcPp1;dl1.v4=chldPm1;dl1.v5=dP;dl1.cz6(); f[c++]=dl1.csa(s_dir,dir); + dl1.v0= n++; dl1.v2=gcPm1; dl1.v3=gP;dl1.v4=chldPm1;dl1.v5=dP; dl1.cz6();f[c++]=dl1.csa(s_dir,dir); + dl1.v0= n++; dl1.v2=gP; dl1.v3=gcPp1;dl1.v4=dP;dl1.v5=chldPp1; dl1.cz6();f[c++]=dl1.csa(s_dir,dir); + dl1.v0= n++; dl1.v2=gcPm1; dl1.v3=gP;dl1.v4=dP;dl1.cz6(); f[c++]=dl1.csa(s_dir,dir); + dl1.v0= n++; dl1.v2=gP; dl1.v3=gcPp1;dl1.v4=pP; dl1.cz5(); f[c++]=dl1.csa(s_dir,dir); + dl1.v0= n++; dl1.v2=gP; dl1.v3=gcPm1;dl1.v4=pP; dl1.cz5(); f[c++]=dl1.csa(s_dir,dir); + dl1.v0= n++; dl1.v2=gP; dl1.v3=pP;dl1.v4=prntPp1; dl1.cz5(); f[c++]=dl1.csa(s_dir,dir); + dl1.v0= n++; dl1.v2=gP; dl1.v3=pP;dl1.v4=prntPm1; dl1.cz5(); f[c++]=dl1.csa(s_dir,dir); + dl1.v0= n++; dl1.v2=gP; dl1.v3=gcPp1;dl1.v4=prntPm1;dl1.v5=pP; dl1.cz6(); f[c++]=dl1.csa(s_dir,dir); + dl1.v0= n++; dl1.v2=gcPm1; dl1.v3=gP;dl1.v4=prntPm1;dl1.v5=pP; dl1.cz6(); f[c++]=dl1.csa(s_dir,dir); + dl1.v0= n++; dl1.v2=gP; dl1.v3=gcPp1;dl1.v4=pP;dl1.v5=prntPp1; dl1.cz6(); f[c++]=dl1.csa(s_dir,dir); + dl1.v0= n++; dl1.v2=gcPm1; dl1.v3=gP; dl1.v4=pP; dl1.v5=prntPp1;dl1.cz6(); f[c++]=dl1.csa(s_dir,dir); + + + int pLSp1 = p != pos.length - 1 ? forms[p + 1]==-1?-1:cluster.getLP(forms[p + 1]): _cend; + int cLSp1 = d != pos.length - 1 ? forms[d + 1] ==-1?-1:cluster.getLP(forms[d + 1]):_cend; + int gcLSp1 = gc < pos.length -1 ? forms[gc + 1] ==-1?-1:cluster.getLP(forms[gc + 1]) : s_end; + + int pLSm1 = p != 0 ? lemmas[p - 1]==-1?-1:cluster.getLP(lemmas[p - 1]): _cstr; + int cLSm1 = d - 1 >=0 ? lemmas[d - 1] ==-1?-1:cluster.getLP(lemmas[d - 1]):_cstr; + int gcLSm1 = gc > 0 ? lemmas[gc - 1] ==-1?-1:cluster.getLP(lemmas[gc - 1]) : _cstr; + + + dl1.v0= n++; dl1.v2=gP; dl1.v3=gcLSp1;dl1.v4=dP; dl1.cz5(); f[c++]=dl1.csa(s_dir,dir); + dl1.v0= n++; dl1.v2=gP; dl1.v3=gcLSm1;dl1.v4=dP; dl1.cz5();f[c++]=dl1.csa(s_dir,dir); + dl1.v0= n++; dl1.v2=gP; dl1.v3=dP;dl1.v4=cLSp1; dl1.cz5(); f[c++]=dl1.csa(s_dir,dir); + dl1.v0= n++; dl1.v2=gP; dl1.v3=dP;dl1.v4=cLSm1; dl1.cz5(); f[c++]=dl1.csa(s_dir,dir); + dl1.v0= n++; dl1.v2=gP; dl1.v3=gcLSp1;dl1.v4=cLSm1;dl1.v5=dP;dl1.cz6(); f[c++]=dl1.csa(s_dir,dir); + dl1.v0= n++; dl1.v2=gcLSm1; dl1.v3=gP;dl1.v4=cLSm1;dl1.v5=dP; dl1.cz6();f[c++]=dl1.csa(s_dir,dir); + dl1.v0= n++; dl1.v2=gP; dl1.v3=gcLSp1;dl1.v4=dP;dl1.v5=cLSp1; dl1.cz6(); f[c++]=dl1.csa(s_dir,dir); + dl1.v0= n++; dl1.v2=cLSm1; dl1.v3=gP;dl1.v4=dP;dl1.cz6(); f[c++]=dl1.csa(s_dir,dir); + dl1.v0= n++; dl1.v2=gP; dl1.v3=gcLSp1;dl1.v4=pP; dl1.cz5(); f[c++]=dl1.csa(s_dir,dir); + dl1.v0= n++; dl1.v2=gP; dl1.v3=gcLSm1;dl1.v4=pP; dl1.cz5(); f[c++]=dl1.csa(s_dir,dir); + dl1.v0= n++; dl1.v2=gP; dl1.v3=pP;dl1.v4=pLSp1; dl1.cz5(); f[c++]=dl1.csa(s_dir,dir); + dl1.v0= n++; dl1.v2=gP; dl1.v3=pP;dl1.v4=pLSm1; dl1.cz5(); f[c++]=dl1.csa(s_dir,dir); + dl1.v0= n++; dl1.v2=gP; dl1.v3=gcLSp1;dl1.v4=pLSm1;dl1.v5=pP; dl1.cz6(); f[c++]=dl1.csa(s_dir,dir); + dl1.v0= n++; dl1.v2=gcLSm1; dl1.v3=gP;dl1.v4=pLSm1;dl1.v5=pP; dl1.cz6(); f[c++]=dl1.csa(s_dir,dir); + dl1.v0= n++; dl1.v2=gP; dl1.v3=gcLSp1;dl1.v4=pP;dl1.v5=pLSp1; dl1.cz6(); f[c++]=dl1.csa(s_dir,dir); + dl1.v0= n++; dl1.v2=gcLSm1; dl1.v3=gP; dl1.v4=pP; dl1.v5=pLSp1;dl1.cz6(); f[c++]=dl1.csa(s_dir,dir); + + + + short[] prel = is.plabels[i],phead=is.pheads[i]; + + int g = p==phead[d]?1:2 ; + if (gc>=0) g += d==phead[gc]?4:8; + + int gr = gc==-1?s_relend:prel[gc]; + + // take those in for stacking + /* + dl2.v1=label; + dl2.v0= n++;dl2.v2=prel[d];dl2.v3=g;dl2.v4=gP;dl2.v5=dP;dl2.cz6();f[c++]=dl2.csa(s_dir,dir); + dl2.v0= n++;dl2.v2=prel[d];dl2.v3=g;dl2.v4=gP;dl2.v5=pP;dl2.cz6();f[c++]=dl2.csa(s_dir,dir); + dl2.v0= n++;dl2.v2=prel[d];dl2.v3=g;dl2.v4=gP;dl2.v5=pP;dl2.v6=dP;dl2.cz7();f[c++]=dl2.csa(s_dir,dir); + + dl2.v0= n++;dl2.v2=gr;dl2.v3=g;dl2.v4=gP;dl2.v5=dP;dl2.cz6();f[c++]=dl2.csa(s_dir,dir); + dl2.v0= n++;dl2.v2=gr;dl2.v3=g;dl2.v4=gP;dl2.v5=pP;dl2.cz6();f[c++]=dl2.csa(s_dir,dir); + dl2.v0= n++;dl2.v2=gr;dl2.v3=g;dl2.v4=gP;dl2.v5=pP;dl2.v6=dP;dl2.cz7();f[c++]=dl2.csa(s_dir,dir); + +*/ + if (feats==null) return; + + short[] featsP =feats[d]; + short[] featsD =gc!=-1?feats[gc]:null; + + dlf.v0= n++; dlf.v1=label; dlf.v2=gP; dlf.v3=dP; + extractFeat(f, c, dir, featsP, featsD); + return; + } + + + public void siblingm(Instances is , int i,short pos[], int forms[], int[] lemmas, short[][] feats, int prnt, int d, int sblng, int label, Cluster cluster, long[] f, int v) + { + + for(int k=0;k<f.length;k++) f[k]=0; + + int pP = pos[prnt], dP = pos[d]; + int prntF = forms[prnt],chldF = forms[d]; + int prntL = lemmas[prnt], chldL = lemmas[d]; + int prntLS = prntF==-1?-1:cluster.getLP(prntF), chldLS = chldF==-1?-1:cluster.getLP(chldF); + + int sP = sblng!=-1 ? pos[sblng] : s_str, sblF = sblng!=-1 ? forms[sblng] : s_stwrd, sblL = sblng!=-1 ? lemmas[sblng] : s_stwrd; + + int sblLS = (sblng != -1)&&(sblF!=-1) ? cluster.getLP(sblF) : s_stwrd; + + + int dir= (prnt < d)? ra:la; + + int abs = Math.abs(prnt-d); + + final int dist; + if (abs > 10)dist=d10;else if (abs>5) dist=d5;else if( abs==5)dist=d4;else if (abs==4)dist=d3;else if (abs==3)dist=d2; + else if (abs==2)dist=d1; else dist=di0; + + int n=147; + + if (prntF>maxForm) prntF=-1; + if (prntL>maxForm) prntL=-1; + + if (chldF>maxForm) chldF=-1; + if (chldL>maxForm) chldL=-1; + + if (sblF>maxForm) sblF=-1; + if (sblL>maxForm) sblL=-1; + + + dl1.v0= n++; dl1.v1=label;dl1.v2=pP; dl1.v3=dP;dl1.v4=sP; dl1.cz5(); f[0]=dl1.csa(s_dir,dir);f[1]=dl1.csa(s_dist,dist); + dl1.v0= n++; dl1.v3=sP; dl1.cz4(); f[2]=dl1.csa(s_dir,dir); f[3]=dl1.csa(s_dist,dist); + dl1.v0= n++; dl1.v2=dP;dl1.cz4(); f[4]=dl1.csa(s_dir,dir); f[5]=dl1.csa(s_dist,dist); + + // sibling only could be tried + dwwp.v1=label; + dwwp.v0= n++; dwwp.v2=prntF; dwwp.v3=sblF; dwwp.cz4(); f[6]=dwwp.csa(s_dir,dir); f[7]=dwwp.csa(s_dist,dist); + dwwp.v0= n++; dwwp.v2=chldF; dwwp.cz4(); f[8]=dwwp.csa(s_dir,dir); f[9]=dwwp.csa(s_dist,dist); + dwp.v0= n++; dwp.v1=label; dwp.v2=sblF; dwp.v3=pP; dwp.cz4(); f[10]=dwp.csa(s_dir,dir); f[11]=dwp.csa(s_dist,dist); + dwp.v0= n++; /*dwp.v1=label; */dwp.v3=dP; dwp.cz4(); f[12]=dwp.csa(s_dir,dir); f[13]=dwp.csa(s_dist,dist); + dwp.v0= n++; /*dwp.v1=label;*/ dwp.v2=prntF; dwp.v3=sP; dwp.cz4(); f[14]=dwp.csa(s_dir,dir); f[15]=dwp.csa(s_dist,dist); + dwp.v0= n++; /*dwp.v1=label;*/ dwp.v2=chldF; dwp.cz4(); f[16]=dwp.csa(s_dir,dir); f[17]=dwp.csa(s_dist,dist); + + //lemmas + dwwp.v0= n++; dwwp.v2=prntL; dwwp.v3=sblL; dwwp.cz4(); f[18]=dwwp.csa(s_dir,dir); + dwwp.v0= n++; dwwp.v2=chldL; dwwp.cz4(); f[19]=dwwp.csa(s_dir,dir); f[20]=dwwp.csa(s_dist,dist); + dwp.v0= n++; /*dwp.v1=label;*/ dwp.v2=sblL; dwp.v3=pP; dwp.cz4(); f[21]=dwp.csa(s_dir,dir); f[22]=dwp.csa(s_dist,dist); + dwp.v0= n++; /*dwp.v1=label; */ dwp.v3=dP; dwp.cz4(); f[23]=dwp.csa(s_dir,dir);f[24]=dwp.csa(s_dist,dist); + dwp.v0= n++; /*dwp.v1=label;*/ dwp.v2=prntL; dwp.v3=sP; dwp.cz4(); f[25]=dwp.csa(s_dir,dir); f[26]=dwp.csa(s_dist,dist); + dwp.v0= n++; /*dwp.v1=label;*/ dwp.v2=chldL; dwp.cz4(); f[27]=dwp.csa(s_dir,dir);f[28]=dwp.csa(s_dist,dist); + + + // clusters + + d2lp.v1=label; + d2lp.v0= n++; d2lp.v2=prntLS; d2lp.v3=sblLS; d2lp.cz4(); f[29]=d2lp.csa(s_dir,dir); + d2lp.v0= n++; d2lp.v2=chldLS; d2lp.v3=sblLS; d2lp.cz4(); f[30]=d2lp.csa(s_dir,dir); f[31]=d2lp.csa(s_dist,dist); + + d3lp.v1= label; + d3lp.v0= n++; d3lp.v2=prntLS; d3lp.v3=chldLS; d3lp.v4=sblLS;d3lp.cz5(); f[32]=d3lp.csa(s_dir,dir); + + d2lp.v0= n++; d2lp.v2=prntLS; d2lp.v3=chldLS; d2lp.v4=sblF; d2lp.cz5(); f[33]=d2lp.csa(s_dir,dir); f[34]=d2lp.csa(s_dist,dist); + d2lp.v0= n++; d2lp.v2=prntLS; d2lp.v3=sblLS; d2lp.v4=chldF; d2lp.cz5(); f[35]=d2lp.csa(s_dir,dir); f[36]=d2lp.csa(s_dist,dist); + d2lp.v0= n++; d2lp.v2=chldLS; d2lp.v3=sblLS; d2lp.v4=prntF; d2lp.cz5(); f[37]=d2lp.csa(s_dir,dir); f[38]=d2lp.csa(s_dist,dist); + + d2pp.v1=label; + d2pp.v0= n++; d2pp.v2=prntLS; d2pp.v3=chldLS; d2pp.v4=sP; d2pp.cz5(); f[39]=d2pp.csa(s_dir,dir); f[40]=d2pp.csa(s_dist,dist); + d2pp.v0= n++; d2pp.v2=prntLS; d2pp.v3=sblLS; d2pp.v4=dP; d2pp.cz5(); f[41]=d2pp.csa(s_dir,dir); f[42]=d2pp.csa(s_dist,dist); + d2pp.v0= n++; d2pp.v2=chldLS; d2pp.v3=sblLS; d2pp.v4=pP; d2pp.cz5(); f[43]=d2pp.csa(s_dir,dir); f[44]=d2pp.csa(s_dist,dist); + + + int prntPm1 = prnt!=0 ? pos[prnt-1] : s_str; + int chldPm1 = d-1>=0 ? pos[d-1] : s_str; + int prntPp1 = prnt!=pos.length-1 ? pos[prnt+1] : s_end; + int chldPp1 = d!=pos.length-1 ? pos[d+1] : s_end; + + // sibling part of speech minus and plus 1 + int sblPm1 = sblng>0 ? pos[sblng-1]:s_str; + int sblPp1 = sblng<pos.length-1 ? pos[sblng + 1]:s_end; + + dl1.v0=n++; dl1.v2=sP; dl1.v3=sblPp1;dl1.v4=pP; dl1.cz5(); f[45]=dl1.csa(s_dir,dir); + dl1.v0=n++; dl1.v2=sP; dl1.v3=sblPm1;dl1.v4=pP; dl1.cz5(); f[46]=dl1.csa(s_dir,dir);// f.add(li.l2i(l)); + dl1.v0=n++; dl1.v2=sP; dl1.v3=pP;dl1.v4=prntPp1;dl1.cz5(); f[47]=dl1.csa(s_dir,dir);// f.add(li.l2i(l)); + dl1.v0=n++; dl1.v2=sP; dl1.v3=pP;dl1.v4=prntPm1; dl1.cz5(); f[48]=dl1.csa(s_dir,dir);// f.add(li.l2i(l)); + dl1.v0=n++; dl1.v2=sP; dl1.v3=sblPp1;dl1.v4=prntPm1;dl1.v5=pP; dl1.cz6(); f[49]=dl1.csa(s_dir,dir); + dl1.v0=n++; dl1.v2=sblPm1; dl1.v3=sP;dl1.v4=prntPm1;dl1.v5=pP;dl1.cz6(); f[50]=dl1.csa(s_dir,dir);// f.add(li.l2i(l)); + dl1.v0=n++; dl1.v2=sP; dl1.v3=sblPp1;dl1.v4=pP;dl1.v5=prntPp1; dl1.cz6(); f[51]=dl1.csa(s_dir,dir);// f.add(li.l2i(l)); + dl1.v0=n++; dl1.v2=sblPm1; dl1.v3=sP; dl1.v4=pP;dl1.v5=prntPp1; dl1.cz6(); f[52]=dl1.csa(s_dir,dir);// f.add(li.l2i(l)); + dl1.v0=n++; dl1.v2=sP; dl1.v3=sblPp1;dl1.v4=dP; dl1.cz5(); f[53]=dl1.csa(s_dir,dir); + dl1.v0=n++; dl1.v2=sP; dl1.v3=sblPm1;dl1.v4=dP; dl1.cz5(); f[54]=dl1.csa(s_dir,dir); + dl1.v0=n++; dl1.v2=sP; dl1.v3=dP;dl1.v4=chldPp1;dl1.cz5(); f[55]=dl1.csa(s_dir,dir); + dl1.v0=n++; dl1.v2=sP; dl1.v3=dP;dl1.v4=chldPm1; dl1.cz5(); f[56]=dl1.csa(s_dir,dir); + dl1.v0=n++; dl1.v2=sP; dl1.v3=sblPp1;dl1.v4=chldPm1;dl1.v5=dP; dl1.cz6(); f[57]=dl1.csa(s_dir,dir);// f.add(li.l2i(l)); + dl1.v0=n++; dl1.v2=sblPm1; dl1.v3=sP;dl1.v4=chldPm1;dl1.v5=dP;dl1.cz6(); f[58]=dl1.csa(s_dir,dir); + dl1.v0= n++;dl1.v2=sP; dl1.v3=sblPp1;dl1.v4=dP;dl1.v5=chldPp1;dl1.cz6();f[59]=dl1.csa(s_dir,dir);// f.add(li.l2i(l)); + dl1.v0= n++; dl1.v2=sblPm1; dl1.v3=sP;dl1.v4=dP;dl1.v5=chldPp1;dl1.cz6(); f[60]=dl1.csa(s_dir,dir); + + int c=61; + + int pLSp1 = prnt != pos.length - 1 ? forms[prnt + 1]==-1?-1:cluster.getLP(forms[prnt + 1]): _cend; + int cLSp1 = d != pos.length - 1 ? forms[d + 1] ==-1?-1:cluster.getLP(forms[d + 1]):_cend; + int sLSp1 = sblng < pos.length -1 ? forms[sblng + 1] ==-1?-1:cluster.getLP(forms[sblng + 1]) : _cend; + + int pLSm1 = prnt!=0 ? forms[prnt - 1]==-1?-1:cluster.getLP(forms[prnt - 1]): _cstr; + int cLSm1 = d-1>=0 ? forms[d - 1] ==-1?-1:cluster.getLP(forms[d - 1]):_cstr; + int sLSm1 = sblng>0 ? forms[sblng - 1] ==-1?-1:cluster.getLP(forms[sblng - 1]):_cstr; + + //int c=61; + + dl1.v0=n++; dl1.v2=sP; dl1.v3=sLSp1;dl1.v4=pP; dl1.cz5(); f[c++]=dl1.csa(s_dir,dir); + dl1.v0=n++; dl1.v2=sP; dl1.v3=sLSm1;dl1.v4=pP; dl1.cz5(); f[c++]=dl1.csa(s_dir,dir); + dl1.v0=n++; dl1.v2=sP; dl1.v3=pP;dl1.v4=pLSp1;dl1.cz5(); f[c++]=dl1.csa(s_dir,dir); + dl1.v0=n++; dl1.v2=sP; dl1.v3=pP;dl1.v4=pLSm1; dl1.cz5(); f[c++]=dl1.csa(s_dir,dir); + dl1.v0=n++; dl1.v2=sP; dl1.v3=sLSp1;dl1.v4=pLSm1;dl1.v5=pP; dl1.cz6(); f[c++]=dl1.csa(s_dir,dir); + dl1.v0=n++; dl1.v2=sLSm1; dl1.v3=sP;dl1.v4=pLSm1;dl1.v5=pP; dl1.cz6(); f[c++]=dl1.csa(s_dir,dir); + dl1.v0=n++; dl1.v2=sP; dl1.v3=sLSp1;dl1.v4=pP;dl1.v5=pLSp1; dl1.cz6(); f[c++]=dl1.csa(s_dir,dir); + dl1.v0=n++; dl1.v2=sLSm1; dl1.v3=sP; dl1.v4=pP;dl1.v5=pLSp1; dl1.cz6(); f[c++]=dl1.csa(s_dir,dir); + dl1.v0=n++; dl1.v2=sP; dl1.v3=sLSp1;dl1.v4=dP; dl1.cz5(); f[c++]=dl1.csa(s_dir,dir); + dl1.v0=n++; dl1.v2=sP; dl1.v3=sLSm1;dl1.v4=dP; dl1.cz5(); f[c++]=dl1.csa(s_dir,dir); + dl1.v0=n++; dl1.v2=sP; dl1.v3=dP;dl1.v4=cLSp1; dl1.cz5(); f[c++]=dl1.csa(s_dir,dir); + dl1.v0=n++;dl1.v2=sP; dl1.v3=dP;dl1.v4=cLSm1; dl1.cz5(); f[c++]=dl1.csa(s_dir,dir); + dl1.v0=n++; dl1.v2=sP; dl1.v3=sLSm1;dl1.v4=cLSm1;dl1.v5=dP; dl1.cz6(); f[c++]=dl1.csa(s_dir,dir); + dl1.v0=n++; dl1.v2=sLSm1; dl1.v3=sP;dl1.v4=cLSm1;dl1.v5=dP;dl1.cz6(); f[c++]=dl1.csa(s_dir,dir); + dl1.v0=n++;dl1.v2=sP; dl1.v3=sLSp1;dl1.v4=dP;dl1.v5=cLSp1;dl1.cz6();f[c++]=dl1.csa(s_dir,dir); + dl1.v0=n++; dl1.v2=sLSm1; dl1.v3=sP;dl1.v4=dP;dl1.v5=cLSp1; dl1.cz6(); f[c++]=dl1.csa(s_dir,dir); + + + + dl1.v0=n++; dl1.v2=sP; dl1.v3=sLSp1;dl1.v4=pP; dl1.cz5(); f[c++]=dl1.csa(s_dir,dir); + dl1.v0=n++; dl1.v2=sP; dl1.v3=sLSm1;dl1.v4=pP; dl1.cz5(); f[c++]=dl1.csa(s_dir,dir); + dl1.v0=n++; dl1.v2=sP; dl1.v3=pP;dl1.v4=pLSp1;dl1.cz5(); f[c++]=dl1.csa(s_dir,dir); + dl1.v0=n++; dl1.v2=sP; dl1.v3=pP;dl1.v4=pLSm1; dl1.cz5(); f[c++]=dl1.csa(s_dir,dir); + dl1.v0=n++; dl1.v2=sP; dl1.v3=sLSp1;dl1.v4=pLSm1;dl1.v5=pP; dl1.cz6(); f[c++]=dl1.csa(s_dir,dir); + dl1.v0=n++; dl1.v2=sLSm1; dl1.v3=sP;dl1.v4=pLSm1;dl1.v5=pP; dl1.cz6(); f[c++]=dl1.csa(s_dir,dir); + dl1.v0=n++; dl1.v2=sP; dl1.v3=sLSp1;dl1.v4=pP;dl1.v5=pLSp1; dl1.cz6(); f[c++]=dl1.csa(s_dir,dir); + dl1.v0=n++; dl1.v2=sLSm1; dl1.v3=sP; dl1.v4=pP;dl1.v5=pLSp1; dl1.cz6(); f[c++]=dl1.csa(s_dir,dir); + dl1.v0=n++; dl1.v2=sP; dl1.v3=sLSp1;dl1.v4=dP; dl1.cz5(); f[c++]=dl1.csa(s_dir,dir); + dl1.v0=n++; dl1.v2=sP; dl1.v3=sLSm1;dl1.v4=dP; dl1.cz5(); f[c++]=dl1.csa(s_dir,dir); + dl1.v0=n++; dl1.v2=sP; dl1.v3=dP;dl1.v4=cLSp1; dl1.cz5(); f[c++]=dl1.csa(s_dir,dir); + dl1.v0=n++;dl1.v2=sP; dl1.v3=dP;dl1.v4=cLSm1; dl1.cz5(); f[c++]=dl1.csa(s_dir,dir); + dl1.v0=n++; dl1.v2=sP; dl1.v3=sLSm1;dl1.v4=cLSm1;dl1.v5=dP; dl1.cz6(); f[c++]=dl1.csa(s_dir,dir); + dl1.v0=n++; dl1.v2=sLSm1; dl1.v3=sP;dl1.v4=cLSm1;dl1.v5=dP;dl1.cz6(); f[c++]=dl1.csa(s_dir,dir); + dl1.v0= n++;dl1.v2=sP; dl1.v3=sLSp1;dl1.v4=dP;dl1.v5=cLSp1;dl1.cz6();f[c++]=dl1.csa(s_dir,dir); + dl1.v0= n++; dl1.v2=sLSm1; dl1.v3=sP;dl1.v4=dP;dl1.v5=cLSp1; dl1.cz6(); f[c++]=dl1.csa(s_dir,dir); + + // take those in for stacking + + /* + short[] prel = is.plabels[i],phead=is.pheads[i]; + + int g = prnt==phead[d]?1:2 ; + if (sblng>=0) g += prnt==phead[sblng]?4:8; + + int gr = sblng==-1?s_relend:prel[sblng]; + + + dl2.v0= n++;dl2.v2=prel[d];dl2.v3=g;dl2.v4=sP;dl2.v5=dP;dl2.cz6();f[c++]=dl2.csa(s_dir,dir); + dl2.v0= n++;dl2.v2=prel[d];dl2.v3=g;dl2.v4=sP;dl2.v5=pP;dl2.cz6();f[c++]=dl2.csa(s_dir,dir); + dl2.v0= n++;dl2.v2=prel[d];dl2.v3=g;dl2.v4=sP;dl2.v5=pP;dl2.v6=dP;dl2.cz7();f[c++]=dl2.csa(s_dir,dir); + + dl2.v0= n++;dl2.v2=gr;dl2.v3=g;dl2.v4=sP;dl2.v5=dP;dl2.cz6();f[c++]=dl2.csa(s_dir,dir); + dl2.v0= n++;dl2.v2=gr;dl2.v3=g;dl2.v4=sP;dl2.v5=pP;dl2.cz6();f[c++]=dl2.csa(s_dir,dir); + dl2.v0= n++;dl2.v2=gr;dl2.v3=g;dl2.v4=sP;dl2.v5=pP;dl2.v6=dP;dl2.cz7();f[c++]=dl2.csa(s_dir,dir); +*/ + + if (feats==null) return; + + int cnt=c; + + short[] featsP =feats[d]; + short[] featsSbl =sblng!=-1?feats[sblng]:null; + + dlf.v0= n++; dlf.v1=label; dlf.v2=sP; dlf.v3=dP; + + + cnt = extractFeat(f, cnt ,dir, featsP, featsSbl); + + featsP =feats[prnt]; + featsSbl =sblng!=-1?feats[sblng]:null; + + dlf.v0= n++; dlf.v1=label; dlf.v2=pP; dlf.v3=sP; + if (featsP!=null && featsSbl!=null) { + for(short i1=0;i1<featsP.length;i1++) { + for(short i2=0;i2<featsSbl.length;i2++) { + dlf.v4=featsP[i1]; dlf.v5=featsSbl[i2]; + dlf.cz6(); f[cnt++]=dlf.csa(s_dir,prnt<sblng?1:2); + } + } + } else if (featsP==null && featsSbl!=null) { + + for(short i2=0;i2<featsSbl.length;i2++) { + dlf.v4=nofeat; dlf.v5=featsSbl[i2]; + dlf.cz6(); f[cnt++]=dlf.csa(s_dir,dir); + } + + } else if (featsP!=null && featsSbl==null) { + + for(short i1=0;i1<featsP.length;i1++) { + dlf.v4=featsP[i1]; dlf.v5=nofeat; + dlf.cz6(); f[cnt++]=dlf.csa(s_dir,dir); + } + } + + return; + } + + private int extractFeat(long[] f, int cnt, int dir, short[] featsP, short[] featsD) { + if (featsP!=null && featsD!=null) { + for(short i1=0;i1<featsP.length;i1++) { + for(short i2=0;i2<featsD.length;i2++) { + dlf.v4=featsP[i1]; dlf.v5=featsD[i2]; + dlf.cz6(); f[cnt++]=dlf.csa(s_dir,dir); + } + } + } else if (featsP==null && featsD!=null) { + + for(short i2=0;i2<featsD.length;i2++) { + dlf.v4=nofeat; dlf.v5=featsD[i2]; + dlf.cz6(); f[cnt++]=dlf.csa(s_dir,dir); + + } + } else if (featsP!=null && featsD==null) { + + for(short i1=0;i1<featsP.length;i1++) { + dlf.v4=featsP[i1]; dlf.v5=nofeat; + dlf.cz6(); f[cnt++]=dlf.csa(s_dir,dir); + + } + } + return cnt; + } + + public IFV encodeCat2(Instances is, int ic, short pposs[], int forms[], int[] lemmas, short[] heads, short[] types, short feats[][], + Cluster cluster, IFV f, Long2IntInterface li) { + + + long[] svs = new long[250]; + + for (int i = 1; i < heads.length; i++) { + + + int n =basic(pposs, forms, heads[i], i, cluster, f); + firstm(is, ic, heads[i], i, types[i], cluster,svs); + for(int k=0;k<svs.length;k++) f.add(li.l2i(svs[k])); + + int ch,cmi,cmo; + if (heads[i] < i) { + ch = rightmostRight(heads, heads[i], i); + cmi = leftmostLeft(heads, i, heads[i]); + cmo = rightmostRight(heads, i, heads.length); + + } else { + ch = leftmostLeft(heads, heads[i], i); + cmi = rightmostRight(heads, i, heads[i]); + cmo = leftmostLeft(heads, i, 0); + } + + siblingm(is,ic,pposs, forms,lemmas, feats, heads[i], i, ch,types[i], cluster, svs,n); + for(int k=0;k<svs.length;k++) f.add(li.l2i(svs[k])); + + + gcm(is, ic,heads[i],i,cmi, types[i], cluster, svs); + for(int k=0;k<svs.length;k++) f.add(li.l2i(svs[k])); + + gcm(is, ic, heads[i],i,cmo, types[i], cluster, svs); + for(int k=0;k<svs.length;k++)f.add(li.l2i(svs[k])); + } + + return f; + } + + public FV encodeCat(Instances is, int ic, short pposs[], int forms[], int[] lemmas, short[] heads, short[] types, short feats[][], Cluster cluster, FV f) { + + + long[] svs = new long[250]; + + for (int i = 1; i < heads.length; i++) { + + + int n =basic(pposs, forms, heads[i], i, cluster, f); + firstm(is, ic, heads[i], i, types[i], cluster,svs); + for(int k=0;k<svs.length;k++) dl1.map(f,svs[k]); + + int ch,cmi,cmo; + if (heads[i] < i) { + ch = rightmostRight(heads, heads[i], i); + cmi = leftmostLeft(heads, i, heads[i]); + cmo = rightmostRight(heads, i, heads.length); + + } else { + ch = leftmostLeft(heads, heads[i], i); + cmi = rightmostRight(heads, i, heads[i]); + cmo = leftmostLeft(heads, i, 0); + } + + siblingm(is,ic,pposs, forms,lemmas, feats, heads[i], i, ch,types[i], cluster, svs,n); + for(int k=0;k<svs.length;k++) dl1.map(f,svs[k]); + + + gcm(is, ic,heads[i],i,cmi, types[i], cluster, svs); + for(int k=0;k<svs.length;k++) dl1.map(f,svs[k]); + + gcm(is, ic, heads[i],i,cmo, types[i], cluster, svs); + for(int k=0;k<svs.length;k++) dl1.map(f,svs[k]); + } + + return f; + } + + + public float encode3(short[] pos, short heads[] , short[] types, DataF d2) { + + double v = 0; + for (int i = 1; i < heads.length; i++) { + + int dir= (heads[i] < i)? 0:1; + + v += d2.pl[heads[i]][i]; + v += d2.lab[heads[i]][i][types[i]][dir]; + + boolean left = i<heads[i]; + short[] labels = Edges.get(pos[heads[i]], pos[i], left); + int lid=-1; + for(int k=0;k<labels.length;k++) if (types[i]== labels[k]) {lid= k;break;} + + int ch,cmi,cmo; + if (heads[i] < i) { + ch = rightmostRight(heads, heads[i], i); + cmi = leftmostLeft(heads, i, heads[i]); + cmo = rightmostRight(heads, i, heads.length); + + if (ch==-1) ch=heads[i]; + if (cmi==-1) cmi=heads[i]; + if (cmo==-1) cmo=heads[i]; + + } else { + ch = leftmostLeft(heads, heads[i], i); + cmi = rightmostRight(heads, i, heads[i]); + cmo = leftmostLeft(heads, i, 0); + + if (ch==-1) ch=i; + if (cmi==-1) cmi=i; + if (cmo==-1) cmo=i; + } + v += d2.sib[heads[i]][i][ch][dir][lid]; + v += d2.gra[heads[i]][i][cmi][dir][lid]; + v += d2.gra[heads[i]][i][cmo][dir][lid]; + } + return (float)v; + } + + /** + * Provide the scores of the edges + * @param pos + * @param heads + * @param types + * @param edgesScores + * @param d2 + * @return + */ + public static float encode3(short[] pos, short heads[] , short[] types, float[] edgesScores, DataF d2) { + + double v = 0; + for (int i = 1; i < heads.length; i++) { + + int dir= (heads[i] < i)? 0:1; + + edgesScores[i] = d2.pl[heads[i]][i]; + edgesScores[i] += d2.lab[heads[i]][i][types[i]][dir]; + + boolean left = i<heads[i]; + short[] labels = Edges.get(pos[heads[i]], pos[i], left); + int lid=-1; + for(int k=0;k<labels.length;k++) if (types[i]== labels[k]) {lid= k;break;} + + int ch,cmi,cmo; + if (heads[i] < i) { + ch = rightmostRight(heads, heads[i], i); + cmi = leftmostLeft(heads, i, heads[i]); + cmo = rightmostRight(heads, i, heads.length); + + if (ch==-1) ch=heads[i]; + if (cmi==-1) cmi=heads[i]; + if (cmo==-1) cmo=heads[i]; + + } else { + ch = leftmostLeft(heads, heads[i], i); + cmi = rightmostRight(heads, i, heads[i]); + cmo = leftmostLeft(heads, i, 0); + + if (ch==-1) ch=i; + if (cmi==-1) cmi=i; + if (cmo==-1) cmo=i; + } + edgesScores[i] += d2.sib[heads[i]][i][ch][dir][lid]; + edgesScores[i] += d2.gra[heads[i]][i][cmi][dir][lid]; + edgesScores[i] += d2.gra[heads[i]][i][cmo][dir][lid]; + v+=edgesScores[i]; + } + return (float)v; + } + + + private static int rightmostRight(short[] heads, int head, int max) { + int rightmost = -1; + for (int i = head + 1; i < max; i++) if (heads[i] == head) rightmost = i; + + return rightmost; + } + + private static int leftmostLeft(short[] heads, int head, int min) { + int leftmost = -1; + for (int i = head - 1; i > min; i--) if (heads[i] == head) leftmost = i; + return leftmost; + } + + public static final String REL = "REL",END = "END",STR = "STR",LA = "LA",RA = "RA"; + + private static int ra,la; + private static int s_str; + private static int s_end, _cend,_cstr, s_stwrd,s_relend; + + protected static final String TYPE = "TYPE",DIR = "D"; + public static final String POS = "POS"; + protected static final String DIST = "DIST",MID = "MID", FEAT="F"; + + private static final String _0 = "0",_4 = "4",_3 = "3", _2 = "2",_1 = "1",_5 = "5",_10 = "10"; + + private static int di0, d4,d3,d2,d1,d5,d10; + + + private static final String WORD = "WORD",STWRD = "STWRD", STPOS = "STPOS"; + + + + private static int nofeat; + + + public static int maxForm; + + + /** + * Initialize the features. + * @param maxFeatures + */ + static public void initFeatures() { + + + MFB mf = new MFB(); + mf.register(POS, MID); + s_str = mf.register(POS, STR); + s_end = mf.register(POS, END); + + s_relend = mf.register(REL, END); + + _cstr= mf.register(Cluster.SPATH,STR); + _cend=mf.register(Cluster.SPATH,END); + + + mf.register(TYPE, POS); + + s_stwrd=mf.register(WORD,STWRD); + mf.register(POS,STPOS); + + la = mf.register(DIR, LA); + ra = mf.register(DIR, RA); + + // mf.register(TYPE, CHAR); + + mf.register(TYPE, FEAT); + nofeat=mf.register(FEAT, "NOFEAT"); + + for(int k=0;k<215;k++) mf.register(TYPE, "F"+k); + + + di0=mf.register(DIST, _0); + d1=mf.register(DIST, _1); + d2=mf.register(DIST, _2); + d3=mf.register(DIST, _3); + d4=mf.register(DIST, _4); + d5=mf.register(DIST, _5); + // d5l=mf.register(DIST, _5l); + d10=mf.register(DIST, _10); + + + } + + /* (non-Javadoc) + * @see extractors.Extractor#getType() + */ + @Override + public int getType() { + + return s_type; + } + + /* (non-Javadoc) + * @see extractors.Extractor#setMaxForm(int) + */ + @Override + public void setMaxForm(int max) { + maxForm = max; + } + + /* (non-Javadoc) + * @see extractors.Extractor#getMaxForm() + */ + @Override + public int getMaxForm() { + return maxForm; + } + + + +} diff --git a/dependencyParser/basic/mate-tools/src/extractors/ExtractorClusterStackedR2.java b/dependencyParser/basic/mate-tools/src/extractors/ExtractorClusterStackedR2.java new file mode 100644 index 0000000..de82f42 --- /dev/null +++ b/dependencyParser/basic/mate-tools/src/extractors/ExtractorClusterStackedR2.java @@ -0,0 +1,937 @@ +package extractors; + + +import java.util.Arrays; + +import is2.data.Cluster; +import is2.data.D4; +import is2.data.DataF; +import is2.data.Edges; +import is2.data.FV; +import is2.data.IFV; +import is2.data.Instances; +import is2.data.Long2IntInterface; +import is2.data.MFB; +import is2.util.DB; + + + +final public class ExtractorClusterStackedR2 implements Extractor { + + public static int s_rel,s_word,s_type,s_dir,s_dist,s_feat,s_child,s_spath,s_lpath,s_pos; + + MFB mf; + + final D4 d0 ,dl1,dl2, dwr,dr,dwwp,dw,dwp,dlf,d3lp, d2lp,d2pw,d2pp ; + + public final Long2IntInterface li; + + public ExtractorClusterStackedR2(Long2IntInterface li) { + + initFeatures(); + this.li=li; + d0 = new D4(li);dl1 = new D4(li);dl2 = new D4(li); + dwr = new D4(li); + dr = new D4(li); + dwwp = new D4(li); + + dw = new D4(li); + dwp = new D4(li); + + dlf = new D4(li); + d3lp = new D4(li); d2lp = new D4(li); d2pw = new D4(li); d2pp = new D4(li); + + } + + public void initStat() { + + + mf = new MFB(); + s_rel = mf.getFeatureCounter().get(REL).intValue(); + s_pos = mf.getFeatureCounter().get(POS).intValue(); + s_word = mf.getFeatureCounter().get(WORD).intValue(); + s_type = mf.getFeatureCounter().get(TYPE).intValue();//mf.getFeatureBits(); + s_dir = mf.getFeatureCounter().get(DIR); + la = mf.getValue(DIR, LA); + ra = mf.getValue(DIR, RA); + s_dist = mf.getFeatureCounter().get(DIST);//mf.getFeatureBits(DIST); + s_feat = mf.getFeatureCounter().get(FEAT);//mf.getFeatureBits(Pipe.FEAT); + s_spath = mf.getFeatureCounter().get(Cluster.SPATH)==null?0:mf.getFeatureCounter().get(Cluster.SPATH);//mf.getFeatureBits(Cluster.SPATH); + s_lpath = mf.getFeatureCounter().get(Cluster.LPATH)==null?0:mf.getFeatureCounter().get(Cluster.LPATH);//mf.getFeatureBits(Cluster.LPATH); + } + + public void init(){ + // DB.println("init"); + d0.a0 = s_type;d0.a1 = s_pos;d0.a2 = s_pos;d0.a3 = s_pos;d0.a4 = s_pos;d0.a5 = s_pos;d0.a6 = s_pos;d0.a7 = s_pos; + dl1.a0 = s_type;dl1.a1 = s_rel; dl1.a2 = s_pos;dl1.a3 = s_pos; dl1.a4 = s_pos; dl1.a5 = s_pos; dl1.a6 = s_pos; dl1.a7 = s_pos; + dl2.a0 = s_type;dl2.a1 = s_rel;dl2.a2 = s_word;dl2.a3 = s_pos;dl2.a4 = s_pos;dl2.a5 = s_pos;dl2.a6 = s_pos;dl2.a7 = s_pos; + dwp.a0 = s_type; dwp.a1 = s_rel; dwp.a2 = s_word; dwp.a3 = s_pos; dwp.a4 = s_pos; dwp.a5 = s_word; + dwwp.a0 = s_type; dwwp.a1 = s_rel; dwwp.a2 = s_word; dwwp.a3 = s_word; dwwp.a4 = s_pos; dwwp.a5 = s_word; + dlf.a0 = s_type;dlf.a1 = s_rel; dlf.a2 = s_pos;dlf.a3 = s_pos; dlf.a4 = s_feat; dlf.a5 = s_feat; dlf.a6 = s_pos; dlf.a7 = s_pos; + d3lp.a0 = s_type; d3lp.a1 = s_rel; d3lp.a2 = s_lpath; d3lp.a3 = s_lpath; d3lp.a4 = s_lpath; d3lp.a5 = s_word; d3lp.a6 = s_spath; d3lp.a7 = s_spath; + d2lp.a0 = s_type; d2lp.a1 = s_rel; d2lp.a2 = s_lpath; d2lp.a3 = s_lpath; d2lp.a4 = s_word; d2lp.a5 = s_word; //d3lp.a6 = s_spath; d3lp.a7 = s_spath; + d2pw.a0 = s_type; d2pw.a1 = s_rel; d2pw.a2 = s_lpath; d2pw.a3 = s_lpath; d2pw.a4 = s_word; d2pw.a5 = s_word; //d3lp.a6 = s_spath; d3lp.a7 = s_spath; + d2pp.a0 = s_type; d2pp.a1 = s_rel; d2pp.a2 = s_lpath; d2pp.a3 = s_lpath; d2pp.a4 = s_pos; d2pp.a5 = s_pos; //d3lp.a6 = s_spath; d3lp.a7 = s_spath; + } + + + public int basic(short[] pposs, int[] form, int p, int d, Cluster cluster, IFV f) + { + + d0.clean(); dl1.clean(); dl2.clean(); dwp.clean(); dwwp.clean(); dlf.clean(); d3lp.clean(); + + d3lp.clean(); d2lp.clean();d2pw.clean(); d2pp.clean(); + + int n=1; + int dir= (p < d)? ra:la; + // d0.v0= n; d0.v1=pposs[p]; d0.v2=pposs[d]; //d0.stop=4; + int end= (p >= d ? p : d); + int start = (p >= d ? d : p) + 1; + + StringBuilder s = new StringBuilder(end-start); + int[] x = new int[end-start]; + int c=0; + for(int i = start ; i <end ; i++) { + //d0.v3=pposs[i]; + //d0.cz4(); + //d0.csa(s_dir,dir,f); +// s.append((char)pposs[i]); + x[c++] =pposs[i]; + } + + Arrays.sort(x); + for(int i = 0;i<x.length ; i++) { + if (i==0 || x[i]!=x[i-1] ) s.append(x[i]); + } + int v = mf.register("px", s.toString()); + + dwp.v0 = n++; dwp.v1 = 1;dwp.v2 = v; dwp.v3 = pposs[p]; dwp.v4 = pposs[d]; dwp.cz5(); dwp.csa(s_dir,dir,f); + + return n; + } + + + public void firstm(Instances is, int i, + int prnt, int dpnt, int label, Cluster cluster, long[] f) + { + + + //short[] pposs, int[] form, int[] lemmas, short[][] feats + for(int k=0;k<f.length;k++) f[k]=0; + + short[] pposs = is.pposs[i]; + int[] form =is.forms[i]; + short[][] feats = is.feats[i]; + + + int pF = form[prnt],dF = form[dpnt]; + int pL = is.plemmas[i][prnt],dL = is.plemmas[i][dpnt]; + int pP = pposs[prnt],dP = pposs[dpnt]; + + int prntLS = pF==-1?-1:cluster.getLP(pF), chldLS = dF==-1?-1:cluster.getLP(dF); + + final int dir= (prnt < dpnt)? ra:la; + + if (pF>maxForm) pF=-1; + if (pL>maxForm) pL=-1; + + if (dF>maxForm) dF=-1; + if (dL>maxForm) dL=-1; + + + int n=3,c=0; + + dl2.v1=label; + dl2.v0= n++; dl2.v2=pF; dl2.v3=dP; dl2.cz4(); f[c++]=dl2.csa(s_dir,dir); + dl2.v0= n++; dl2.cz3(); f[c++]=dl2.csa(s_dir,dir); + dl2.v0= n++; dl2.v2=dF; dl2.v3=pP; dl2.cz4(); f[c++]=dl2.csa(s_dir,dir); + dl2.v0= n++; dl2.cz3(); f[c++]=dl2.csa(s_dir,dir); + + + dwwp.v1=label; + dwwp.v0= n++; dwwp.v2=pF; dwwp.v3=dF; dwwp.cz4(); f[c++]=dwwp.csa(s_dir,dir); + + dl1.v1=label; + dl1.v0= n++; dl1.v2=dP; dl1.cz3(); f[c++]=dl1.csa(s_dir,dir); + dl1.v0= n++; dl1.v2=pP; dl1.cz3(); f[c++]=dl1.csa(s_dir,dir); + dl1.v0= n++; dl1.v3=dP; dl1.cz4(); f[c++]=dl1.csa(s_dir,dir); + + int pPm1 = prnt > 0 ? pposs[prnt - 1] : s_str, dPm1 = dpnt > 0 ? pposs[dpnt - 1] : s_str; + int pPp1 = prnt < pposs.length - 1 ? pposs[prnt + 1]:s_end, dPp1 = dpnt < pposs.length - 1 ? pposs[dpnt + 1]:s_end; + + int pPm2 = prnt > 1 ? pposs[prnt - 2] : s_str, dPm2 = dpnt > 1 ? pposs[dpnt - 2] : s_str; + int pPp2 = prnt < pposs.length - 2 ? pposs[prnt + 2]:s_end, dPp2 = dpnt < pposs.length - 2 ? pposs[dpnt + 2]:s_end; + + int pFm1 = prnt > 0 ? form[prnt - 1] : s_stwrd, dFm1 = dpnt > 0 ? form[dpnt - 1] : s_stwrd; + int pFp1 = prnt < form.length - 1 ? form[prnt + 1]:s_stwrd, dFp1 = dpnt < form.length - 1 ? form[dpnt + 1]:s_stwrd; + + + + dl1.v0= n++;dl1.v2=pP; dl1.v3=pPp1; dl1.v4=dP;dl1.v5=dPp1; dl1.cz6(); f[n++]=dl1.csa(s_dir,dir); + dl1.v0= n++; dl1.v5=dPm1; dl1.cz6(); f[n++]=dl1.csa(s_dir,dir); + dl1.v0= n++; dl1.v3=pPm1; dl1.cz6(); f[n++]=dl1.csa(s_dir,dir); + dl1.v0= n++; dl1.v5=dPp1; dl1.cz6(); f[n++]=dl1.csa(s_dir,dir); + + + dl1.v0= n++; dl1.v3=pPm1; dl1.cz5(); f[n++]=dl1.csa(s_dir,dir); + dl1.v0= n++; dl1.v3=dPm1; dl1.cz5(); f[n++]=dl1.csa(s_dir,dir); + dl1.v0= n++; dl1.v3=dPp1; dl1.cz5(); f[n++]=dl1.csa(s_dir,dir); + dl1.v0= n++; dl1.v3=pPp1; dl1.cz5(); f[n++]=dl1.csa(s_dir,dir); + + dl1.v0= n++;dl1.v2=pP; dl1.v3=pPp2; dl1.v4=dP;dl1.v5=dPp2; dl1.cz6(); f[n++]=dl1.csa(s_dir,dir); + dl1.v0= n++; dl1.v5=dPm2; dl1.cz6(); f[n++]=dl1.csa(s_dir,dir); + dl1.v0= n++; dl1.v3=pPm2; dl1.cz6(); f[n++]=dl1.csa(s_dir,dir); + dl1.v0= n++; dl1.v5=dPp2; dl1.cz6(); f[n++]=dl1.csa(s_dir,dir); + + dl1.v0= n++; dl1.v3=pPm2; dl1.cz5(); f[n++]=dl1.csa(s_dir,dir); + dl1.v0= n++; dl1.v3=dPm2; dl1.cz5(); f[n++]=dl1.csa(s_dir,dir); + dl1.v0= n++; dl1.v3=dPp2; dl1.cz5(); f[n++]=dl1.csa(s_dir,dir); + dl1.v0= n++; dl1.v3=pPp2; dl1.cz5(); f[n++]=dl1.csa(s_dir,dir); + + + + dl2.v0= n++; dl2.v3=dFm1; dl2.v3=pPp1;dl2.v4=pP; dl2.cz5(); f[n++]=dl2.getVal(); + dl2.v0= n++; dl2.v3=dFp1; dl2.v3=pPm1; dl2.cz5(); f[n++]=dl2.getVal(); + dl2.v0= n++; dl2.v3=pFm1; dl2.v3=dPp1;dl2.v4=dP; dl2.cz5(); f[n++]=dl2.getVal(); + dl2.v0= n++; dl2.v3=pFp1; dl2.v3=dPm1; dl2.cz5(); f[n++]=dl2.getVal(); + + + dl2.v0= n++; dl2.v3=dFm1; dl2.v3=dPm2;dl2.v4=pP; dl2.cz5(); f[n++]=dl2.getVal(); + dl2.v0= n++; dl2.v3=dFp1; dl2.v3=dPp2; dl2.cz5(); f[n++]=dl2.getVal(); + dl2.v0= n++; dl2.v3=pFm1; dl2.v3=pPm2;dl2.v4=dP; dl2.cz5(); f[n++]=dl2.getVal(); + dl2.v0= n++; dl2.v3=pFp1; dl2.v3=pPp2; dl2.cz5(); f[n++]=dl2.getVal(); + + + dwwp.v0= n++; dwwp.v2=pF; dwwp.v3=dF; dwwp.v4=dP; dwwp.cz5(); f[n++]=dwwp.csa(s_dir,dir); + dwwp.v0= n++; dwwp.v2=pF; dwwp.v3=dF; dwwp.v4=pP; dwwp.cz5(); f[n++]=dwwp.csa(s_dir,dir); + dwwp.v0= n++; dwwp.v2=dF; dwwp.v3=pF; dwwp.v4=pP; dwwp.v4=dP; dwwp.cz6(); f[n++]=dwwp.csa(s_dir,dir); + + + + // lemmas + + dl2.v1=label; + dl2.v0= n++; dl2.v2=pL; dl2.v3=dP; dl2.cz4(); f[c++]=dl2.csa(s_dir,dir); + dl2.v0= n++; dl2.cz3(); f[c++]=dl2.csa(s_dir,dir); + dl2.v0= n++; dl2.v2=dL; dl2.v3=pP; dl2.cz4(); f[c++]=dl2.csa(s_dir,dir); + dl2.v0= n++; dl2.cz3(); f[c++]=dl2.csa(s_dir,dir); + + + dwwp.v1=label; + dwwp.v0= n++; dwwp.v2=pL; dwwp.v3=dL; dwwp.cz4(); f[c++]=dwwp.csa(s_dir,dir); + + dwp.v1= label; + dwp.v0=n++;dwp.v2=dL; dwp.v3=pP;dwp.v4=dP;dwp.v5=pL; dwp.cz6(); f[c++]=dwp.csa(s_dir,dir); + dwp.v0=n++;dwp.cz5(); f[c++]=dwp.csa(s_dir,dir); + + dwp.v0=n++;dwp.v2=pL; dwp.cz5(); f[c++]=dwp.csa(s_dir,dir); + dwwp.v0= n++; dwwp.v2=pL; dwwp.v3=dL; dwwp.v4=dP; dwwp.cz5(); f[c++]=dwwp.csa(s_dir,dir); + dwwp.v0= n++; dwwp.v4=pP; dwwp.cz5(); f[c++]=dwwp.csa(s_dir,dir); + + + // cluster + + d2pw.v1=label; + d2pw.v0=n++; d2pw.v2=prntLS; d2pw.v3=chldLS; d2pw.cz4(); f[c++]=d2pw.csa(s_dir,dir); + d2pw.v0=n++; d2pw.v4=pF; d2pw.cz5(); f[c++]=d2pw.csa(s_dir,dir); + d2pw.v0=n++; d2pw.v4=dF; d2pw.cz5(); f[c++]=d2pw.csa(s_dir,dir); + d2pw.v0=n++; d2pw.v5=pF; d2pw.cz6(); f[c++]=d2pw.csa(s_dir,dir); + + + d2pp.v1=label; + d2pp.v0=n++; d2pp.v2=prntLS; d2pp.v3=chldLS; d2pp.cz4(); f[c++]=d2pp.csa(s_dir,dir); + d2pp.v0=n++; d2pp.v4=pP; d2pp.cz5(); f[c++]=d2pp.csa(s_dir,dir); + d2pp.v0=n++; d2pp.v4=dP; d2pp.cz5(); f[c++]=d2pp.csa(s_dir,dir); + d2pp.v0=n++; d2pp.v5=pP; d2pp.cz6(); f[c++]=d2pp.csa(s_dir,dir); + + + short[] prel = is.plabels[i]; + short[] phead = is.pheads[i]; + + + //take those in for stacking + // dl2.v1=label; + // dl2.v0= n++;dl2.v2=prel[dpnt];dl2.v3=pP;dl2.v4=dP; dl2.v5=prnt==phead[dpnt]?1:2; dl2.cz6(); f[c++]=dl2.csa(s_dir,dir); + // dl2.v0= n++;dl2.v2=pP;dl2.v3=dP; dl2.v4=prnt==phead[dpnt]?1:2; dl2.cz5(); f[c++]=dl2.csa(s_dir,dir); + + + + if (feats==null) return; + + short[] featsP =feats[prnt], featsD =feats[dpnt]; + dlf.v0= n++; dlf.v1=label; dlf.v2=pP; dlf.v3=dP; + extractFeat(f, c, dir, featsP, featsD); + + return; + } + + + + public void gcm(Instances is , int i, int p, int d, int gc, int label,Cluster cluster, long[] f) { + + for(int k=0;k<f.length;k++) f[k]=0; + + short[] pos= is.pposs[i]; + int[] forms=is.forms[i]; + int[] lemmas=is.plemmas[i]; + short[][] feats=is.feats[i]; + + int pP = pos[p], dP = pos[d]; + int prntF = forms[p], chldF = forms[d]; + int prntL = lemmas[p], chldL = lemmas[d]; + int prntLS = prntF==-1?-1:cluster.getLP(prntF), chldLS = chldF==-1?-1:cluster.getLP(chldF); + + int gP = gc != -1 ? pos[gc] : s_str; + int gcF = gc != -1 ? forms[gc] : s_stwrd; + int gcL = gc != -1 ? lemmas[gc] : s_stwrd; + int gcLS = (gc != -1) && (gcF!=-1) ? cluster.getLP(gcF) : s_stwrd; + + if (prntF>maxForm) prntF=-1; + if (prntL>maxForm) prntL=-1; + + if (chldF>maxForm) chldF=-1; + if (chldL>maxForm) chldL=-1; + + if (gcF>maxForm) gcF=-1; + if (gcL>maxForm) gcL=-1; + + + int dir= (p < d)? ra:la, dir_gra =(d < gc)? ra:la; + + int n=84,c=0; + + //dl1.v023(); + dl1.v1=label; + dl1.v0= n++; dl1.v2=pP; dl1.v3=dP;dl1.v4=gP; dl1.cz5(); dl1.cs(s_dir,dir);f[c++]=dl1.csa(s_dir,dir_gra); + dl1.v0= n++; dl1.v2=pP; dl1.v3=gP; dl1.cz4();dl1.cs(s_dir,dir);f[c++]=dl1.csa(s_dir,dir_gra); + dl1.v0= n++; dl1.v2=dP; dl1.cz4(); dl1.cs(s_dir,dir);f[c++]=dl1.csa(s_dir,dir_gra); + + dwwp.v1=label; + dwwp.v0= n++; dwwp.v2=prntF; dwwp.v3=gcF; + dwwp.cz4(); dwwp.cs(s_dir,dir);f[c++]=dwwp.csa(s_dir,dir_gra); + + dwwp.v0= n++; dwwp.v2=chldF; dwwp.v3=gcF; + dwwp.cz4(); dwwp.cs(s_dir,dir);f[c++]=dwwp.csa(s_dir,dir_gra); + + dwp.v1=label; + dwp.v0= n++; dwp.v2=gcF; dwp.v3=pP; + dwp.cz4(); dwp.cs(s_dir,dir);f[c++]=dwp.csa(s_dir,dir_gra); + + dwp.v0= n++; dwp.v2=gcF; dwp.v3=dP; + dwp.cz4(); dwp.cs(s_dir,dir);f[c++]=dwp.csa(s_dir,dir_gra); + + dwp.v0= n++; dwp.v2=prntF; dwp.v3=gP; + dwp.cz4(); dwp.cs(s_dir,dir);f[c++]=dwp.csa(s_dir,dir_gra); + + dwp.v0= n++; dwp.v2=chldF; dwp.v3=gP; + dwp.cz4(); dwp.cs(s_dir,dir); f[c++]=dwp.csa(s_dir,dir_gra); + + + // lemma + + dwwp.v0= n++; dwwp.v2=prntL; dwwp.v3=gcL; + dwwp.cz4();dwwp.cs(s_dir,dir);f[c++]=dwwp.csa(s_dir,dir_gra); + + dwwp.v0= n++; dwwp.v2=chldL; dwwp.v3=gcL; + dwwp.cz4(); dwwp.cs(s_dir,dir);f[c++]=dwwp.csa(s_dir,dir_gra); + + dwp.v0= n++; dwp.v2=gcL; dwp.v3=pP; + dwp.cz4(); dwp.cs(s_dir,dir);f[c++]=dwp.csa(s_dir,dir_gra); + + dwp.v0= n++; dwp.v2=gcL; dwp.v3=dP; + dwp.cz4(); dwp.cs(s_dir,dir);f[c++]=dwp.csa(s_dir,dir_gra); + + dwp.v0= n++; dwp.v2=prntL; dwp.v3=gP; + dwp.cz4(); dwp.cs(s_dir,dir);f[c++]=dwp.csa(s_dir,dir_gra); + + dwp.v0= n++; dwp.v2=chldL; dwp.v3=gP; + dwp.cz4(); dwp.cs(s_dir,dir); f[c++]=dwp.csa(s_dir,dir_gra); + + + // clusters + + d2lp.v1= label; + d2lp.v0= n++; d2lp.v2=prntLS; d2lp.v3=gcLS; d2lp.cz4(); d2lp.cs(s_dir,dir);f[c++]=d2lp.csa(s_dir,dir_gra);// f.add(li.l2i(l)); + d2lp.v0= n++; d2lp.v2=chldLS; d2lp.v3=gcLS; d2lp.cz4(); d2lp.cs(s_dir,dir);f[c++]=d2lp.csa(s_dir,dir_gra); + d3lp.v0= n++; d3lp.v1= label; d3lp.v2=prntLS; d3lp.v3=chldLS; d3lp.v4=gcLS; d3lp.cz5(); d3lp.cs(s_dir,dir);f[c++]=d3lp.csa(s_dir,dir_gra); + + //_f83; + d2lp.v0= n++; d2lp.v2=prntLS; d2lp.v3=chldLS; d2lp.v4=gcF; d2lp.cz5(); f[c++]=d2lp.csa(s_dir,dir); + d2lp.v0= n++; d2lp.v2=prntLS; d2lp.v3=gcLS; d2lp.v4=chldF; d2lp.cz5(); f[c++]=d2lp.csa(s_dir,dir); + d2lp.v0= n++; d2lp.v2=chldLS; d2lp.v3=gcLS; d2lp.v4=prntF; d2lp.cz5(); f[c++]=d2lp.csa(s_dir,dir); + + d2pp.v1= label; + d2pp.v0= n++; d2pp.v2=prntLS; d2pp.v3=chldLS; d2pp.v4=gP; d2pp.cz5(); f[c++]=d2pp.csa(s_dir,dir); + d2pp.v0= n++; d2pp.v2=prntLS; d2pp.v3=gcLS; d2pp.v4=dP; d2pp.cz5(); f[c++]=d2pp.csa(s_dir,dir); + d2pp.v0= n++; d2pp.v2=chldLS; d2pp.v3=gcLS; d2pp.v4=pP; d2pp.cz5(); f[c++]=d2pp.csa(s_dir,dir); + + + + // linear features + + int prntPm1 = p != 0 ? pos[p - 1] : s_str; // parent-pos-minus1 + int chldPm1 = d - 1 >=0 ? pos[d - 1] : s_str; // child-pos-minus1 + int prntPp1 = p != pos.length - 1 ? pos[p + 1] : s_end; + int chldPp1 = d != pos.length - 1 ? pos[d + 1] : s_end; + + int gcPm1 = gc > 0 ? pos[gc - 1] : s_str; + int gcPp1 = gc < pos.length - 1 ? pos[gc + 1] : s_end; + + dl1.v0= n++; dl1.v2=gP; dl1.v3=gcPp1;dl1.v4=dP; dl1.cz5(); f[c++]=dl1.csa(s_dir,dir); + dl1.v0= n++; dl1.v2=gP; dl1.v3=gcPm1;dl1.v4=dP; dl1.cz5(); f[c++]=dl1.csa(s_dir,dir); + dl1.v0= n++; dl1.v2=gP; dl1.v3=dP;dl1.v4=chldPp1; dl1.cz5(); f[c++]=dl1.csa(s_dir,dir); + dl1.v0= n++; dl1.v2=gP; dl1.v3=dP;dl1.v4=chldPm1; dl1.cz5(); f[c++]=dl1.csa(s_dir,dir); + dl1.v0= n++; dl1.v2=gP; dl1.v3=gcPp1;dl1.v4=chldPm1;dl1.v5=dP;dl1.cz6(); f[c++]=dl1.csa(s_dir,dir); + dl1.v0= n++; dl1.v2=gcPm1; dl1.v3=gP;dl1.v4=chldPm1;dl1.v5=dP; dl1.cz6();f[c++]=dl1.csa(s_dir,dir); + dl1.v0= n++; dl1.v2=gP; dl1.v3=gcPp1;dl1.v4=dP;dl1.v5=chldPp1; dl1.cz6();f[c++]=dl1.csa(s_dir,dir); + dl1.v0= n++; dl1.v2=gcPm1; dl1.v3=gP;dl1.v4=dP;dl1.cz6(); f[c++]=dl1.csa(s_dir,dir); + dl1.v0= n++; dl1.v2=gP; dl1.v3=gcPp1;dl1.v4=pP; dl1.cz5(); f[c++]=dl1.csa(s_dir,dir); + dl1.v0= n++; dl1.v2=gP; dl1.v3=gcPm1;dl1.v4=pP; dl1.cz5(); f[c++]=dl1.csa(s_dir,dir); + dl1.v0= n++; dl1.v2=gP; dl1.v3=pP;dl1.v4=prntPp1; dl1.cz5(); f[c++]=dl1.csa(s_dir,dir); + dl1.v0= n++; dl1.v2=gP; dl1.v3=pP;dl1.v4=prntPm1; dl1.cz5(); f[c++]=dl1.csa(s_dir,dir); + dl1.v0= n++; dl1.v2=gP; dl1.v3=gcPp1;dl1.v4=prntPm1;dl1.v5=pP; dl1.cz6(); f[c++]=dl1.csa(s_dir,dir); + dl1.v0= n++; dl1.v2=gcPm1; dl1.v3=gP;dl1.v4=prntPm1;dl1.v5=pP; dl1.cz6(); f[c++]=dl1.csa(s_dir,dir); + dl1.v0= n++; dl1.v2=gP; dl1.v3=gcPp1;dl1.v4=pP;dl1.v5=prntPp1; dl1.cz6(); f[c++]=dl1.csa(s_dir,dir); + dl1.v0= n++; dl1.v2=gcPm1; dl1.v3=gP; dl1.v4=pP; dl1.v5=prntPp1;dl1.cz6(); f[c++]=dl1.csa(s_dir,dir); + + + int pLSp1 = p != pos.length - 1 ? forms[p + 1]==-1?-1:cluster.getLP(forms[p + 1]): _cend; + int cLSp1 = d != pos.length - 1 ? forms[d + 1] ==-1?-1:cluster.getLP(forms[d + 1]):_cend; + int gcLSp1 = gc < pos.length -1 ? forms[gc + 1] ==-1?-1:cluster.getLP(forms[gc + 1]) : s_end; + + int pLSm1 = p != 0 ? lemmas[p - 1]==-1?-1:cluster.getLP(lemmas[p - 1]): _cstr; + int cLSm1 = d - 1 >=0 ? lemmas[d - 1] ==-1?-1:cluster.getLP(lemmas[d - 1]):_cstr; + int gcLSm1 = gc > 0 ? lemmas[gc - 1] ==-1?-1:cluster.getLP(lemmas[gc - 1]) : _cstr; + + + dl1.v0= n++; dl1.v2=gP; dl1.v3=gcLSp1;dl1.v4=dP; dl1.cz5(); f[c++]=dl1.csa(s_dir,dir); + dl1.v0= n++; dl1.v2=gP; dl1.v3=gcLSm1;dl1.v4=dP; dl1.cz5();f[c++]=dl1.csa(s_dir,dir); + dl1.v0= n++; dl1.v2=gP; dl1.v3=dP;dl1.v4=cLSp1; dl1.cz5(); f[c++]=dl1.csa(s_dir,dir); + dl1.v0= n++; dl1.v2=gP; dl1.v3=dP;dl1.v4=cLSm1; dl1.cz5(); f[c++]=dl1.csa(s_dir,dir); + dl1.v0= n++; dl1.v2=gP; dl1.v3=gcLSp1;dl1.v4=cLSm1;dl1.v5=dP;dl1.cz6(); f[c++]=dl1.csa(s_dir,dir); + dl1.v0= n++; dl1.v2=gcLSm1; dl1.v3=gP;dl1.v4=cLSm1;dl1.v5=dP; dl1.cz6();f[c++]=dl1.csa(s_dir,dir); + dl1.v0= n++; dl1.v2=gP; dl1.v3=gcLSp1;dl1.v4=dP;dl1.v5=cLSp1; dl1.cz6(); f[c++]=dl1.csa(s_dir,dir); + dl1.v0= n++; dl1.v2=cLSm1; dl1.v3=gP;dl1.v4=dP;dl1.cz6(); f[c++]=dl1.csa(s_dir,dir); + dl1.v0= n++; dl1.v2=gP; dl1.v3=gcLSp1;dl1.v4=pP; dl1.cz5(); f[c++]=dl1.csa(s_dir,dir); + dl1.v0= n++; dl1.v2=gP; dl1.v3=gcLSm1;dl1.v4=pP; dl1.cz5(); f[c++]=dl1.csa(s_dir,dir); + dl1.v0= n++; dl1.v2=gP; dl1.v3=pP;dl1.v4=pLSp1; dl1.cz5(); f[c++]=dl1.csa(s_dir,dir); + dl1.v0= n++; dl1.v2=gP; dl1.v3=pP;dl1.v4=pLSm1; dl1.cz5(); f[c++]=dl1.csa(s_dir,dir); + dl1.v0= n++; dl1.v2=gP; dl1.v3=gcLSp1;dl1.v4=pLSm1;dl1.v5=pP; dl1.cz6(); f[c++]=dl1.csa(s_dir,dir); + dl1.v0= n++; dl1.v2=gcLSm1; dl1.v3=gP;dl1.v4=pLSm1;dl1.v5=pP; dl1.cz6(); f[c++]=dl1.csa(s_dir,dir); + dl1.v0= n++; dl1.v2=gP; dl1.v3=gcLSp1;dl1.v4=pP;dl1.v5=pLSp1; dl1.cz6(); f[c++]=dl1.csa(s_dir,dir); + dl1.v0= n++; dl1.v2=gcLSm1; dl1.v3=gP; dl1.v4=pP; dl1.v5=pLSp1;dl1.cz6(); f[c++]=dl1.csa(s_dir,dir); + + + + short[] prel = is.plabels[i],phead=is.pheads[i]; + + int g = p==phead[d]?1:2 ; + if (gc>=0) g += d==phead[gc]?4:8; + + int gr = gc==-1?s_relend:prel[gc]; + + // take those in for stacking + /* + dl2.v1=label; + dl2.v0= n++;dl2.v2=prel[d];dl2.v3=g;dl2.v4=gP;dl2.v5=dP;dl2.cz6();f[c++]=dl2.csa(s_dir,dir); + dl2.v0= n++;dl2.v2=prel[d];dl2.v3=g;dl2.v4=gP;dl2.v5=pP;dl2.cz6();f[c++]=dl2.csa(s_dir,dir); + dl2.v0= n++;dl2.v2=prel[d];dl2.v3=g;dl2.v4=gP;dl2.v5=pP;dl2.v6=dP;dl2.cz7();f[c++]=dl2.csa(s_dir,dir); + + dl2.v0= n++;dl2.v2=gr;dl2.v3=g;dl2.v4=gP;dl2.v5=dP;dl2.cz6();f[c++]=dl2.csa(s_dir,dir); + dl2.v0= n++;dl2.v2=gr;dl2.v3=g;dl2.v4=gP;dl2.v5=pP;dl2.cz6();f[c++]=dl2.csa(s_dir,dir); + dl2.v0= n++;dl2.v2=gr;dl2.v3=g;dl2.v4=gP;dl2.v5=pP;dl2.v6=dP;dl2.cz7();f[c++]=dl2.csa(s_dir,dir); + +*/ + if (feats==null) return; + + short[] featsP =feats[d]; + short[] featsD =gc!=-1?feats[gc]:null; + + dlf.v0= n++; dlf.v1=label; dlf.v2=gP; dlf.v3=dP; + extractFeat(f, c, dir, featsP, featsD); + return; + } + + + public void siblingm(Instances is , int i,short pos[], int forms[], int[] lemmas, short[][] feats, int prnt, int d, int sblng, int label, Cluster cluster, long[] f, int v) + { + + for(int k=0;k<f.length;k++) f[k]=0; + + int pP = pos[prnt], dP = pos[d]; + int prntF = forms[prnt],chldF = forms[d]; + int prntL = lemmas[prnt], chldL = lemmas[d]; + int prntLS = prntF==-1?-1:cluster.getLP(prntF), chldLS = chldF==-1?-1:cluster.getLP(chldF); + + int sP = sblng!=-1 ? pos[sblng] : s_str, sblF = sblng!=-1 ? forms[sblng] : s_stwrd, sblL = sblng!=-1 ? lemmas[sblng] : s_stwrd; + + int sblLS = (sblng != -1)&&(sblF!=-1) ? cluster.getLP(sblF) : s_stwrd; + + + int dir= (prnt < d)? ra:la; + + int abs = Math.abs(prnt-d); + + final int dist; + if (abs > 10)dist=d10;else if (abs>5) dist=d5;else if( abs==5)dist=d4;else if (abs==4)dist=d3;else if (abs==3)dist=d2; + else if (abs==2)dist=d1; else dist=di0; + + int n=147; + + if (prntF>maxForm) prntF=-1; + if (prntL>maxForm) prntL=-1; + + if (chldF>maxForm) chldF=-1; + if (chldL>maxForm) chldL=-1; + + if (sblF>maxForm) sblF=-1; + if (sblL>maxForm) sblL=-1; + + + dl1.v0= n++; dl1.v1=label;dl1.v2=pP; dl1.v3=dP;dl1.v4=sP; dl1.cz5(); f[0]=dl1.csa(s_dir,dir);f[1]=dl1.csa(s_dist,dist); + dl1.v0= n++; dl1.v3=sP; dl1.cz4(); f[2]=dl1.csa(s_dir,dir); f[3]=dl1.csa(s_dist,dist); + dl1.v0= n++; dl1.v2=dP;dl1.cz4(); f[4]=dl1.csa(s_dir,dir); f[5]=dl1.csa(s_dist,dist); + + // sibling only could be tried + dwwp.v1=label; + dwwp.v0= n++; dwwp.v2=prntF; dwwp.v3=sblF; dwwp.cz4(); f[6]=dwwp.csa(s_dir,dir); f[7]=dwwp.csa(s_dist,dist); + dwwp.v0= n++; dwwp.v2=chldF; dwwp.cz4(); f[8]=dwwp.csa(s_dir,dir); f[9]=dwwp.csa(s_dist,dist); + dwp.v0= n++; dwp.v1=label; dwp.v2=sblF; dwp.v3=pP; dwp.cz4(); f[10]=dwp.csa(s_dir,dir); f[11]=dwp.csa(s_dist,dist); + dwp.v0= n++; /*dwp.v1=label; */dwp.v3=dP; dwp.cz4(); f[12]=dwp.csa(s_dir,dir); f[13]=dwp.csa(s_dist,dist); + dwp.v0= n++; /*dwp.v1=label;*/ dwp.v2=prntF; dwp.v3=sP; dwp.cz4(); f[14]=dwp.csa(s_dir,dir); f[15]=dwp.csa(s_dist,dist); + dwp.v0= n++; /*dwp.v1=label;*/ dwp.v2=chldF; dwp.cz4(); f[16]=dwp.csa(s_dir,dir); f[17]=dwp.csa(s_dist,dist); + + //lemmas + dwwp.v0= n++; dwwp.v2=prntL; dwwp.v3=sblL; dwwp.cz4(); f[18]=dwwp.csa(s_dir,dir); + dwwp.v0= n++; dwwp.v2=chldL; dwwp.cz4(); f[19]=dwwp.csa(s_dir,dir); f[20]=dwwp.csa(s_dist,dist); + dwp.v0= n++; /*dwp.v1=label;*/ dwp.v2=sblL; dwp.v3=pP; dwp.cz4(); f[21]=dwp.csa(s_dir,dir); f[22]=dwp.csa(s_dist,dist); + dwp.v0= n++; /*dwp.v1=label; */ dwp.v3=dP; dwp.cz4(); f[23]=dwp.csa(s_dir,dir);f[24]=dwp.csa(s_dist,dist); + dwp.v0= n++; /*dwp.v1=label;*/ dwp.v2=prntL; dwp.v3=sP; dwp.cz4(); f[25]=dwp.csa(s_dir,dir); f[26]=dwp.csa(s_dist,dist); + dwp.v0= n++; /*dwp.v1=label;*/ dwp.v2=chldL; dwp.cz4(); f[27]=dwp.csa(s_dir,dir);f[28]=dwp.csa(s_dist,dist); + + + // clusters + + d2lp.v1=label; + d2lp.v0= n++; d2lp.v2=prntLS; d2lp.v3=sblLS; d2lp.cz4(); f[29]=d2lp.csa(s_dir,dir); + d2lp.v0= n++; d2lp.v2=chldLS; d2lp.v3=sblLS; d2lp.cz4(); f[30]=d2lp.csa(s_dir,dir); f[31]=d2lp.csa(s_dist,dist); + + d3lp.v1= label; + d3lp.v0= n++; d3lp.v2=prntLS; d3lp.v3=chldLS; d3lp.v4=sblLS;d3lp.cz5(); f[32]=d3lp.csa(s_dir,dir); + + d2lp.v0= n++; d2lp.v2=prntLS; d2lp.v3=chldLS; d2lp.v4=sblF; d2lp.cz5(); f[33]=d2lp.csa(s_dir,dir); f[34]=d2lp.csa(s_dist,dist); + d2lp.v0= n++; d2lp.v2=prntLS; d2lp.v3=sblLS; d2lp.v4=chldF; d2lp.cz5(); f[35]=d2lp.csa(s_dir,dir); f[36]=d2lp.csa(s_dist,dist); + d2lp.v0= n++; d2lp.v2=chldLS; d2lp.v3=sblLS; d2lp.v4=prntF; d2lp.cz5(); f[37]=d2lp.csa(s_dir,dir); f[38]=d2lp.csa(s_dist,dist); + + d2pp.v1=label; + d2pp.v0= n++; d2pp.v2=prntLS; d2pp.v3=chldLS; d2pp.v4=sP; d2pp.cz5(); f[39]=d2pp.csa(s_dir,dir); f[40]=d2pp.csa(s_dist,dist); + d2pp.v0= n++; d2pp.v2=prntLS; d2pp.v3=sblLS; d2pp.v4=dP; d2pp.cz5(); f[41]=d2pp.csa(s_dir,dir); f[42]=d2pp.csa(s_dist,dist); + d2pp.v0= n++; d2pp.v2=chldLS; d2pp.v3=sblLS; d2pp.v4=pP; d2pp.cz5(); f[43]=d2pp.csa(s_dir,dir); f[44]=d2pp.csa(s_dist,dist); + + + int prntPm1 = prnt!=0 ? pos[prnt-1] : s_str; + int chldPm1 = d-1>=0 ? pos[d-1] : s_str; + int prntPp1 = prnt!=pos.length-1 ? pos[prnt+1] : s_end; + int chldPp1 = d!=pos.length-1 ? pos[d+1] : s_end; + + // sibling part of speech minus and plus 1 + int sblPm1 = sblng>0 ? pos[sblng-1]:s_str; + int sblPp1 = sblng<pos.length-1 ? pos[sblng + 1]:s_end; + + dl1.v0=n++; dl1.v2=sP; dl1.v3=sblPp1;dl1.v4=pP; dl1.cz5(); f[45]=dl1.csa(s_dir,dir); + dl1.v0=n++; dl1.v2=sP; dl1.v3=sblPm1;dl1.v4=pP; dl1.cz5(); f[46]=dl1.csa(s_dir,dir);// f.add(li.l2i(l)); + dl1.v0=n++; dl1.v2=sP; dl1.v3=pP;dl1.v4=prntPp1;dl1.cz5(); f[47]=dl1.csa(s_dir,dir);// f.add(li.l2i(l)); + dl1.v0=n++; dl1.v2=sP; dl1.v3=pP;dl1.v4=prntPm1; dl1.cz5(); f[48]=dl1.csa(s_dir,dir);// f.add(li.l2i(l)); + dl1.v0=n++; dl1.v2=sP; dl1.v3=sblPp1;dl1.v4=prntPm1;dl1.v5=pP; dl1.cz6(); f[49]=dl1.csa(s_dir,dir); + dl1.v0=n++; dl1.v2=sblPm1; dl1.v3=sP;dl1.v4=prntPm1;dl1.v5=pP;dl1.cz6(); f[50]=dl1.csa(s_dir,dir);// f.add(li.l2i(l)); + dl1.v0=n++; dl1.v2=sP; dl1.v3=sblPp1;dl1.v4=pP;dl1.v5=prntPp1; dl1.cz6(); f[51]=dl1.csa(s_dir,dir);// f.add(li.l2i(l)); + dl1.v0=n++; dl1.v2=sblPm1; dl1.v3=sP; dl1.v4=pP;dl1.v5=prntPp1; dl1.cz6(); f[52]=dl1.csa(s_dir,dir);// f.add(li.l2i(l)); + dl1.v0=n++; dl1.v2=sP; dl1.v3=sblPp1;dl1.v4=dP; dl1.cz5(); f[53]=dl1.csa(s_dir,dir); + dl1.v0=n++; dl1.v2=sP; dl1.v3=sblPm1;dl1.v4=dP; dl1.cz5(); f[54]=dl1.csa(s_dir,dir); + dl1.v0=n++; dl1.v2=sP; dl1.v3=dP;dl1.v4=chldPp1;dl1.cz5(); f[55]=dl1.csa(s_dir,dir); + dl1.v0=n++; dl1.v2=sP; dl1.v3=dP;dl1.v4=chldPm1; dl1.cz5(); f[56]=dl1.csa(s_dir,dir); + dl1.v0=n++; dl1.v2=sP; dl1.v3=sblPp1;dl1.v4=chldPm1;dl1.v5=dP; dl1.cz6(); f[57]=dl1.csa(s_dir,dir);// f.add(li.l2i(l)); + dl1.v0=n++; dl1.v2=sblPm1; dl1.v3=sP;dl1.v4=chldPm1;dl1.v5=dP;dl1.cz6(); f[58]=dl1.csa(s_dir,dir); + dl1.v0= n++;dl1.v2=sP; dl1.v3=sblPp1;dl1.v4=dP;dl1.v5=chldPp1;dl1.cz6();f[59]=dl1.csa(s_dir,dir);// f.add(li.l2i(l)); + dl1.v0= n++; dl1.v2=sblPm1; dl1.v3=sP;dl1.v4=dP;dl1.v5=chldPp1;dl1.cz6(); f[60]=dl1.csa(s_dir,dir); + + int c=61; + + int pLSp1 = prnt != pos.length - 1 ? forms[prnt + 1]==-1?-1:cluster.getLP(forms[prnt + 1]): _cend; + int cLSp1 = d != pos.length - 1 ? forms[d + 1] ==-1?-1:cluster.getLP(forms[d + 1]):_cend; + int sLSp1 = sblng < pos.length -1 ? forms[sblng + 1] ==-1?-1:cluster.getLP(forms[sblng + 1]) : _cend; + + int pLSm1 = prnt!=0 ? forms[prnt - 1]==-1?-1:cluster.getLP(forms[prnt - 1]): _cstr; + int cLSm1 = d-1>=0 ? forms[d - 1] ==-1?-1:cluster.getLP(forms[d - 1]):_cstr; + int sLSm1 = sblng>0 ? forms[sblng - 1] ==-1?-1:cluster.getLP(forms[sblng - 1]):_cstr; + + //int c=61; + + dl1.v0=n++; dl1.v2=sP; dl1.v3=sLSp1;dl1.v4=pP; dl1.cz5(); f[c++]=dl1.csa(s_dir,dir); + dl1.v0=n++; dl1.v2=sP; dl1.v3=sLSm1;dl1.v4=pP; dl1.cz5(); f[c++]=dl1.csa(s_dir,dir); + dl1.v0=n++; dl1.v2=sP; dl1.v3=pP;dl1.v4=pLSp1;dl1.cz5(); f[c++]=dl1.csa(s_dir,dir); + dl1.v0=n++; dl1.v2=sP; dl1.v3=pP;dl1.v4=pLSm1; dl1.cz5(); f[c++]=dl1.csa(s_dir,dir); + dl1.v0=n++; dl1.v2=sP; dl1.v3=sLSp1;dl1.v4=pLSm1;dl1.v5=pP; dl1.cz6(); f[c++]=dl1.csa(s_dir,dir); + dl1.v0=n++; dl1.v2=sLSm1; dl1.v3=sP;dl1.v4=pLSm1;dl1.v5=pP; dl1.cz6(); f[c++]=dl1.csa(s_dir,dir); + dl1.v0=n++; dl1.v2=sP; dl1.v3=sLSp1;dl1.v4=pP;dl1.v5=pLSp1; dl1.cz6(); f[c++]=dl1.csa(s_dir,dir); + dl1.v0=n++; dl1.v2=sLSm1; dl1.v3=sP; dl1.v4=pP;dl1.v5=pLSp1; dl1.cz6(); f[c++]=dl1.csa(s_dir,dir); + dl1.v0=n++; dl1.v2=sP; dl1.v3=sLSp1;dl1.v4=dP; dl1.cz5(); f[c++]=dl1.csa(s_dir,dir); + dl1.v0=n++; dl1.v2=sP; dl1.v3=sLSm1;dl1.v4=dP; dl1.cz5(); f[c++]=dl1.csa(s_dir,dir); + dl1.v0=n++; dl1.v2=sP; dl1.v3=dP;dl1.v4=cLSp1; dl1.cz5(); f[c++]=dl1.csa(s_dir,dir); + dl1.v0=n++;dl1.v2=sP; dl1.v3=dP;dl1.v4=cLSm1; dl1.cz5(); f[c++]=dl1.csa(s_dir,dir); + dl1.v0=n++; dl1.v2=sP; dl1.v3=sLSm1;dl1.v4=cLSm1;dl1.v5=dP; dl1.cz6(); f[c++]=dl1.csa(s_dir,dir); + dl1.v0=n++; dl1.v2=sLSm1; dl1.v3=sP;dl1.v4=cLSm1;dl1.v5=dP;dl1.cz6(); f[c++]=dl1.csa(s_dir,dir); + dl1.v0=n++;dl1.v2=sP; dl1.v3=sLSp1;dl1.v4=dP;dl1.v5=cLSp1;dl1.cz6();f[c++]=dl1.csa(s_dir,dir); + dl1.v0=n++; dl1.v2=sLSm1; dl1.v3=sP;dl1.v4=dP;dl1.v5=cLSp1; dl1.cz6(); f[c++]=dl1.csa(s_dir,dir); + + + + dl1.v0=n++; dl1.v2=sP; dl1.v3=sLSp1;dl1.v4=pP; dl1.cz5(); f[c++]=dl1.csa(s_dir,dir); + dl1.v0=n++; dl1.v2=sP; dl1.v3=sLSm1;dl1.v4=pP; dl1.cz5(); f[c++]=dl1.csa(s_dir,dir); + dl1.v0=n++; dl1.v2=sP; dl1.v3=pP;dl1.v4=pLSp1;dl1.cz5(); f[c++]=dl1.csa(s_dir,dir); + dl1.v0=n++; dl1.v2=sP; dl1.v3=pP;dl1.v4=pLSm1; dl1.cz5(); f[c++]=dl1.csa(s_dir,dir); + dl1.v0=n++; dl1.v2=sP; dl1.v3=sLSp1;dl1.v4=pLSm1;dl1.v5=pP; dl1.cz6(); f[c++]=dl1.csa(s_dir,dir); + dl1.v0=n++; dl1.v2=sLSm1; dl1.v3=sP;dl1.v4=pLSm1;dl1.v5=pP; dl1.cz6(); f[c++]=dl1.csa(s_dir,dir); + dl1.v0=n++; dl1.v2=sP; dl1.v3=sLSp1;dl1.v4=pP;dl1.v5=pLSp1; dl1.cz6(); f[c++]=dl1.csa(s_dir,dir); + dl1.v0=n++; dl1.v2=sLSm1; dl1.v3=sP; dl1.v4=pP;dl1.v5=pLSp1; dl1.cz6(); f[c++]=dl1.csa(s_dir,dir); + dl1.v0=n++; dl1.v2=sP; dl1.v3=sLSp1;dl1.v4=dP; dl1.cz5(); f[c++]=dl1.csa(s_dir,dir); + dl1.v0=n++; dl1.v2=sP; dl1.v3=sLSm1;dl1.v4=dP; dl1.cz5(); f[c++]=dl1.csa(s_dir,dir); + dl1.v0=n++; dl1.v2=sP; dl1.v3=dP;dl1.v4=cLSp1; dl1.cz5(); f[c++]=dl1.csa(s_dir,dir); + dl1.v0=n++;dl1.v2=sP; dl1.v3=dP;dl1.v4=cLSm1; dl1.cz5(); f[c++]=dl1.csa(s_dir,dir); + dl1.v0=n++; dl1.v2=sP; dl1.v3=sLSm1;dl1.v4=cLSm1;dl1.v5=dP; dl1.cz6(); f[c++]=dl1.csa(s_dir,dir); + dl1.v0=n++; dl1.v2=sLSm1; dl1.v3=sP;dl1.v4=cLSm1;dl1.v5=dP;dl1.cz6(); f[c++]=dl1.csa(s_dir,dir); + dl1.v0= n++;dl1.v2=sP; dl1.v3=sLSp1;dl1.v4=dP;dl1.v5=cLSp1;dl1.cz6();f[c++]=dl1.csa(s_dir,dir); + dl1.v0= n++; dl1.v2=sLSm1; dl1.v3=sP;dl1.v4=dP;dl1.v5=cLSp1; dl1.cz6(); f[c++]=dl1.csa(s_dir,dir); + + // take those in for stacking + + /* + short[] prel = is.plabels[i],phead=is.pheads[i]; + + int g = prnt==phead[d]?1:2 ; + if (sblng>=0) g += prnt==phead[sblng]?4:8; + + int gr = sblng==-1?s_relend:prel[sblng]; + + + dl2.v0= n++;dl2.v2=prel[d];dl2.v3=g;dl2.v4=sP;dl2.v5=dP;dl2.cz6();f[c++]=dl2.csa(s_dir,dir); + dl2.v0= n++;dl2.v2=prel[d];dl2.v3=g;dl2.v4=sP;dl2.v5=pP;dl2.cz6();f[c++]=dl2.csa(s_dir,dir); + dl2.v0= n++;dl2.v2=prel[d];dl2.v3=g;dl2.v4=sP;dl2.v5=pP;dl2.v6=dP;dl2.cz7();f[c++]=dl2.csa(s_dir,dir); + + dl2.v0= n++;dl2.v2=gr;dl2.v3=g;dl2.v4=sP;dl2.v5=dP;dl2.cz6();f[c++]=dl2.csa(s_dir,dir); + dl2.v0= n++;dl2.v2=gr;dl2.v3=g;dl2.v4=sP;dl2.v5=pP;dl2.cz6();f[c++]=dl2.csa(s_dir,dir); + dl2.v0= n++;dl2.v2=gr;dl2.v3=g;dl2.v4=sP;dl2.v5=pP;dl2.v6=dP;dl2.cz7();f[c++]=dl2.csa(s_dir,dir); +*/ + + if (feats==null) return; + + int cnt=c; + + short[] featsP =feats[d]; + short[] featsSbl =sblng!=-1?feats[sblng]:null; + + dlf.v0= n++; dlf.v1=label; dlf.v2=sP; dlf.v3=dP; + + + cnt = extractFeat(f, cnt ,dir, featsP, featsSbl); + + featsP =feats[prnt]; + featsSbl =sblng!=-1?feats[sblng]:null; + + dlf.v0= n++; dlf.v1=label; dlf.v2=pP; dlf.v3=sP; + if (featsP!=null && featsSbl!=null) { + for(short i1=0;i1<featsP.length;i1++) { + for(short i2=0;i2<featsSbl.length;i2++) { + dlf.v4=featsP[i1]; dlf.v5=featsSbl[i2]; + dlf.cz6(); f[cnt++]=dlf.csa(s_dir,prnt<sblng?1:2); + } + } + } else if (featsP==null && featsSbl!=null) { + + for(short i2=0;i2<featsSbl.length;i2++) { + dlf.v4=nofeat; dlf.v5=featsSbl[i2]; + dlf.cz6(); f[cnt++]=dlf.csa(s_dir,dir); + } + + } else if (featsP!=null && featsSbl==null) { + + for(short i1=0;i1<featsP.length;i1++) { + dlf.v4=featsP[i1]; dlf.v5=nofeat; + dlf.cz6(); f[cnt++]=dlf.csa(s_dir,dir); + } + } + + return; + } + + private int extractFeat(long[] f, int cnt, int dir, short[] featsP, short[] featsD) { + if (featsP!=null && featsD!=null) { + for(short i1=0;i1<featsP.length;i1++) { + for(short i2=0;i2<featsD.length;i2++) { + dlf.v4=featsP[i1]; dlf.v5=featsD[i2]; + dlf.cz6(); f[cnt++]=dlf.csa(s_dir,dir); + } + } + } else if (featsP==null && featsD!=null) { + + for(short i2=0;i2<featsD.length;i2++) { + dlf.v4=nofeat; dlf.v5=featsD[i2]; + dlf.cz6(); f[cnt++]=dlf.csa(s_dir,dir); + + } + } else if (featsP!=null && featsD==null) { + + for(short i1=0;i1<featsP.length;i1++) { + dlf.v4=featsP[i1]; dlf.v5=nofeat; + dlf.cz6(); f[cnt++]=dlf.csa(s_dir,dir); + + } + } + return cnt; + } + + + public FV encodeCat(Instances is, int ic, short pposs[], int forms[], int[] lemmas, short[] heads, short[] types, short feats[][], Cluster cluster, FV f) { + + + long[] svs = new long[250]; + + for (int i = 1; i < heads.length; i++) { + + + int n =basic(pposs, forms, heads[i], i, cluster, f); + + firstm(is, ic, heads[i], i, types[i], cluster,svs); + for(int k=0;k<svs.length;k++) dl1.map(f,svs[k]); + + int ch,cmi,cmo; + if (heads[i] < i) { + ch = rightmostRight(heads, heads[i], i); + cmi = leftmostLeft(heads, i, heads[i]); + cmo = rightmostRight(heads, i, heads.length); + + } else { + ch = leftmostLeft(heads, heads[i], i); + cmi = rightmostRight(heads, i, heads[i]); + cmo = leftmostLeft(heads, i, 0); + } + + siblingm(is,ic,pposs, forms,lemmas, feats, heads[i], i, ch,types[i], cluster, svs,n); + for(int k=0;k<svs.length;k++) dl1.map(f,svs[k]); + + + gcm(is, ic,heads[i],i,cmi, types[i], cluster, svs); + for(int k=0;k<svs.length;k++) dl1.map(f,svs[k]); + + gcm(is, ic, heads[i],i,cmo, types[i], cluster, svs); + for(int k=0;k<svs.length;k++) dl1.map(f,svs[k]); + } + + return f; + } + + + public float encode3(short[] pos, short heads[] , short[] types, DataF d2) { + + double v = 0; + for (int i = 1; i < heads.length; i++) { + + int dir= (heads[i] < i)? 0:1; + + v += d2.pl[heads[i]][i]; + v += d2.lab[heads[i]][i][types[i]][dir]; + + boolean left = i<heads[i]; + short[] labels = Edges.get(pos[heads[i]], pos[i], left); + int lid=-1; + for(int k=0;k<labels.length;k++) if (types[i]== labels[k]) {lid= k;break;} + + int ch,cmi,cmo; + if (heads[i] < i) { + ch = rightmostRight(heads, heads[i], i); + cmi = leftmostLeft(heads, i, heads[i]); + cmo = rightmostRight(heads, i, heads.length); + + if (ch==-1) ch=heads[i]; + if (cmi==-1) cmi=heads[i]; + if (cmo==-1) cmo=heads[i]; + + } else { + ch = leftmostLeft(heads, heads[i], i); + cmi = rightmostRight(heads, i, heads[i]); + cmo = leftmostLeft(heads, i, 0); + + if (ch==-1) ch=i; + if (cmi==-1) cmi=i; + if (cmo==-1) cmo=i; + } + v += d2.sib[heads[i]][i][ch][dir][lid]; + v += d2.gra[heads[i]][i][cmi][dir][lid]; + v += d2.gra[heads[i]][i][cmo][dir][lid]; + } + return (float)v; + } + + /** + * Provide the scores of the edges + * @param pos + * @param heads + * @param types + * @param edgesScores + * @param d2 + * @return + */ + public static float encode3(short[] pos, short heads[] , short[] types, float[] edgesScores, DataF d2) { + + double v = 0; + for (int i = 1; i < heads.length; i++) { + + int dir= (heads[i] < i)? 0:1; + + edgesScores[i] = d2.pl[heads[i]][i]; + edgesScores[i] += d2.lab[heads[i]][i][types[i]][dir]; + + boolean left = i<heads[i]; + short[] labels = Edges.get(pos[heads[i]], pos[i], left); + int lid=-1; + for(int k=0;k<labels.length;k++) if (types[i]== labels[k]) {lid= k;break;} + + int ch,cmi,cmo; + if (heads[i] < i) { + ch = rightmostRight(heads, heads[i], i); + cmi = leftmostLeft(heads, i, heads[i]); + cmo = rightmostRight(heads, i, heads.length); + + if (ch==-1) ch=heads[i]; + if (cmi==-1) cmi=heads[i]; + if (cmo==-1) cmo=heads[i]; + + } else { + ch = leftmostLeft(heads, heads[i], i); + cmi = rightmostRight(heads, i, heads[i]); + cmo = leftmostLeft(heads, i, 0); + + if (ch==-1) ch=i; + if (cmi==-1) cmi=i; + if (cmo==-1) cmo=i; + } + edgesScores[i] += d2.sib[heads[i]][i][ch][dir][lid]; + edgesScores[i] += d2.gra[heads[i]][i][cmi][dir][lid]; + edgesScores[i] += d2.gra[heads[i]][i][cmo][dir][lid]; + v+=edgesScores[i]; + } + return (float)v; + } + + + private static int rightmostRight(short[] heads, int head, int max) { + int rightmost = -1; + for (int i = head + 1; i < max; i++) if (heads[i] == head) rightmost = i; + + return rightmost; + } + + private static int leftmostLeft(short[] heads, int head, int min) { + int leftmost = -1; + for (int i = head - 1; i > min; i--) if (heads[i] == head) leftmost = i; + return leftmost; + } + + public static final String REL = "REL",END = "END",STR = "STR",LA = "LA",RA = "RA"; + + private static int ra,la; + private static int s_str; + private static int s_end, _cend,_cstr, s_stwrd,s_relend; + + protected static final String TYPE = "TYPE",DIR = "D", FEAT="F"; + public static final String POS = "POS"; + protected static final String DIST = "DIST",MID = "MID"; + + private static final String _0 = "0",_4 = "4",_3 = "3", _2 = "2",_1 = "1",_5 = "5",_10 = "10"; + + private static int di0, d4,d3,d2,d1,d5,d10; + + + private static final String WORD = "WORD",STWRD = "STWRD", STPOS = "STPOS"; + + + + private static int nofeat; + + + private static int maxForm; + + + /** + * Initialize the features. + * @param maxFeatures + */ + static public void initFeatures() { + + + MFB mf = new MFB(); + mf.register(POS, MID); + s_str = mf.register(POS, STR); + s_end = mf.register(POS, END); + + s_relend = mf.register(REL, END); + + _cstr= mf.register(Cluster.SPATH,STR); + _cend=mf.register(Cluster.SPATH,END); + + + mf.register(TYPE, POS); + + s_stwrd=mf.register(WORD,STWRD); + mf.register(POS,STPOS); + + la = mf.register(DIR, LA); + ra = mf.register(DIR, RA); + + // mf.register(TYPE, CHAR); + + mf.register(TYPE, FEAT); + nofeat=mf.register(FEAT, "NOFEAT"); + + for(int k=0;k<215;k++) mf.register(TYPE, "F"+k); + + + di0=mf.register(DIST, _0); + d1=mf.register(DIST, _1); + d2=mf.register(DIST, _2); + d3=mf.register(DIST, _3); + d4=mf.register(DIST, _4); + d5=mf.register(DIST, _5); + // d5l=mf.register(DIST, _5l); + d10=mf.register(DIST, _10); + + + } + + /* (non-Javadoc) + * @see extractors.Extractor#getType() + */ + @Override + public int getType() { + return s_type; + } + + /* (non-Javadoc) + * @see extractors.Extractor#setMaxForm(java.lang.Integer) + */ + @Override + public void setMaxForm(int max) { + maxForm = max; + } + + /* (non-Javadoc) + * @see extractors.Extractor#getMaxForm() + */ + @Override + public int getMaxForm() { + return maxForm; + } + + + +} diff --git a/dependencyParser/basic/mate-tools/src/extractors/ExtractorFactory.java b/dependencyParser/basic/mate-tools/src/extractors/ExtractorFactory.java new file mode 100644 index 0000000..9543111 --- /dev/null +++ b/dependencyParser/basic/mate-tools/src/extractors/ExtractorFactory.java @@ -0,0 +1,44 @@ +/** + * + */ +package extractors; + +import is2.data.Long2IntInterface; + +/** + * @author Dr. Bernd Bohnet, 29.04.2011 + * + * + */ +public class ExtractorFactory { + + public static final int StackedClustered = 4; + public static final int StackedClusteredR2 = 5; + + + private int type=-1; + + /** + * @param stackedClusteredR22 + */ + public ExtractorFactory(int t) { + type=t; + } + + /** + * @param stackedClusteredR22 + * @param l2i + * @return + */ + public Extractor getExtractor(Long2IntInterface l2i) { + switch(type) + { + case StackedClustered: + return new ExtractorClusterStacked(l2i); + case StackedClusteredR2: + return new ExtractorClusterStackedR2(l2i); + } + return null; + } + +} diff --git a/dependencyParser/basic/mate-tools/src/extractors/ExtractorReranker.java b/dependencyParser/basic/mate-tools/src/extractors/ExtractorReranker.java new file mode 100644 index 0000000..2761f26 --- /dev/null +++ b/dependencyParser/basic/mate-tools/src/extractors/ExtractorReranker.java @@ -0,0 +1,621 @@ +package extractors; + + +import is2.data.Cluster; +import is2.data.D4; +import is2.data.Instances; +import is2.data.Long2IntInterface; +import is2.data.MFB; +import is2.data.ParseNBest; +import is2.util.DB; + +import java.util.Arrays; + + + +final public class ExtractorReranker { + + public static int s_rel,s_word,s_type,s_dir,s_dist,s_feat,s_child,s_spath,s_lpath,s_pos; + public static int d0,d1,d2,d3,d4,d5,d10; + + MFB mf; + + final D4 dl1,dl2, dwr,dr,dwwp,dw,dwp,dlf,d3lp, d2lp,d2pw,d2pp ; + + public final Long2IntInterface li; + + public ExtractorReranker(Long2IntInterface li) { + this.li=li; + dl1 = new D4(li);dl2 = new D4(li); + dwr = new D4(li); + dr = new D4(li); + dwwp = new D4(li); + + dw = new D4(li); + dwp = new D4(li); + + dlf = new D4(li); + d3lp = new D4(li); d2lp = new D4(li); d2pw = new D4(li); d2pp = new D4(li); + + } + + public static void initStat() { + DB.println("init called "); + MFB mf = new MFB(); + s_rel = mf.getFeatureCounter().get(REL).intValue();; + s_pos = mf.getFeatureCounter().get(POS).intValue(); + s_word = mf.getFeatureCounter().get(WORD).intValue(); + s_type = mf.getFeatureCounter().get(TYPE).intValue();//mf.getFeatureBits(); + s_dir = mf.getFeatureCounter().get(DIR); + la = mf.getValue(DIR, LA); + ra = mf.getValue(DIR, RA); + s_dist = mf.getFeatureCounter().get(DIST);//mf.getFeatureBits(DIST); + s_feat = mf.getFeatureCounter().get(FEAT);//mf.getFeatureBits(Pipe.FEAT); + s_spath = mf.getFeatureCounter().get(Cluster.SPATH)==null?0:mf.getFeatureCounter().get(Cluster.SPATH);//mf.getFeatureBits(Cluster.SPATH); + s_lpath = mf.getFeatureCounter().get(Cluster.LPATH)==null?0:mf.getFeatureCounter().get(Cluster.LPATH);//mf.getFeatureBits(Cluster.LPATH); + } + + public void init(){ + mf = new MFB(); + + dl1.a0 = s_type;dl1.a1 = 3; dl1.a2 = s_pos;dl1.a3 = s_pos; dl1.a4 = s_pos; dl1.a5 = s_pos; dl1.a6 = s_pos; dl1.a7 = s_pos; + dl2.a0 = s_type;dl2.a1 = 3;dl2.a2 = s_rel;dl2.a3 = s_rel;dl2.a4 = s_rel;dl2.a5 = s_rel;dl2.a6 = s_rel;dl2.a7 = s_rel;dl2.a8 = s_rel; dl2.a9 = s_rel; + dwp.a0 = s_type; dwp.a1 = 3; dwp.a2 = s_word; dwp.a3 = s_rel; dwp.a4 = s_rel; dwp.a5 = s_rel;dwp.a6 = s_rel;dwp.a7 = s_rel; + dwwp.a0 = s_type; dwwp.a1 = 3; dwwp.a2 = s_word; dwwp.a3 = s_word; dwwp.a4 = s_pos; dwwp.a5 = s_word;dwwp.a6 = s_pos;dwwp.a7 = s_pos; + } + + + + + + + public static final String REL = "REL",END = "END",STR = "STR",LA = "LA",RA = "RA", FEAT="F"; + + private static int ra,la; + private static int s_str; + private static int s_end, _cend,_cstr, s_stwrd,s_relend; + + protected static final String TYPE = "TYPE",DIR = "D"; + public static final String POS = "POS"; + protected static final String DIST = "DIST",MID = "MID"; + + private static final String _0 = "0",_4 = "4",_3 = "3", _2 = "2",_1 = "1",_5 = "5",_10 = "10"; + + + + private static final String WORD = "WORD",STWRD = "STWRD", STPOS = "STPOS"; + + + + private static int nofeat; + + + public static int maxForm; + + + final public static int _FC =60; + + + /** + * Initialize the features. + * @param maxFeatures + */ + static public void initFeatures() { + + + MFB mf = new MFB(); + mf.register(POS, MID); + s_str = mf.register(POS, STR); + s_end = mf.register(POS, END); + + s_relend = mf.register(REL, END); + + _cstr= mf.register(Cluster.SPATH,STR); + _cend=mf.register(Cluster.SPATH,END); + + + mf.register(TYPE, POS); + + s_stwrd=mf.register(WORD,STWRD); + mf.register(POS,STPOS); + + la = mf.register(DIR, LA); + ra = mf.register(DIR, RA); + + // mf.register(TYPE, CHAR); + + mf.register(TYPE, FEAT); + nofeat=mf.register(FEAT, "NOFEAT"); + + for(int k=0;k<60;k++) mf.register(TYPE, "F"+k); + + + d0 =mf.register(DIST, _0); + d1= mf.register(DIST, _1); + d2 =mf.register(DIST, _2); + d3= mf.register(DIST, _3); + d4= mf.register(DIST, _4); + d5= mf.register(DIST, _5); + // d5l=mf.register(DIST, _5l); + d10= mf.register(DIST, _10); + + + } + + /** + * @param is + * @param n + * @param parseNBest + * @param vs + */ + public void extractFeatures3(Instances is, int i, ParseNBest parse, int rank, long[] v) { + + int f=1,n=0; + + for(short k= 0; k<is.length(i)-1;k++) { + + short[] chld = children(parse.heads,k); + + f=2; + + int fm = is.forms[i][k]; + int hh = k!=0? is.pposs[i][parse.heads[k]]:s_end; + int h = is.pposs[i][k]; + int hrel = parse.labels[k]; + int hhrel = k!=0? parse.labels[parse.heads[k]]:s_relend; + int hhf = k!=0? is.forms[i][parse.heads[k]]:s_stwrd; + + + + int rlast = chld.length>0?parse.labels[chld[chld.length-1]]:s_relend; + + int [] rels = new int[chld.length]; + int [] pss = new int[chld.length]; + for(int j=0;j<chld.length;j++) { + rels[j] = parse.labels[chld[j]]; + pss[j] = is.pposs[i][chld[j]]; + } + + StringBuilder rl = new StringBuilder(chld.length); + StringBuilder psl = new StringBuilder(chld.length); + for(int j=0;j<chld.length;j++) { + rl.append((char)rels[j]); + psl.append((char)pss[j]); + } + + int rli = mf.register("rli", rl.toString()); + int pli = mf.register("pli", psl.toString()); + + dwwp.v0=f++; dwwp.v2=rli; dwwp.cz3(); v[n++]=dwwp.getVal(); + dwwp.v0=f++; dwwp.v2=pli; dwwp.cz3(); v[n++]=dwwp.getVal(); + + dwwp.v0=f++; dwwp.v2=rli; dwwp.v3=h;dwwp.cz4(); v[n++]=dwwp.getVal(); + dwwp.v0=f++; dwwp.v2=pli; dwwp.v3=h;dwwp.cz4(); v[n++]=dwwp.getVal(); + + dwwp.v0=f++; dwwp.v2=pli; dwwp.v3=hh; dwwp.v4=h; dwwp.cz5(); v[n++]=dwwp.getVal(); + dwwp.v0=f++; dwwp.v2=rli; dwwp.v3=hh; dwwp.v4=h; dwwp.cz5(); v[n++]=dwwp.getVal(); + + dwwp.v0=f++; dwwp.v2=pli; dwwp.v3=rli; dwwp.v4=h; dwwp.cz5(); v[n++]=dwwp.getVal(); + dwwp.v0=f++; dwwp.v2=fm; dwwp.v3=rli; dwwp.v4=h; dwwp.cz5(); v[n++]=dwwp.getVal(); + dwwp.v0=f++; dwwp.v2=pli; dwwp.v3=fm; dwwp.v4=h; dwwp.cz5(); v[n++]=dwwp.getVal(); + + + + dwwp.v0=f++; dwwp.v2=pli; dwwp.v3=rli; dwwp.v4=hh; dwwp.cz5(); v[n++]=dwwp.getVal(); + dwwp.v0=f++; dwwp.v2=pli; dwwp.v3=rli; dwwp.v4=hh; dwwp.v5=h; dwwp.cz6(); v[n++]=dwwp.getVal(); + + dwp.v0= f++; dwp.v2=rli; dwp.v3=hrel;dwp.v4=hh; dwp.v5=h; dwp.cz6(); v[n++]=dwp.getVal(); + + Arrays.sort(rels); + Arrays.sort(pss); + + rl = new StringBuilder(chld.length); + psl = new StringBuilder(chld.length); + for(int j=0;j<chld.length;j++) { + rl.append((char)rels[j]); + psl.append((char)pss[j]); + } + rli = mf.register("rli", rl.toString()); + pli = mf.register("pli", psl.toString()); + + + dwwp.v0=f++; dwwp.v2=pli; dwwp.v3=rli; dwwp.v4=h; dwwp.cz5(); v[n++]=dwwp.getVal(); + dwwp.v0=f++; dwwp.v2=fm; dwwp.v3=rli; dwwp.v4=h; dwwp.cz5(); v[n++]=dwwp.getVal(); + dwwp.v0=f++; dwwp.v2=pli; dwwp.v3=fm; dwwp.v4=h; dwwp.cz5(); v[n++]=dwwp.getVal(); + + dwwp.v0=f++; dwwp.v2=rli; dwwp.v3=h;dwwp.cz4(); v[n++]=dwwp.getVal(); + + dl1.v0= f++; dl1.v2=h; dl1.v3=hrel; dl1.v4=hhrel;dl1.v5=hh; dl1.v6=rlast; dl1.cz6(); v[n++]=dl1.getVal(); + dwp.v0= f++; dwp.v2=fm; dwp.v3=hrel; dwp.v4=hh; dwp.cz5(); v[n++]=dwp.getVal(); + dwp.v0= f++; dwp.v2=hhf; dwp.v3=hrel; dwp.v4=hh; dwp.v5=h; dwp.cz6(); v[n++]=dwp.getVal(); + + dwwp.v0=f++; dwwp.v2=fm; dwwp.v3=hhf; dwwp.v4=hrel; dwwp.v5=hhrel; dwwp.cz6(); v[n++]=dwwp.getVal(); + dwwp.v0=f++; dwwp.v2=h; dwwp.v3=hhf; dwwp.v4=hrel; dwwp.v5=hhrel; dwwp.cz6(); v[n++]=dwwp.getVal(); + dwwp.v0=f++; dwwp.v2=fm; dwwp.v3=hh; dwwp.v4=hrel; dwwp.v5=hhrel; dwwp.cz6(); v[n++]=dwwp.getVal(); + + dwwp.v0=f++; dwwp.v2=fm; dwwp.v3=hhf; dwwp.v4=h; dwwp.v5=hh; dwwp.cz6(); v[n++]=dwwp.getVal(); + dwwp.v0=f++; dwwp.v2=h; dwwp.v3=hhf; dwwp.v4=hrel; dwwp.v5=hh; dwwp.cz6(); v[n++]=dwwp.getVal(); + dwwp.v0=f++; dwwp.v2=fm; dwwp.v3=hh; dwwp.v4=h; dwwp.v5=hrel; dwwp.cz6(); v[n++]=dwwp.getVal(); + + + // dl1.v0= f++; dl1.v2=h;dl1.v3=hrel; dl1.v4=hhrel;dl1.v5=hh; dl1.v6=hhhrel;dl1.v7=hhh; dl1.v8=rlast; dl1.cz9(); v[n++]=dl1.getVal(); +// dl1.v0= f++; dl1.v2=h;dl1.v3=hrel; dl1.v4=hhrel;dl1.v5=hh; dl1.v6=hhhrel;dl1.v7=hhh; dl1.v8=rlast; dl1.cz9(); v[n++]=dl1.getVal(); + // dl1.v0= f++; dl1.v2=h;dl1.v3=hrel; dl1.v4=dir;dl1.v5=hh; dl1.v6=hhh;dl1.v7=rlast; dl1.v8=r1; dl1.cz9(); v[n++]=dl1.getVal(); + // dl1.v0= f++; dl1.v2=h;dl1.v3=hh; dl1.v4=hhh;dl1.v5=hrel; dl1.cz6(); v[n++]=dl1.getVal(); + + + short hp = parse.heads[k]; + short[] hchld = hp==-1?new short[0]:children(parse.heads,hp); + + int [] hrels = new int[hchld.length]; + int [] hpss = new int[hchld.length]; + for(int j=0;j<hchld.length;j++) { + hrels[j] = parse.labels[hchld[j]]; + hpss[j] = is.pposs[i][hchld[j]]; + } + + + StringBuilder hrl = new StringBuilder(hchld.length); + StringBuilder hpsl = new StringBuilder(hchld.length); + for(int j=0;j<hchld.length;j++) { + hrl.append((char)hrels[j]); + hpsl.append((char)hpss[j]); + } + int hrli = mf.register("rli", hrl.toString()); + int hpli = mf.register("pli", hpsl.toString()); + + dwwp.v0=f++; dwwp.v2=hpli; dwwp.v3=hrli; dwwp.cz4(); v[n++]=dwwp.getVal(); + dwwp.v0=f++; dwwp.v2=fm; dwwp.v3=hrli; dwwp.cz4(); v[n++]=dwwp.getVal(); + dwwp.v0=f++; dwwp.v2=hpli; dwwp.v3=fm; dwwp.cz4(); v[n++]=dwwp.getVal(); + + dwwp.v0=f++; dwwp.v2=hpli; dwwp.v3=rli; dwwp.v4=hrel;dwwp.v5=h; dwwp.cz5(); v[n++]=dwwp.getVal(); + dwwp.v0=f++; dwwp.v2=pli; dwwp.v3=hrli;dwwp.v4=hrel;dwwp.v5=h; dwwp.cz5(); v[n++]=dwwp.getVal(); + dwwp.v0=f++; dwwp.v2=hpli; dwwp.v3=hpli;dwwp.v4=hrel;dwwp.v5=h; dwwp.cz5(); v[n++]=dwwp.getVal(); + + + + } + + v[n]=Integer.MIN_VALUE; + } + + /** + * This works seem works well with n-best n=8 (88.858074) , n=10 (88.836884), n=12 (88.858) + * n=14 (88.913417) n=16 (88.79546) n=20 (88.80621) n 50 (88.729364) + * 1-best: 88.749605 + * + * @param is + * @param i + * @param parse + * @param rank + * @param v + * @param cluster + */ + public void extractFeatures(Instances is, int i, ParseNBest parse, int rank, long[] v, Cluster cluster) { + + // mf.getValue(REL, "SB"); + + int f=1,n=0; + + for(short k= 0; k<is.length(i)-1;k++) { + + short[] chld = children(parse.heads,k); + + int abs = Math.abs(parse.heads[k]-k); + final int dist; + if (abs > 10)dist=d10;else if (abs>5) dist=d5;else if( abs==5)dist=d4;else if (abs==4)dist=d3;else if (abs==3)dist=d2; + else if (abs==2)dist=d1; else dist=d0; + + + f=2; + + int fm = is.forms[i][k]; + int hh = k!=0? is.pposs[i][parse.heads[k]]:s_end; + int h = is.pposs[i][k]; + int hrel = parse.labels[k];//is.labels[i][k]; + int hhrel = k!=0? parse.labels[parse.heads[k]]:s_relend; + int hhf = k!=0? is.forms[i][parse.heads[k]]:s_stwrd; + + int r1 = chld.length>0?parse.labels[chld[0]]:s_relend; + int rlast = chld.length>0?parse.labels[chld[chld.length-1]]:s_relend; + + int [] rels = new int[chld.length]; + int [] pss = new int[chld.length]; + int [] cls = new int[chld.length]; + + int[] rc = new int[30]; // 20 was a good length + + for(int j=0;j<chld.length;j++) { + rels[j] = parse.labels[chld[j]]; + if (rels[j]<rc.length) rc[rels[j]]++; + pss[j] = is.pposs[i][chld[j]]; +// cls[j] = is.forms[i][chld[j]]==-1?0:cluster.getLP(is.forms[i][chld[j]]); +// cls[j] = cls[j]==-1?0:cls[j]; + } + + StringBuilder rl = new StringBuilder(chld.length); + StringBuilder psl = new StringBuilder(chld.length); + StringBuilder csl = new StringBuilder(chld.length); + for(int j=0;j<chld.length;j++) { + rl.append((char)rels[j]); + psl.append((char)pss[j]); +// csl.append((char)cls[j]); + } + + int rli = mf.register("rli", rl.toString()); + int pli = mf.register("pli", psl.toString()); +// int cli = mf.register("cli", csl.toString()); + + + dwwp.v0=f++; dwwp.v2=pli; dwwp.v3=rli; dwwp.v4=h; dwwp.cz5(); v[n++]=dwwp.getVal(); + dwwp.v0=f++; dwwp.v2=fm; dwwp.v3=rli; dwwp.v4=h; dwwp.cz5(); v[n++]=dwwp.getVal(); + dwwp.v0=f++; dwwp.v2=pli; dwwp.v3=fm; dwwp.v4=h; dwwp.cz5(); v[n++]=dwwp.getVal(); + // dwwp.v0=f++; dwwp.v2=cli; dwwp.v3=fm; dwwp.v4=h; dwwp.cz5(); v[n++]=dwwp.getVal(); + + dwwp.v0=f++; dwwp.v2=rli; dwwp.cz3(); v[n++]=dwwp.getVal(); + dwwp.v0=f++; dwwp.v2=pli; dwwp.cz3(); v[n++]=dwwp.getVal(); + //dwwp.v0=f++; dwwp.v2=cli; dwwp.cz3(); v[n++]=dwwp.getVal(); + + // dwwp.v0=f++; dwwp.v2=cli;dwwp.v3=h; dwwp.cz4(); v[n++]=dwwp.getVal(); + + for(int j=1;j<rc.length;j++) { + dwwp.v0=f++; dwwp.v2=rc[j]==0?1:rc[j]==1?2:3; dwwp.v3=j; dwwp.cz4(); v[n++]=dwwp.getVal();// + } + + dwwp.v0=f++; dwwp.v2=rli; dwwp.v3=h;dwwp.cz4(); v[n++]=dwwp.getVal(); + dwwp.v0=f++; dwwp.v2=pli; dwwp.v3=h;dwwp.cz4(); v[n++]=dwwp.getVal(); + + dwwp.v0=f++; dwwp.v2=pli; dwwp.v3=hh; dwwp.v4=h; dwwp.cz5(); v[n++]=dwwp.getVal(); + dwwp.v0=f++; dwwp.v2=rli; dwwp.v3=hh; dwwp.v4=h; dwwp.cz5(); v[n++]=dwwp.getVal(); + + dwwp.v0=f++; dwwp.v2=pli; dwwp.v3=rli; dwwp.v4=hh; dwwp.cz5(); v[n++]=dwwp.getVal(); + dwwp.v0=f++; dwwp.v2=pli; dwwp.v3=rli; dwwp.v4=hh; dwwp.v5=h; dwwp.cz6(); v[n++]=dwwp.getVal(); + + dwp.v0= f++; dwp.v2=rli; dwp.v3=hrel;dwp.v4=hh; dwp.v5=h; dwp.cz6(); v[n++]=dwp.getVal(); + + //dwwp.v0=f++; dwwp.v2=h; dwwp.v3=hh; dwwp.v4=dist; dwwp.cz5(); v[n++]=dwwp.getVal(); + + Arrays.sort(rels); + Arrays.sort(pss); + + rl = new StringBuilder(chld.length); + psl = new StringBuilder(chld.length); + for(int j=0;j<chld.length;j++) { + rl.append((char)rels[j]); + psl.append((char)pss[j]); + } + rli = mf.register("rli", rl.toString()); + pli = mf.register("pli", psl.toString()); + + dwwp.v0=f++; dwwp.v2=pli; dwwp.v3=rli; dwwp.v4=1; dwwp.v5=h; dwwp.cz6(); v[n++]=dwwp.getVal(); + dwwp.v0=f++; dwwp.v2=fm; dwwp.v3=rli; dwwp.v4=1; dwwp.v5=h; dwwp.cz6(); v[n++]=dwwp.getVal(); + dwwp.v0=f++; dwwp.v2=pli; dwwp.v3=fm; dwwp.v4=1; dwwp.v5=h; dwwp.cz6(); v[n++]=dwwp.getVal(); + + dwwp.v0=f++; dwwp.v2=rli; dwwp.v3=h;dwwp.cz4(); v[n++]=dwwp.getVal(); + + dl1.v0= f++; dl1.v2=h; dl1.v3=hrel; dl1.v4=hhrel;dl1.v5=hh; dl1.v6=rlast; dl1.cz6(); v[n++]=dl1.getVal(); + dwp.v0= f++; dwp.v2=fm; dwp.v3=hrel; dwp.v4=hh; dwp.cz5(); v[n++]=dwp.getVal(); + dwp.v0= f++; dwp.v2=hhf; dwp.v3=hrel;dwp.v4=hh; dwp.v5=h; dwp.cz6(); v[n++]=dwp.getVal(); + } + + v[n]=Integer.MIN_VALUE; + } + + /** + + * Works well! + * @param is + * @param i + * @param parse + * @param rank + * @param v + */ + public void extractFeatures6(Instances is, int i, ParseNBest parse, int rank, long[] v) { + + // mf.getValue(REL, "SB"); + + int f=1,n=0; + + for(short k= 0; k<is.length(i)-1;k++) { + + short[] chld = children(parse.heads,k); + + f=2; + + int fm = is.forms[i][k]; + int hh = k!=0? is.pposs[i][parse.heads[k]]:s_end; + int h = is.pposs[i][k]; + int hrel = parse.labels[k];//is.labels[i][k]; + int hhrel = k!=0? parse.labels[parse.heads[k]]:s_relend; + int hhf = k!=0? is.forms[i][parse.heads[k]]:s_stwrd; + + int r1 = chld.length>0?parse.labels[chld[0]]:s_relend; + int rlast = chld.length>0?parse.labels[chld[chld.length-1]]:s_relend; + + int [] rels = new int[chld.length]; + int [] pss = new int[chld.length]; + + int[] rc = new int[30]; // 20 was a good length + + for(int j=0;j<chld.length;j++) { + rels[j] = parse.labels[chld[j]]; + if (rels[j]<rc.length) rc[rels[j]]++; + // if (rels[j]==sb) numSB++; + pss[j] = is.pposs[i][chld[j]]; + } + + StringBuilder rl = new StringBuilder(chld.length); + StringBuilder psl = new StringBuilder(chld.length); + for(int j=0;j<chld.length;j++) { + rl.append((char)rels[j]); + psl.append((char)pss[j]); + } + + int rli = mf.register("rli", rl.toString()); + int pli = mf.register("pli", psl.toString()); + + + dwwp.v0=f++; dwwp.v2=pli; dwwp.v3=rli; dwwp.v4=h; dwwp.cz5(); v[n++]=dwwp.getVal(); + dwwp.v0=f++; dwwp.v2=fm; dwwp.v3=rli; dwwp.v4=h; dwwp.cz5(); v[n++]=dwwp.getVal(); + dwwp.v0=f++; dwwp.v2=pli; dwwp.v3=fm; dwwp.v4=h; dwwp.cz5(); v[n++]=dwwp.getVal(); + + dwwp.v0=f++; dwwp.v2=rli; dwwp.cz3(); v[n++]=dwwp.getVal(); + dwwp.v0=f++; dwwp.v2=pli; dwwp.cz3(); v[n++]=dwwp.getVal(); + + for(int j=1;j<rc.length;j++) { + dwwp.v0=f++; dwwp.v2=rc[j]==0?1:rc[j]==1?2:3; dwwp.v3=j; dwwp.cz4(); v[n++]=dwwp.getVal();// + } + + dwwp.v0=f++; dwwp.v2=rli; dwwp.v3=h;dwwp.cz4(); v[n++]=dwwp.getVal(); + dwwp.v0=f++; dwwp.v2=pli; dwwp.v3=h;dwwp.cz4(); v[n++]=dwwp.getVal(); + + dwwp.v0=f++; dwwp.v2=pli; dwwp.v3=hh; dwwp.v4=h; dwwp.cz5(); v[n++]=dwwp.getVal(); + dwwp.v0=f++; dwwp.v2=rli; dwwp.v3=hh; dwwp.v4=h; dwwp.cz5(); v[n++]=dwwp.getVal(); + + dwwp.v0=f++; dwwp.v2=pli; dwwp.v3=rli; dwwp.v4=hh; dwwp.cz5(); v[n++]=dwwp.getVal(); + dwwp.v0=f++; dwwp.v2=pli; dwwp.v3=rli; dwwp.v4=hh; dwwp.v5=h; dwwp.cz6(); v[n++]=dwwp.getVal(); + + dwp.v0= f++; dwp.v2=rli; dwp.v3=hrel;dwp.v4=hh; dwp.v5=h; dwp.cz6(); v[n++]=dwp.getVal(); + + + Arrays.sort(rels); + Arrays.sort(pss); + + rl = new StringBuilder(chld.length); + psl = new StringBuilder(chld.length); + for(int j=0;j<chld.length;j++) { + rl.append((char)rels[j]); + psl.append((char)pss[j]); + } + rli = mf.register("rli", rl.toString()); + pli = mf.register("pli", psl.toString()); + + + dwwp.v0=f++; dwwp.v2=pli; dwwp.v3=rli; dwwp.v4=1; dwwp.v5=h; dwwp.cz6(); v[n++]=dwwp.getVal(); + dwwp.v0=f++; dwwp.v2=fm; dwwp.v3=rli; dwwp.v4=1; dwwp.v5=h; dwwp.cz6(); v[n++]=dwwp.getVal(); + dwwp.v0=f++; dwwp.v2=pli; dwwp.v3=fm; dwwp.v4=1; dwwp.v5=h; dwwp.cz6(); v[n++]=dwwp.getVal(); + + dwwp.v0=f++; dwwp.v2=rli; dwwp.v3=h;dwwp.cz4(); v[n++]=dwwp.getVal(); + + dl1.v0= f++; dl1.v2=h; dl1.v3=hrel; dl1.v4=hhrel;dl1.v5=hh; dl1.v6=rlast; dl1.cz6(); v[n++]=dl1.getVal(); + dwp.v0= f++; dwp.v2=fm; dwp.v3=hrel; dwp.v4=hh; dwp.cz5(); v[n++]=dwp.getVal(); + dwp.v0= f++; dwp.v2=hhf; dwp.v3=hrel;dwp.v4=hh; dwp.v5=h; dwp.cz6(); v[n++]=dwp.getVal(); + + } + + v[n]=Integer.MIN_VALUE; + } + + + + public void extractFeatures2(Instances is, int i, ParseNBest parse, int rank, long[] v) { + + + + int f=1,n=0; + + for(short k= 0; k<is.length(i)-1;k++) { + + short[] chld = children(parse.heads,k); + + f=2; + + int fm = is.forms[i][k]; + int hh = k!=0? is.pposs[i][parse.heads[k]]:s_end; + int h = is.pposs[i][k]; + int hrel = parse.labels[k];//is.labels[i][k]; + int hhrel = k!=0? parse.labels[parse.heads[k]]:s_relend; + int hhf = k!=0? is.forms[i][parse.heads[k]]:s_stwrd; + + int r1 = chld.length>0?parse.labels[chld[0]]:s_relend; + int rlast = chld.length>0?parse.labels[chld[chld.length-1]]:s_relend; + + int [] rels = new int[chld.length]; + int [] pss = new int[chld.length]; + + + + for(int j=0;j<chld.length;j++) { + rels[j] = parse.labels[chld[j]]; + pss[j] = is.pposs[i][chld[j]]; + } + + StringBuilder rl = new StringBuilder(chld.length); + StringBuilder psl = new StringBuilder(chld.length); + for(int j=0;j<chld.length;j++) { + rl.append((char)rels[j]); + psl.append((char)pss[j]); + } + + int rli = mf.register("rli", rl.toString()); + int pli = mf.register("pli", psl.toString()); + + + dwwp.v0=f++; dwwp.v2=pli; dwwp.v3=rli; dwwp.v4=h; dwwp.cz5(); v[n++]=dwwp.getVal(); + dwwp.v0=f++; dwwp.v2=fm; dwwp.v3=rli; dwwp.v4=h; dwwp.cz5(); v[n++]=dwwp.getVal(); + dwwp.v0=f++; dwwp.v2=pli; dwwp.v3=fm; dwwp.v4=h; dwwp.cz5(); v[n++]=dwwp.getVal(); + + dwwp.v0=f++; dwwp.v2=rli; dwwp.cz3(); v[n++]=dwwp.getVal(); + dwwp.v0=f++; dwwp.v2=pli; dwwp.cz3(); v[n++]=dwwp.getVal(); + + dwwp.v0=f++; dwwp.v2=rli; dwwp.v3=h;dwwp.cz4(); v[n++]=dwwp.getVal(); + dwwp.v0=f++; dwwp.v2=pli; dwwp.v3=h;dwwp.cz4(); v[n++]=dwwp.getVal(); + + dwwp.v0=f++; dwwp.v2=pli; dwwp.v3=hh; dwwp.v4=h; dwwp.cz5(); v[n++]=dwwp.getVal(); + dwwp.v0=f++; dwwp.v2=rli; dwwp.v3=hh; dwwp.v4=h; dwwp.cz5(); v[n++]=dwwp.getVal(); + + dwwp.v0=f++; dwwp.v2=pli; dwwp.v3=rli; dwwp.v4=hh; dwwp.cz5(); v[n++]=dwwp.getVal(); + dwwp.v0=f++; dwwp.v2=pli; dwwp.v3=rli; dwwp.v4=hh; dwwp.v5=h; dwwp.cz6(); v[n++]=dwwp.getVal(); + + dwp.v0= f++; dwp.v2=rli; dwp.v3=hrel;dwp.v4=hh; dwp.v5=h; dwp.cz6(); v[n++]=dwp.getVal(); + + + Arrays.sort(rels); + Arrays.sort(pss); + + rl = new StringBuilder(chld.length); + psl = new StringBuilder(chld.length); + for(int j=0;j<chld.length;j++) { + rl.append((char)rels[j]); + psl.append((char)pss[j]); + } + rli = mf.register("rli", rl.toString()); + pli = mf.register("pli", psl.toString()); + + + dwwp.v0=f++; dwwp.v2=pli; dwwp.v3=rli; dwwp.v4=1; dwwp.v5=h; dwwp.cz6(); v[n++]=dwwp.getVal(); + dwwp.v0=f++; dwwp.v2=fm; dwwp.v3=rli; dwwp.v4=1; dwwp.v5=h; dwwp.cz6(); v[n++]=dwwp.getVal(); + dwwp.v0=f++; dwwp.v2=pli; dwwp.v3=fm; dwwp.v4=1; dwwp.v5=h; dwwp.cz6(); v[n++]=dwwp.getVal(); + + dwwp.v0=f++; dwwp.v2=rli; dwwp.v3=h;dwwp.cz4(); v[n++]=dwwp.getVal(); + + dl1.v0= f++; dl1.v2=h; dl1.v3=hrel; dl1.v4=hhrel;dl1.v5=hh; dl1.v6=rlast; dl1.cz6(); v[n++]=dl1.getVal(); + dwp.v0= f++; dwp.v2=fm; dwp.v3=hrel; dwp.v4=hh; dwp.cz5(); v[n++]=dwp.getVal(); + dwp.v0= f++; dwp.v2=hhf; dwp.v3=hrel;dwp.v4=hh; dwp.v5=h; dwp.cz6(); v[n++]=dwp.getVal(); + + } + + v[n]=Integer.MIN_VALUE; + } + + + + /** + * @param parse + * @param k + * @return + */ + private short[] children(short[] heads, short h) { + + int c=0; + for(int k=0;k<heads.length;k++) if (heads[k] ==h ) c++; + + short[] clds = new short[c]; + c=0; + for(int k=0;k<heads.length;k++) if (heads[k] ==h ) clds[c++]=(short)k; + return clds; + } + + + +} diff --git a/dependencyParser/basic/mate-tools/src/extractors/ParallelExtract.java b/dependencyParser/basic/mate-tools/src/extractors/ParallelExtract.java new file mode 100755 index 0000000..a2ef72c --- /dev/null +++ b/dependencyParser/basic/mate-tools/src/extractors/ParallelExtract.java @@ -0,0 +1,194 @@ +package extractors; + +import is2.data.Cluster; +import is2.data.DataF; +import is2.data.Edges; +import is2.data.F2SF; +import is2.data.FV; +import is2.data.Instances; +import is2.data.Long2IntInterface; + +import java.util.ArrayList; +import java.util.concurrent.Callable; + + +/** + * @author Bernd Bohnet, 30.08.2009 + * + * This class implements a parallel feature extractor. + */ +final public class ParallelExtract implements Callable<Object> +{ + // the data space of the weights for a dependency tree + final DataF d; + + // the data extractor does the actual work + final Extractor extractor; + + private Instances is; + private int i; + + private F2SF para; + + private Cluster cluster; + + private Long2IntInterface li; + + public ParallelExtract(Extractor e, Instances is, int i, DataF d, F2SF para,Cluster cluster, Long2IntInterface li) { + + this.is =is; + extractor=e; + this.d =d; + this.i=i; + this.para=para; + this.cluster = cluster; + this.li=li; + } + + + public static class DSet { + int w1,w2; + } + + public Object call() { + + try { + + F2SF f= para; + + + short[] pos=is.pposs[i]; + int[] forms=is.forms[i]; + int[] lemmas=is.plemmas[i]; + short[][] feats=is.feats[i]; + int length = pos.length; + + long[] svs = new long[250]; + + int type=extractor.getType(); + + while (true) { + + DSet set = get(); + if (set ==null) break; + + int w1=set.w1; + int w2=set.w2; + + f.clear(); + int n =extractor.basic(pos, forms, w1, w2,cluster, f); + d.pl[w1][w2]=f.getScoreF(); + + short[] labels = Edges.get(pos[w1], pos[w2],false); + float[][] lab = d.lab[w1][w2]; + + extractor.firstm(is, i, w1, w2, 0, cluster, svs); + + if (labels!=null) { + + + for (int l = labels.length - 1; l >= 0; l--) { + + short label = labels[l]; + + f.clear(); + for(int k=svs.length-1;k>=0;k--) if (svs[k]>0) f.add(li.l2i(svs[k]+label*type)); + lab[label][0]=f.getScoreF(); + } + } + + labels = Edges.get(pos[w1], pos[w2],true); + + if (labels!=null) { + + for (int l = labels.length - 1; l >= 0; l--) { + + int label = labels[l]; + f.clear(); + for(int k=svs.length-1;k>=0;k--) if (svs[k]>0) f.add(li.l2i(svs[k]+label*type)); + lab[label][1]=f.getScoreF(); + } + } + + int s = w1<w2 ? w1 : w2; + int e = w1<w2 ? w2 : w1; + + int sg = w1<w2 ? w1 : 0; + int eg = w1<w2 ? length : w1+1; + + + for(int m=s;m<e;m++) { + for(int dir=0;dir<2;dir++) { + labels = Edges.get(pos[w1], pos[w2],dir==1); + float lab2[]= new float[labels.length]; + + int g = (m==s||e==m) ? -1 : m; + + + extractor.siblingm(is,i,pos,forms,lemmas,feats, w1, w2, g, 0, cluster, svs,n); + + for (int l = labels.length - 1; l >= 0; l--) { + + int label = labels[l]; + f.clear(); + + for(int k=svs.length-1;k>=0;k--) { + if (svs[k]>0) f.add(li.l2i(svs[k]+label*type)); + } + lab2[l] = (float)f.score;//f.getScoreF(); + } + d.sib[w1][w2][m][dir]=lab2; + } + } + + for(int m=sg;m<eg;m++) { + for(int dir=0;dir<2;dir++) { + labels = Edges.get(pos[w1], pos[w2],dir==1); + float[] lab2 = new float[labels.length]; + + int g = (m==s||e==m) ? -1 : m; + + extractor.gcm(is, i, w1,w2,g, 0, cluster, svs); + + for (int l = labels.length - 1; l >= 0; l--) { + + int label = labels[l]; + + f.clear(); + for(int k=svs.length-1;k>=0;k--) { + if (svs[k]>0) f.add(li.l2i(svs[k]+label*type)); + } + lab2[l] = f.getScoreF(); + } + d.gra[w1][w2][m][dir] =lab2; + } + } + + } + } catch(Exception e ) { + e.printStackTrace(); + } + return null; + } + + + static ArrayList<DSet> sets = new ArrayList<DSet>(); + + private DSet get() { + + synchronized (sets) { + if (sets.size()==0) return null; + return sets.remove(sets.size()-1); + } + } + static public void add(int w1, int w2){ + DSet ds =new DSet(); + ds.w1=w1; + ds.w2=w2; + sets.add(ds); + } + + + + +} diff --git a/dependencyParser/basic/mate-tools/src/is2/data/Closed.java b/dependencyParser/basic/mate-tools/src/is2/data/Closed.java new file mode 100755 index 0000000..378d0c6 --- /dev/null +++ b/dependencyParser/basic/mate-tools/src/is2/data/Closed.java @@ -0,0 +1,31 @@ +package is2.data; + + + +final public class Closed { + + public double p; + short b,e,m; + byte dir; + + Closed d; + Open u; + + public Closed(short s, short t, int m, int dir,Open u, Closed d, float score) { + this.b = s; + this.e = t; + this.m = (short)m; + this.dir = (byte)dir; + this.u=u; + this.d =d; + p=score; + } + + + public void create(Parse parse) { + if (u != null) u.create(parse); + if (d != null) d.create(parse); + } +} + + diff --git a/dependencyParser/basic/mate-tools/src/is2/data/Cluster.java b/dependencyParser/basic/mate-tools/src/is2/data/Cluster.java new file mode 100644 index 0000000..485713d --- /dev/null +++ b/dependencyParser/basic/mate-tools/src/is2/data/Cluster.java @@ -0,0 +1,158 @@ +/** + * + */ +package is2.data; + + + +import is2.util.DB; + +import java.io.BufferedReader; +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.FileInputStream; +import java.io.IOException; +import java.io.InputStreamReader; + +/** + * @author Dr. Bernd Bohnet, 28.10.2010 + * + * + */ +final public class Cluster { + + public static final String LPATH = "LP"; + public static final String SPATH = "SP"; + + // [word][p] p = [0:long-path | 1:short-path] + final private short[][] word2path; + + public Cluster() { + word2path =new short[0][0]; + } + + /** + * @param clusterFile + * @param mf + * + */ + public Cluster(String clusterFile, IEncoderPlus mf, int ls) { + + final String REGEX = "\t"; + + // register words + try { + BufferedReader inputReader = new BufferedReader(new InputStreamReader(new FileInputStream(clusterFile),"UTF-8"),32768); + + int cnt=0; + String line; + while ((line =inputReader.readLine())!=null) { + + cnt++; + try { + String[] split = line.split(REGEX); + mf.register(SPATH, split[0].length()<ls?split[0]:split[0].substring(0,ls)); + mf.register(LPATH, split[0]); + mf.register(PipeGen.WORD, split[1]); + } catch(Exception e) { + System.out.println("Error in cluster line "+cnt+" error: "+e.getMessage()); + } + } + System.out.println("read number of clusters "+cnt); + inputReader.close(); + + } catch (Exception e) { + e.printStackTrace(); + } + + word2path = new short[mf.getFeatureCounter().get(PipeGen.WORD)][2]; + + + // insert words + try { + String line; + BufferedReader inputReader = new BufferedReader(new InputStreamReader(new FileInputStream(clusterFile),"UTF-8"),32768); + + while ((line =inputReader.readLine())!=null) { + + String[] split = line.split(REGEX); + int wd = mf.getValue(PipeGen.WORD, split[1]); + word2path[wd][0] = (short)mf.getValue(SPATH, split[0].length()<ls?split[0]:split[0].substring(0,ls)); + word2path[wd][1] = (short)mf.getValue(LPATH, split[0]); + } + inputReader.close(); + int fill=0; + for(int l = 0; l<word2path.length; l++ ){ + if (word2path[l][0]!=0) fill++; + } + /* + for(int l = 0; l<word2path.length; l++ ){ + if (word2path[l][1]!=0) fillL++; + if (word2path[l][1]<-1) System.out.println("lower "+word2path[l][1]); + } + */ + System.out.println("filled "+fill+" of "+word2path.length); + + } catch (Exception e) { + e.printStackTrace(); + } + } + + /** + * Read the cluster + * @param dos + * @throws IOException + */ + public Cluster(DataInputStream dis) throws IOException { + + word2path = new short[dis.readInt()][2]; + for(int i =0;i<word2path.length;i++) { + word2path[i][0]=dis.readShort(); + word2path[i][1]=dis.readShort(); + } + DB.println("Read cluster with "+word2path.length+" words "); + } + + /** + * Write the cluster + * @param dos + * @throws IOException + */ + public void write(DataOutputStream dos) throws IOException { + + dos.writeInt(word2path.length); + for(short[] i : word2path) { + dos.writeShort(i[0]); + dos.writeShort(i[1]); + } + + } + + /** + * @param form the id of a word form + * @return the short path to the word form in the cluster + + final public int getSP(int form) { + if (word2path.length<form) return -1; + return word2path[form][0]; + } + */ + /** + * get the long path to a word form in the cluster + * @param form the id of a word form + * @return the long path to the word + */ + final public int getLP(int form) { + if (word2path.length<=form || word2path[form].length<=0) return -1; + return word2path[form][0]==0?-1:word2path[form][0]; + } + + final public int getLP(int form, int l) { + if (word2path.length<form) return -1; + return word2path[form][l]==0?-1:word2path[form][l]; + } + + final public int size() { + return word2path.length; + } +} diff --git a/dependencyParser/basic/mate-tools/src/is2/data/D4.java b/dependencyParser/basic/mate-tools/src/is2/data/D4.java new file mode 100644 index 0000000..8be3df2 --- /dev/null +++ b/dependencyParser/basic/mate-tools/src/is2/data/D4.java @@ -0,0 +1,191 @@ +/** + * + */ +package is2.data; + +import is2.util.DB; + +/** + * @author Dr. Bernd Bohnet, 30.10.2010 + * + * This class computes the mapping of features to the weight vector. + */ +final public class D4 extends DX { + private long shift; + private long h; + + + private final Long2IntInterface _li; + public D4(Long2IntInterface li) { + _li=li; + } + + + final public void clean() { + v0=0;v1=0;v2=0;v3=0;v4=0;v5=0;v6=0;v7=0;v8=0; + shift=0;h=0; + } + + final public void cz3(){ + if (v0<0||v1<0||v2<0) { h=-1;return;} + + h= v0+v1*(shift =a0)+(long)v2*(shift *=a1); + shift *=a2; + } + + final public long c3(){ + if (v0<0||v1<0||v2<0) { h=-1;return h;} + + h= v0+v1*(shift =a0)+(long)v2*(shift *=a1); + shift *=a2; + return h; + } + + final public void cz4(){ + if (v0<0||v1<0||v2<0||v3<0) {h=-1;return;} + + h =v0+v1*(shift =a0)+v2*(shift *=a1)+v3*(shift *=a2); + shift *=a3; + } + + final public long c4(){ + if (v0<0||v1<0||v2<0||v3<0) {h=-1;return h;} + + h =v0+v1*(shift =a0)+v2*(shift *=a1)+v3*(shift *=a2); + shift *=a3; + return h; + } + + + final public void cz5(){ + + if (v0<0||v1<0||v2<0||v3<0||v4<0) {h=-1;return;} + + h =v0+v1*(shift =a0)+v2*(shift *=a1)+v3*(shift*=a2)+v4*(shift*=a3); + shift*=a4; + + } + + final public long c5(){ + + if (v0<0||v1<0||v2<0||v3<0||v4<0) {h=-1;return h;} + + h =v0+v1*(shift =a0)+v2*(shift *=a1)+v3*(shift *=a2)+v4*(shift*=a3); + shift*=a4; + return h; + } + + + final public void cz6(){ + + if (v0<0||v1<0||v2<0||v3<0||v4<0||v5<0) {h=-1; return;} + + h =v0+v1*(shift =a0)+v2*(shift *=a1)+v3*(shift *=a2); + h +=v4*(shift*=a3)+v5*(shift*=a4); + shift*=a5; + } + + final public long c6(){ + + if (v0<0||v1<0||v2<0||v3<0||v4<0||v5<0) {h=-1; return h;} + + h =v0+v1*(shift =a0)+v2*(shift *=a1)+v3*(shift *=a2); + h +=v4*(shift*=a3)+v5*(shift*=a4); + shift*=a5; + return h; + } + + + final public long cs(int b, int v) { + if (h<0) {h=-1; return h;} + + h += v*shift; + shift *=b; + return h; + + } + + final public void csa(int b, int v, IFV f) { + if (h<0) {h=-1; return;} + + h += v*shift; + shift *=b; + f.add(_li.l2i(h)); + } + + final public long csa(int b, int v) { + if (h<0) {h=-1; return-1; } + + h += v*shift; + shift *=b; + return h; + } + + public final long getVal(){ + return h; + } + + public final void map(IFV f, long l){ + if (l>0) f.add(this._li.l2i(l)); + } + + /** + * @param f + */ + final public void add(IFV f) { + f.add(_li.l2i(h)); + } + + final public void cz7() { + if (v0<0||v1<0||v2<0||v3<0||v4<0||v5<0||v6<0) {h=-1; return;} + + h =v0+v1*(shift =a0)+v2*(shift *=a1)+v3*(shift *=a2); + h +=v4*(shift*=a3)+v5*(shift*=a4)+v6*(shift*=a5); + shift*=a6; + + } + + final public long c7() { + if (v0<0||v1<0||v2<0||v3<0||v4<0||v5<0||v6<0) {h=-1; return h;} + + h =v0+v1*(shift =a0)+v2*(shift *=a1)+v3*(shift *=a2); + h +=v4*(shift*=a3)+v5*(shift*=a4)+v6*(shift*=a5); + shift*=a6; + return h; + } + + /** + * + */ + final public void cz8() { + if (v0<0||v1<0||v2<0||v3<0||v4<0||v5<0||v6<0||v7<0) {h=-1; return;} + + h =v0+v1*(shift =a0)+v2*(shift *=a1)+v3*(shift *=a2); + h +=v4*(shift*=a3)+v5*(shift*=a4)+v6*(shift*=a5)+v7*(shift*=a6); + shift*=a7; + } + + final public void cz9() { + if (v0<0||v1<0||v2<0||v3<0||v4<0||v5<0||v6<0||v7<0||v8<0) {h=-1; return;} + + h =v0+v1*(shift =a0)+v2*(shift *=a1)+v3*(shift *=a2); + h +=v4*(shift*=a3)+v5*(shift*=a4)+v6*(shift*=a5)+v7*(shift*=a6)+v8*(shift*=a7); + shift*=a8; + } + + + /* (non-Javadoc) + * @see is2.data.DX#computeLabeValue(short, short) + */ + @Override + public int computeLabeValue(int label, int shift) { + return label*shift; + } + + + public void fix() { + + } + + +} \ No newline at end of file diff --git a/dependencyParser/basic/mate-tools/src/is2/data/D6.java b/dependencyParser/basic/mate-tools/src/is2/data/D6.java new file mode 100644 index 0000000..3694249 --- /dev/null +++ b/dependencyParser/basic/mate-tools/src/is2/data/D6.java @@ -0,0 +1,197 @@ +/** + * + */ +package is2.data; + +import is2.util.DB; + +/** + * @author Dr. Bernd Bohnet, 30.10.2010 + * + * This class computes the mapping of features to the weight vector. + */ +final public class D6 extends DX { + private long shift; + private long h; + + + private final Long2IntInterface _li; + public D6(Long2IntInterface li) { + _li=li; + } + + boolean fixed =false; + + public void fix() { + + if (fixed) { + DB.println("warning: already fixed"); + // return; + } + + long t0= 1, t1=a0, t2=t1*a1, t3=t2*a2,t4=t3*a3, t5=t4*a4,t6=t5*a5, t7=t6*a6, t8=t7*a7, t9=t8*a8; + + + + + a0=t0;a1=t1;a2=t2;a3=t3;a4=t4;a5=t5;a6=t6;a7=t7;a8=t8; a9=t9; + + fixed=true; + } + + + + final public void clean() { + v0=0;v1=0;v2=0;v3=0;v4=0;v5=0;v6=0;v7=0;v8=0; + shift=0;h=0; + } + + final public void cz3(){ + if (v0<0||v1<0||v2<0) { h=-1;return;} + + h= v0+v1*a1+v2*a2; + shift =a3; + } + + final public long c3(){ + if (v0<0||v1<0||v2<0) { h=-1;return h;} + + h= v0+v1*a1+v2*a2; + shift =a3; + return h; + } + + final public void cz4(){ + if (v0<0||v1<0||v2<0||v3<0) {h=-1;return;} + + h =v0+v1*a1+v2*a2+v3*a3; + shift =a4; + } + + final public long c4(){ + if (v0<0||v1<0||v2<0||v3<0) {h=-1;return h;} + + h =v0+v1*a1+v2*a2+v3*a3; + shift =a4; + return h; + } + + + final public void cz5(){ + + if (v0<0||v1<0||v2<0||v3<0||v4<0) {h=-1;return;} + + h =v0+v1*a1+v2*a2+v3*a3+v4*a4; + shift=a5; + + } + + final public long c5(){ + + if (v0<0||v1<0||v2<0||v3<0||v4<0) {h=-1;return h;} + + h =v0+v1*a1+v2*a2+v3*a3+v4*a4; + shift=a5; + return h; + } + + + final public void cz6(){ + + if (v0<0||v1<0||v2<0||v3<0||v4<0||v5<0) {h=-1; return;} + + h =v0+v1*a1+v2*a2+v3*a3 +v4*a4+v5*a5; + shift=a6; + } + + final public long c6(){ + + if (v0<0||v1<0||v2<0||v3<0||v4<0||v5<0) {h=-1; return h;} + + h =v0+v1*a1+v2*a2+v3*a3 +v4*a4+v5*a5; + shift=a6; + return h; + } + + + final public long cs(int b, int v) { + if (h<0) {h=-1; return h;} + + h += v*shift; + shift *=b; + return h; + + } + + final public void csa(int b, int v, IFV f) { + if (h<0) {h=-1; return;} + + h += v*shift; + shift *=b; + f.add(_li.l2i(h)); + } + + final public long csa(int b, int v) { + if (h<0) {h=-1; return-1; } + + h += v*shift; + shift *=b; + return h; + } + + public final long getVal(){ + return h; + } + + public final void map(IFV f, long l){ + if (l>0) f.add(this._li.l2i(l)); + } + + /** + * @param f + */ + final public void add(IFV f) { + f.add(_li.l2i(h)); + } + + final public void cz7() { + if (v0<0||v1<0||v2<0||v3<0||v4<0||v5<0||v6<0) {h=-1; return;} + + h =v0+v1*a1+v2*a2+v3*a3 +v4*a4+v5*a5+v6*a6; + shift=a7; + + } + + final public long c7() { + if (v0<0||v1<0||v2<0||v3<0||v4<0||v5<0||v6<0) {h=-1; return h;} + + h =v0+v1*a1+v2*a2+v3*a3 +v4*a4+v5*a5+v6*a6; + shift=a7; + return h; + } + + /** + * + */ + final public void cz8() { + if (v0<0||v1<0||v2<0||v3<0||v4<0||v5<0||v6<0||v7<0) {h=-1; return;} + + h =v0+v1*a1+v2*a2+v3*a3 +v4*a4+v5*a5+v6*a6+v7*a7; + shift=a8; + } + + + + /* (non-Javadoc) + * @see is2.data.DX#computeLabeValue(short, short) + */ + @Override + public int computeLabeValue(int label, int shift) { + return label*shift; + } + + + + + +} \ No newline at end of file diff --git a/dependencyParser/basic/mate-tools/src/is2/data/D7.java b/dependencyParser/basic/mate-tools/src/is2/data/D7.java new file mode 100644 index 0000000..f4675d8 --- /dev/null +++ b/dependencyParser/basic/mate-tools/src/is2/data/D7.java @@ -0,0 +1,220 @@ +/** + * + */ +package is2.data; + + +/** + * @author Dr. Bernd Bohnet, 30.10.2010 + * + * This class computes the mapping of features to the weight vector. + */ +final public class D7 extends DX { + + private long shift; + private long h; + private final Long2IntInterface _li; + + public D7(Long2IntInterface li) { + _li=li; + } + + boolean fixed =false; + + public void fix() { + + long t0= 1, t1=a0, t2=t1*a1, t3=t2*a2,t4=t3*a3, t5=t4*a4,t6=t5*a5, t7=t6*a6, t8=t7*a7, t9=t8*a8; + + a0=t0;a1=t1;a2=t2;a3=t3;a4=t4;a5=t5;a6=t6;a7=t7;a8=t8; a9=t9; + + } + + + + final public void clean() { + v0=0;v1=0;v2=0;v3=0;v4=0;v5=0;v6=0;v7=0;v8=0; + shift=0;h=0; + } + + final public void cz3(){ + if (v2<0) { h=-1;return;} + + h= v0+v1*a1+v2*a2; + shift =a3; + } + + final public long c3(){ + if (v2<0) { h=-1;return h;} + + h= v0+v1*a1+v2*a2; + shift =a3; + return h; + } + + final public long d3(){ + if (v2<0)return -1; + return v0+v2*a2; + } + + final public void cz4(){ + // if (v0<0||v1<0||v2<0||v3<0) {h=-1;return;} + if (v2<0||v3<0) {h=-1;return;} + + h =v0+v1*a1+v2*a2+v3*a3; + shift =a4; + } + + final public long c4(){ + if (v2<0||v3<0) {h=-1;return h;} + + h =v0+v1*a1+v2*a2+v3*a3; + shift =a4; + return h; + } + + + final public long d4(){ + if (v2<0||v3<0) return -1; + return v0+v2*a2+v3*a3; + } + + + final public void cz5(){ + + if (v2<0||v3<0||v4<0) {h=-1;return;} + + h =v0+v1*a1+v2*a2+v3*a3+v4*a4; + shift=a5; + + } + + final public long c5(){ + + if (v2<0||v3<0||v4<0) {h=-1;return h;} + + h =v0+v1*a1+v2*a2+v3*a3+v4*a4; + shift=a5; + return h; + } + + final public long d5(){ + if (v2<0||v3<0||v4<0) return -1; + return v0+v2*a2+v3*a3+v4*a4; + } + + + final public void cz6(){ + + if (v0<0||v1<0||v2<0||v3<0||v4<0||v5<0) {h=-1; return;} + + h =v0+v1*a1+v2*a2+v3*a3 +v4*a4+v5*a5; + shift=a6; + } + + final public long c6(){ + + if (v2<0||v3<0||v4<0||v5<0) {h=-1; return h;} + + h =v0+v1*a1+v2*a2+v3*a3 +v4*a4+v5*a5; + shift=a6; + return h; + } + + final public long d6(){ + if (v2<0||v3<0||v4<0||v5<0) return -1; + return v0+v2*a2+v3*a3 +v4*a4+v5*a5; + } + + + final public long cs(int b, int v) { + if (h<0) {h=-1; return h;} + + h += v*shift; + shift *=b; + return h; + + } + + final public void csa(int b, int v, IFV f) { + if (h<0) {h=-1; return;} + + h += v*shift; + shift *=b; + f.add(_li.l2i(h)); + } + + final public long csa(int b, int v) { + if (h<0) {h=-1; return-1; } + + h += v*shift; + shift *=b; + return h; + } + + public final long getVal(){ + return h; + } + + public final void map(IFV f, long l){ + if (l>0) f.add(this._li.l2i(l)); + } + + /** + * @param f + */ + final public void add(IFV f) { + f.add(_li.l2i(h)); + } + + final public void cz7() { + if (v0<0||v1<0||v2<0||v3<0||v4<0||v5<0||v6<0) {h=-1; return;} + + h =v0+v1*a1+v2*a2+v3*a3 +v4*a4+v5*a5+v6*a6; + shift=a7; + + } + + + final public long c7() { + if (v2<0||v3<0||v4<0||v5<0||v6<0) {h=-1; return h;} + + h =v0+v1*a1+v2*a2+v3*a3 +v4*a4+v5*a5+v6*a6; + shift=a7; + return h; + } + + final public long d7() { + if (v2<0||v3<0||v4<0||v5<0||v6<0) return -1; + return v0+v2*a2+v3*a3 +v4*a4+v5*a5+v6*a6; + } + + /** + * + */ + final public void cz8() { + if (v0<0||v1<0||v2<0||v3<0||v4<0||v5<0||v6<0||v7<0) {h=-1; return;} + + h =v0+v1*a1+v2*a2+v3*a3 +v4*a4+v5*a5+v6*a6+v7*a7; + shift=a8; + } + + final public long d8() { + if (v2<0||v3<0||v4<0||v5<0||v6<0||v7<0) {return-1;} + return v0+v2*a2+v3*a3 +v4*a4+v5*a5+v6*a6+v7*a7; + } + + + + /* (non-Javadoc) + * @see is2.data.DX#computeLabeValue(short, short) + */ + @Override + public int computeLabeValue(int label, int shift) { + return label*shift; + } + + + + + +} \ No newline at end of file diff --git a/dependencyParser/basic/mate-tools/src/is2/data/DPSTree.java b/dependencyParser/basic/mate-tools/src/is2/data/DPSTree.java new file mode 100644 index 0000000..554f756 --- /dev/null +++ b/dependencyParser/basic/mate-tools/src/is2/data/DPSTree.java @@ -0,0 +1,115 @@ +/** + * + */ +package is2.data; + +import is2.util.DB; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.Stack; + +/** + * @author Dr. Bernd Bohnet, 17.01.2011 + * + * Dynamic phrase structure tree. + */ +public class DPSTree { + + + private int size=0; + + public int[] heads; + public int[] labels; + + public DPSTree() { + this(30); + } + + public DPSTree(int initialCapacity) { + heads = new int[initialCapacity]; + labels = new int[initialCapacity]; + } + + + /** + * Increases the capacity of this <tt>Graph</tt> instance, if + * necessary, to ensure that it can hold at least the number of nodes + * specified by the minimum capacity argument. + * + * @param minCapacity the desired minimum capacity. + */ + private void ensureCapacity(int minCapacity) { + + + if (minCapacity > heads.length) { + + int newCapacity =minCapacity + 1; + + if (newCapacity < minCapacity) newCapacity = minCapacity; + int oldIndex[] = heads; + heads = new int[newCapacity]; + System.arraycopy(oldIndex, 0, heads, 0, oldIndex.length); + + oldIndex = labels; + labels = new int[newCapacity]; + System.arraycopy(oldIndex, 0, labels, 0, oldIndex.length); + + } + } + + + final public int size() { + return size; + } + + + final public boolean isEmpty() { + return size == 0; + } + + final public void clear() { + size = 0; + } + + final public void createTerminals(int terminals) { + ensureCapacity(terminals+1); + size= terminals+1; + } + + final public int create(int phrase) { + + ensureCapacity(size+1); + labels[size] =phrase; + size++; + return size-1; + } + + public int create(int phrase, int nodeId) { + + if (nodeId<0) return this.create(phrase); +// DB.println("create phrase "+nodeId+" label "+phrase); + ensureCapacity(nodeId+1); + labels[nodeId] =phrase; + if (size<nodeId) size=nodeId+1; + return nodeId; + } + + public void createEdge(int i, int j) { + heads[i] =j; +// DB.println("create edge "+i+"\t "+j); + } + + public DPSTree clone() { + DPSTree ps = new DPSTree(this.size+1); + + for(int k=0;k<size;k++) { + ps.heads[k] = heads[k]; + ps.labels[k] = labels[k]; + } + ps.size=size; + return ps; + + } + +} \ No newline at end of file diff --git a/dependencyParser/basic/mate-tools/src/is2/data/DX.java b/dependencyParser/basic/mate-tools/src/is2/data/DX.java new file mode 100644 index 0000000..c357b58 --- /dev/null +++ b/dependencyParser/basic/mate-tools/src/is2/data/DX.java @@ -0,0 +1,58 @@ +/** + * + */ +package is2.data; + +import is2.data.IFV; + +/** + * @author Dr. Bernd Bohnet, 30.08.2011 + * + * + */ +public abstract class DX { + + public long a0,a1,a2,a3,a4,a5,a6,a7,a8,a9; + public long v0,v1,v2,v3,v4,v5,v6,v7,v8,v9; + + public abstract void cz3(); + + public abstract void cz4(); + + public abstract void cz5(); + + public abstract void cz6(); + + public abstract void cz7(); + + public abstract void cz8(); + + public abstract void clean(); + + public abstract long cs(int b, int v); + + public abstract long csa(int b, int v); + + public abstract void csa(int b, int v, IFV f); + + /** + * @return + */ + public abstract long getVal(); + + /** + * @param f + * @param l + */ + public abstract void map(IFV f, long l); + + /** + * @param label + * @param s_type + * @return + */ + public abstract int computeLabeValue(int label,int s_type) ; + + public abstract void fix(); + +} \ No newline at end of file diff --git a/dependencyParser/basic/mate-tools/src/is2/data/DataF.java b/dependencyParser/basic/mate-tools/src/is2/data/DataF.java new file mode 100755 index 0000000..f127fbd --- /dev/null +++ b/dependencyParser/basic/mate-tools/src/is2/data/DataF.java @@ -0,0 +1,39 @@ +package is2.data; + + + +final public class DataF { + + final public short typesLen; + final public int len; + + // first order features + final public float[][] pl; + + // remove !!!! +// final public float[][] highestLab; + + //final public FV[][][] label; + final public float[][][][] lab; + + + public FV fv; + + final public float[][][][][] sib; + + final public float[][][][][] gra; + + + public DataF(int length, short types) { + typesLen=types; + len =length; + + pl = new float[length][length]; + lab = new float[length][length][types][2]; + // highestLab = new float[length][length]; + + sib = new float[length][length][length][2][]; + gra = new float[length][length][length][2][]; + + } +} diff --git a/dependencyParser/basic/mate-tools/src/is2/data/DataFES.java b/dependencyParser/basic/mate-tools/src/is2/data/DataFES.java new file mode 100644 index 0000000..9772858 --- /dev/null +++ b/dependencyParser/basic/mate-tools/src/is2/data/DataFES.java @@ -0,0 +1,38 @@ +package is2.data; + + + +final public class DataFES { + + final public short typesLen; + final public int len; + + // first order features + final public float[][] pl; + + // remove !!!! +// final public float[][] highestLab; + + //final public FV[][][] label; + final public float[][][] lab; + + + public FV fv; + + final public float[][][][] sib; + + final public float[][][][] gra; + + + public DataFES(int length, short types) { + typesLen=types; + len =length; + + pl = new float[length][length]; + lab = new float[length][length][types]; + + sib = new float[length][length][length][]; + gra = new float[length][length][length][]; + + } +} diff --git a/dependencyParser/basic/mate-tools/src/is2/data/DataT.java b/dependencyParser/basic/mate-tools/src/is2/data/DataT.java new file mode 100644 index 0000000..47691f8 --- /dev/null +++ b/dependencyParser/basic/mate-tools/src/is2/data/DataT.java @@ -0,0 +1,25 @@ +package is2.data; + + + +final public class DataT { + + final public short typesLen; + final public int len; + + + //final public FV[][][] label; + // a b lab op + final public float[][][][] lab; + + + + public DataT(int length, short types) { + typesLen=types; + len =length; + + lab = new float[length][length][types][4]; + + + } +} diff --git a/dependencyParser/basic/mate-tools/src/is2/data/Edges.java b/dependencyParser/basic/mate-tools/src/is2/data/Edges.java new file mode 100644 index 0000000..f8b2ef9 --- /dev/null +++ b/dependencyParser/basic/mate-tools/src/is2/data/Edges.java @@ -0,0 +1,224 @@ +/** + * + */ +package is2.data; + + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; +import java.util.Comparator; +import java.util.HashMap; +import java.util.Map.Entry; + +/** + * @author Dr. Bernd Bohnet, 13.05.2009; + * + * + */ +public final class Edges { + + + private static short[][][][] edges; + private static HashMap<Short,Integer> labelCount = new HashMap<Short,Integer>(); + + private static HashMap<String,Integer> slabelCount = new HashMap<String,Integer>(); + + + static short[] def = new short[1]; + + private Edges () {} + + /** + * @param length + */ + public static void init(int length) { + edges = new short[length][length][2][]; + } + + + public static void findDefault(){ + + int best =0; + + + + for(Entry<Short,Integer> e : labelCount.entrySet()) { + + + if (best<e.getValue()) { + best = e.getValue(); + def[0]=e.getKey(); + } + } + + + // labelCount=null; + // String[] types = new String[mf.getFeatureCounter().get(PipeGen.REL)]; + // for (Entry<String, Integer> e : MFO.getFeatureSet().get(PipeGen.REL).entrySet()) types[e.getValue()] = e.getKey(); + + is2.util.DB.println("set default label to "+def[0]+" " ); + + // System.out.println("found default "+def[0]); + + } + + + final static public void put(int pos1, int pos2, boolean dir, short label) { + putD(pos1, pos2,dir, label); + // putD(pos2, pos1,!dir, label); + } + + + final static public void putD(int pos1, int pos2, boolean dir, short label) { + + Integer lc = labelCount.get(label); + if (lc==null) labelCount.put(label, 1); + else labelCount.put(label, lc+1); + + String key = pos1+"-"+pos2+dir+label; + Integer lcs = slabelCount.get(key); + if (lcs==null) slabelCount.put(key, 1); + else slabelCount.put(key, lcs+1); + + + if (edges[pos1][pos2][dir?0:1]==null) { + edges[pos1][pos2][dir?0:1]=new short[1]; + edges[pos1][pos2][dir?0:1][0]=label; + +// edgesh[pos1][pos2][dir?0:1] = new TIntHashSet(2); +// edgesh[pos1][pos2][dir?0:1].add(label); + } else { + short labels[] = edges[pos1][pos2][dir?0:1]; + for(short l : labels) { + //contains label already? + if(l==label) return; + } + + short[] nlabels = new short[labels.length+1]; + System.arraycopy(labels, 0, nlabels, 0, labels.length); + nlabels[labels.length]=label; + edges[pos1][pos2][dir?0:1]=nlabels; + + // edgesh[pos1][pos2][dir?0:1].add(label); + } + } + + final static public short[] get(int pos1, int pos2, boolean dir) { + + if (pos1<0 || pos2<0 || edges[pos1][pos2][dir?0:1]==null) return def; + return edges[pos1][pos2][dir?0:1]; + } + + + /** + * @param dis + */ + static public void write(DataOutputStream d) throws IOException { + + int len = edges.length; + d.writeShort(len); + + for(int p1 =0;p1<len;p1++) { + for(int p2 =0;p2<len;p2++) { + if (edges[p1][p2][0]==null) d.writeShort(0); + else { + d.writeShort(edges[p1][p2][0].length); + for(int l =0;l<edges[p1][p2][0].length;l++) { + d.writeShort(edges[p1][p2][0][l]); + } + + } + + if (edges[p1][p2][1]==null) d.writeShort(0); + else { + d.writeShort(edges[p1][p2][1].length); + for(int l =0;l<edges[p1][p2][1].length;l++) { + d.writeShort(edges[p1][p2][1][l]); + } + } + } + } + + d.writeShort(def[0]); + + } + + + /** + * @param dis + */ + public static void read(DataInputStream d) throws IOException { + int len = d.readShort(); + + edges = new short[len][len][2][]; + for(int p1 =0;p1<len;p1++) { + for(int p2 =0;p2<len;p2++) { + int ll = d.readShort(); + if (ll==0) { + edges[p1][p2][0]=null; + } else { + edges[p1][p2][0] = new short[ll]; + for(int l =0;l<ll;l++) { + edges[p1][p2][0][l]=d.readShort(); + } + } + + ll = d.readShort(); + if (ll==0) { + edges[p1][p2][1]=null; + } else { + edges[p1][p2][1] = new short[ll]; + for(int l =0;l<ll;l++) { + edges[p1][p2][1][l]=d.readShort(); + } + } + } + } + + def[0]= d.readShort(); + + } + + public static class C implements Comparator<Short> { + + public C() { + super(); + } + + String _key; + + public C(String key) { + super(); + _key=key; + } + + /* (non-Javadoc) + * @see java.util.Comparator#compare(java.lang.Object, java.lang.Object) + */ + @Override + public int compare(Short l1, Short l2) { + + // int c1 = labelCount.get(l1); + // int c2 = labelCount.get(l2); + // if (true) return c1==c2?0:c1>c2?-1:1; + + int x1 = slabelCount.get(_key+l1.shortValue()); + int x2 = slabelCount.get(_key+l2.shortValue()); + // System.out.println(x1+" "+x2); + + + return x1==x2?0:x1>x2?-1:1; + + + + } + + + + + + } + + +} diff --git a/dependencyParser/basic/mate-tools/src/is2/data/F2S.java b/dependencyParser/basic/mate-tools/src/is2/data/F2S.java new file mode 100755 index 0000000..1f1f668 --- /dev/null +++ b/dependencyParser/basic/mate-tools/src/is2/data/F2S.java @@ -0,0 +1,48 @@ +package is2.data; + + +final public class F2S extends IFV { + + private double[] parameters; + public F2S() {} + + public double score; + + /** + * @param parameters2 + */ + public F2S(double[] parameters2) { + parameters=parameters2; + } + + @Override + public void add(int i) { + if (i>0)score += parameters[i]; + } + + public void setParameters(double[] p) { + parameters =p; + } + + @Override + public void clear() { + score =0; + } + + /* (non-Javadoc) + * @see is2.IFV#getScore() + */ + @Override + public double getScore() { + return score; + } + + /* (non-Javadoc) + * @see is2.IFV#clone() + */ + @Override + public IFV clone() { + return new F2S(parameters); + } + +} diff --git a/dependencyParser/basic/mate-tools/src/is2/data/F2SD.java b/dependencyParser/basic/mate-tools/src/is2/data/F2SD.java new file mode 100755 index 0000000..45c554f --- /dev/null +++ b/dependencyParser/basic/mate-tools/src/is2/data/F2SD.java @@ -0,0 +1,44 @@ +package is2.data; + + +final public class F2SD extends IFV { + + final private double[] parameters; + + public double score =0; + + public F2SD(double[] p) { + parameters =p; + } + + + @Override + public void add(int i) { + if (i>0)score += parameters[i]; + } + + @Override + public void clear() { + score =0; + } + + + /* (non-Javadoc) + * @see is2.IFV#getScore() + */ + @Override + public double getScore() { + return score; + } + + + /* (non-Javadoc) + * @see is2.IFV#clone() + */ + @Override + public IFV clone() { + return new F2SD(parameters); + } + + +} diff --git a/dependencyParser/basic/mate-tools/src/is2/data/F2SF.java b/dependencyParser/basic/mate-tools/src/is2/data/F2SF.java new file mode 100755 index 0000000..127d775 --- /dev/null +++ b/dependencyParser/basic/mate-tools/src/is2/data/F2SF.java @@ -0,0 +1,78 @@ +package is2.data; + + +final public class F2SF extends IFV { + + final private float[] parameters; + + + + public float score =0; + + public F2SF(float[] p) { + parameters =p; + } + + @Override + final public void add(int i) { + if (i>0) score += parameters[i]; + } + + + final public void add(int[] i) { + for(int k=0;k<i.length;k++) { + if (i[k]>0) score += parameters[i[k]]; + } + } + + + final public void sub(float[] px,int i, Long2IntInterface li) { + + if (i>0) { + score -= px[li.l2i(i)]; +// score -= px[i]; + //else score -=px[]; + } + } + + + @Override + public void clear() { + score =0; + } + + + /* (non-Javadoc) + * @see is2.IFV#getScore() + */ + @Override + public double getScore() { + return score; + } + + public float getScoreF() { + return score; + } + + /* (non-Javadoc) + * @see is2.IFV#clone() + */ + @Override + public IFV clone() { + return new F2SF(this.parameters); + } + + /** + * @param l2i + */ + public void addRel(int i, float f) { + if (i>0) score += parameters[i]*f; + + } + + public int length() { + return this.parameters.length; + } + + +} diff --git a/dependencyParser/basic/mate-tools/src/is2/data/F2SP.java b/dependencyParser/basic/mate-tools/src/is2/data/F2SP.java new file mode 100644 index 0000000..515a788 --- /dev/null +++ b/dependencyParser/basic/mate-tools/src/is2/data/F2SP.java @@ -0,0 +1,76 @@ +package is2.data; + + +final public class F2SP extends IFV { + + final private float[] parameters; + + public double score =0; + + public F2SP(float[] p) { + parameters =p; + } + + @Override + final public void add(int i) { + if (i>0) score += parameters[i]; + } + + + final public void add(int[] i) { + for(int k=0;k<i.length;k++) { + if (i[k]>0) score += parameters[i[k]]; + } + } + + + final public void sub(float[] px,int i, Long2IntInterface li) { + + if (i>0) { + score -= px[li.l2i(i)]; +// score -= px[i]; + //else score -=px[]; + } + } + + + @Override + public void clear() { + score =0; + } + + + /* (non-Javadoc) + * @see is2.IFV#getScore() + */ + @Override + public double getScore() { + return score; + } + + public double getScoreF() { + return score; + } + + /* (non-Javadoc) + * @see is2.IFV#clone() + */ + @Override + public IFV clone() { + return new F2SP(this.parameters); + } + + /** + * @param l2i + */ + public void addRel(int i, float f) { + if (i>0) score += parameters[i]*f; + + } + + public int length() { + return this.parameters.length; + } + + +} diff --git a/dependencyParser/basic/mate-tools/src/is2/data/F2ST.java b/dependencyParser/basic/mate-tools/src/is2/data/F2ST.java new file mode 100644 index 0000000..2ef062b --- /dev/null +++ b/dependencyParser/basic/mate-tools/src/is2/data/F2ST.java @@ -0,0 +1,47 @@ +package is2.data; + + +final public class F2ST extends IFV { + + final private short[] parameters; + + + + public int score =0; + + public F2ST(short[] p) { + parameters =p; + } + + @Override + final public void add(int i) { + if (i>0) score += parameters[i]; + } + + @Override + public void clear() { + score =0; + } + + + /* (non-Javadoc) + * @see is2.IFV#getScore() + */ + @Override + public double getScore() { + return score; + } + + public float getScoreF() { + return score; + } + + /* (non-Javadoc) + * @see is2.IFV#clone() + */ + @Override + public IFV clone() { + return new F2ST(this.parameters); + } + +} diff --git a/dependencyParser/basic/mate-tools/src/is2/data/FV.java b/dependencyParser/basic/mate-tools/src/is2/data/FV.java new file mode 100755 index 0000000..1cfbeba --- /dev/null +++ b/dependencyParser/basic/mate-tools/src/is2/data/FV.java @@ -0,0 +1,551 @@ +package is2.data; + + + + + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; + +public final class FV extends IFV { + + private FV subfv1; + private FV subfv2; + private boolean negateSecondSubFV = false; + + private int size; + + // content of the nodes NxC + private int m_index[]; + + // type of the nodes NxT + + public FV() { + this(10); + } + + public FV(int initialCapacity) { + m_index = new int[initialCapacity]; + } + + + public FV (FV fv1, FV fv2) { + subfv1 = fv1; + subfv2 = fv2; + } + + public FV (FV fv1, FV fv2, boolean negSecond) { + this(0); + subfv1 = fv1; + subfv2 = fv2; + negateSecondSubFV = negSecond; + } + + /** + * Read a feature vector + * @param index + * @param value + */ + public FV(DataInputStream dos, int capacity) throws IOException { + this(capacity); + size= m_index.length; + + for (int i=0; i<size; i++) m_index[i] = dos.readInt(); + } + + + /** + * Read a feature vector + * @param index + * @param value + */ + public FV(DataInputStream dos) throws IOException { + this(dos.readInt()); + size= m_index.length; + + for (int i=0; i<size; i++) m_index[i] = dos.readInt(); + + + } + + /** + * Increases the capacity of this <tt>Graph</tt> instance, if + * necessary, to ensure that it can hold at least the number of nodes + * specified by the minimum capacity argument. + * + * @param minCapacity the desired minimum capacity. + */ + private void ensureCapacity(int minCapacity) { + + + if (minCapacity > m_index.length) { + + int oldIndex[] = m_index; + + int newCapacity = ( m_index.length * 3)/2 + 1; + + + if (newCapacity < minCapacity) newCapacity = minCapacity; + + m_index = new int[newCapacity]; + System.arraycopy(oldIndex, 0, m_index, 0, oldIndex.length); + + } + } + + + final public int size() { + return size; + } + + final public boolean isEmpty() { + return size == 0; + } + + @Override + final public void clear() { + size = 0; + } + + + final public int createFeature(int i, double v) { + + ensureCapacity(size+1); + m_index[size] =i; + size++; + return size-1; + } + + final public int createFeature(int i) { + + ensureCapacity(size+1); + m_index[size] =i; + size++; + return size-1; + } + + + final public int getIndex(int i) { + return m_index[i]; + } + + public void setIndex(int p, int i) { + m_index[p] = i; + } + + + /** + * Trims the capacity of this <tt>Graph</tt> instance to true size. + * An application can use this operation to minimize + * the storage of an <tt>Graph</tt> instance. + */ + public void trimToSize() { + + if (size < m_index.length) { + + + int oldIndex[] = m_index; + + m_index = new int[size]; + System.arraycopy(oldIndex, 0, m_index, 0, size); + + } + + } + + + + + + @Override + final public void add(int i) { + if (i>=0) { + ensureCapacity(size+1); + m_index[size] =i; + size++; + } + } + + final public void add(int[] i) { + + for(int k =0;k<i.length;k++) add(i[k]); + + } + + final public void put(int i, double f) { + if (i>=0) createFeature(i,f); + } + + + // fv1 - fv2 + public FV getDistVector(FV fl2) { + return new FV(this, fl2, true); + } + + + public double getScore(double[] parameters, boolean negate) { + double score = 0.0; + + if (null != subfv1) { + score += subfv1.getScore(parameters, negate); + + if (null != subfv2) { + if (negate) score += subfv2.getScore(parameters, !negateSecondSubFV); + else score += subfv2.getScore(parameters, negateSecondSubFV); + + } + } + + if (negate) for(int i=0;i<size;i++) score -= parameters[m_index[i]]; + else for(int i=0;i<size;i++) score += parameters[m_index[i]]; + + + return score; + } + + + final public float getScore(float[] parameters, boolean negate) { + float score = 0.0F; + + if (null != subfv1) { + score += subfv1.getScore(parameters, negate); + + if (null != subfv2) { + if (negate) score += subfv2.getScore(parameters, !negateSecondSubFV); + else score += subfv2.getScore(parameters, negateSecondSubFV); + + } + } + + // warning changed the the value + + if (negate) for(int i=0;i<size;i++) score -= parameters[m_index[i]];//*m_value[i]; + else for(int i=0;i<size;i++) score += parameters[m_index[i]];//*m_value[i]; + + return score; + } + + final public int getScore(short[] parameters, boolean negate) { + int score = 0; + + if (null != subfv1) { + score += subfv1.getScore(parameters, negate); + + if (null != subfv2) { + if (negate) score += subfv2.getScore(parameters, !negateSecondSubFV); + else score += subfv2.getScore(parameters, negateSecondSubFV); + + } + } + + // warning changed the value + + if (negate) for(int i=0;i<size;i++) score -= parameters[m_index[i]];//*m_value[i]; + else for(int i=0;i<size;i++) score += parameters[m_index[i]];//*m_value[i]; + + return score; + } + + + + public void update(double[] parameters, double[] total, double alpha_k, double upd) { + update(parameters, total, alpha_k, upd, false); + } + + public final void update(double[] parameters, double[] total, double alpha_k, double upd, boolean negate) { + + if (null != subfv1) { + subfv1.update(parameters, total, alpha_k, upd, negate); + + if (null != subfv2) { + if (negate) subfv2.update(parameters, total, alpha_k, upd, !negateSecondSubFV); + else subfv2.update(parameters, total, alpha_k, upd, negateSecondSubFV); + } + } + + if (negate) { + for(int i=0;i<size;i++) { + parameters[m_index[i]] -= alpha_k;//*getValue(i); + total[m_index[i]] -= upd*alpha_k;//*getValue(i); + } + } else { + for(int i=0;i<size;i++){ + parameters[m_index[i]] += alpha_k;//*getValue(i); + total[m_index[i]] += upd*alpha_k;//*getValue(i); + } + } + + + } + + public final void update(short[] parameters, short[] total, double alpha_k, double upd, boolean negate) { + + if (null != subfv1) { + subfv1.update(parameters, total, alpha_k, upd, negate); + + if (null != subfv2) { + if (negate) subfv2.update(parameters, total, alpha_k, upd, !negateSecondSubFV); + else subfv2.update(parameters, total, alpha_k, upd, negateSecondSubFV); + } + } + + if (negate) { + for(int i=0;i<size;i++) { + parameters[m_index[i]] -= alpha_k;//*getValue(i); + total[m_index[i]] -= upd*alpha_k;//*getValue(i); + } + } else { + for(int i=0;i<size;i++){ + parameters[m_index[i]] += alpha_k;//*getValue(i); + total[m_index[i]] += upd*alpha_k;//*getValue(i); + } + } + + + } + + + public final void update(float[] parameters, float[] total, double alpha_k, double upd, boolean negate) { + + if (null != subfv1) { + subfv1.update(parameters, total, alpha_k, upd, negate); + + if (null != subfv2 && negate) { + subfv2.update(parameters, total, alpha_k, upd, !negateSecondSubFV); + } else { + subfv2.update(parameters, total, alpha_k, upd, negateSecondSubFV); + } + + } + + if (negate) { + for(int i=0;i<size;i++){ + parameters[getIndex(i)] -= alpha_k; + total[getIndex(i)] -= upd*alpha_k; + } + } else { + for(int i=0;i<size;i++){ + parameters[getIndex(i)] += alpha_k; + total[getIndex(i)] += upd*alpha_k; // + } + } + + + } + + + public final void update(float[] parameters, float[] total, double alpha_k, + double upd, boolean negate, float[] totalp, Long2IntInterface li) { + + if (null != subfv1) { + subfv1.update(parameters, total, alpha_k, upd, negate,totalp,li); + + if (null != subfv2 && negate) { + subfv2.update(parameters, total, alpha_k, upd, !negateSecondSubFV,totalp,li); + } else { + subfv2.update(parameters, total, alpha_k, upd, negateSecondSubFV,totalp,li); + } + } + + if (negate) { + for(int i=0;i<size;i++){ + parameters[getIndex(i)] -= alpha_k; + total[getIndex(i)] -= upd*alpha_k; + + totalp[li.l2i(getIndex(i))] -=upd*alpha_k; + // totalp[getIndex(i)] -=upd*alpha_k; + } + } else { + for(int i=0;i<size;i++){ + parameters[getIndex(i)] += alpha_k; + total[getIndex(i)] += upd*alpha_k; // + + totalp[li.l2i(getIndex(i))] +=upd*alpha_k; + // totalp[getIndex(i)] +=upd*alpha_k; + } + } + } + + + + + private static IntIntHash hm1; + private static IntIntHash hm2; + + public int dotProduct(FV fl2) { + + if (hm1==null) hm1 = new IntIntHash(size(),0.4F); + else hm1.clear(); + + addFeaturesToMap(hm1); + + if (hm2==null)hm2 = new IntIntHash(fl2.size,0.4F); + else hm2.clear(); + + fl2.addFeaturesToMap(hm2); + + int[] keys = hm1.keys(); + + int result = 0; + for(int i = 0; i < keys.length; i++) result += hm1.get(keys[i])*hm2.get(keys[i]); + + return result; + + } + + public double twoNorm(FV fl2) { + + if (hm1==null) hm1 = new IntIntHash(size(),0.4F); + else hm1.clear(); + + addFeaturesToMap(hm1); + + if (hm2==null)hm2 = new IntIntHash(fl2.size,0.4F); + else hm2.clear(); + + fl2.addFeaturesToMap(hm2); + + int[] keys = hm1.keys(); + + int result = 0; + for(int i = 0; i < keys.length; i++) result += hm1.get(keys[i])*hm2.get(keys[i]); + + + return Math.sqrt((double)result); + + + } + + public void addFeaturesToMap(IntIntHash map) { + + if (null != subfv1) { + subfv1.addFeaturesToMap(map); + + if (null != subfv2) { + subfv2.addFeaturesToMap(map, negateSecondSubFV); + + } + } + + + for(int i=0;i<size;i++) if (!map.adjustValue(getIndex(i), 1)) map.put(getIndex(i), 1); + + + + } + + + + private void addFeaturesToMap(IntIntHash map, boolean negate) { + + if (null != subfv1) { + subfv1.addFeaturesToMap(map, negate); + + if (null != subfv2) { + if (negate) subfv2.addFeaturesToMap(map, !negateSecondSubFV); + else subfv2.addFeaturesToMap(map, negateSecondSubFV); + + } + } + + if (negate) { + for(int i=0;i<size;i++) if (!map . adjustValue(getIndex(i), -1)) map.put(getIndex(i), -1); + } else { + for(int i=0;i<size;i++) if (!map.adjustValue(getIndex(i), 1)) map.put(getIndex(i), 1); + } + + + } + + + @Override + public final String toString() { + StringBuilder sb = new StringBuilder(); + toString(sb); + return sb.toString(); + } + + private final void toString(StringBuilder sb) { + if (null != subfv1) { + subfv1.toString(sb); + + if (null != subfv2) + subfv2.toString(sb); + } + for(int i=0;i<size;i++) + sb.append(getIndex(i)).append(' '); + } + + public void writeKeys(DataOutputStream dos) throws IOException { + + // int keys[] = keys(); + // dos.writeInt(keys.length); + // for(int i=0;i<keys.length;i++) { + // dos.writeInt(keys[i]); + // } + + + //int keys[] = keys(); + dos.writeInt(size); + for(int i=0;i<size;i++) { + dos.writeInt(m_index[i]); + } + + } + + public void readKeys(DataInputStream dos) throws IOException { + + int keys = dos.readInt(); + for (int i=0; i<keys; i++) createFeature(dos.readInt(), 1.0); + + + } + + final public static FV cat(FV f1,FV f2) { + if (f1==null) return f2; + if (f2==null) return f1; + return new FV(f1, f2); + } + + final public static FV cat(FV f1,FV f2, FV f3) { + return FV.cat(f1, FV.cat(f2, f3)); + } + final public static FV cat(FV f1,FV f2, FV f3, FV f4) { + return FV.cat(f1, FV.cat(f2, FV.cat(f3, f4))); + } + + + final public static FV read(DataInputStream dis) throws IOException { + int cap = dis.readInt(); + if (cap == 0) return null; + return new FV(dis,cap); + + } + + /* (non-Javadoc) + * @see is2.IFV#getScore() + */ + @Override + public double getScore() { + //System.out.println("not implemented"); + // TODO Auto-generated method stub + return 0; + } + + /* (non-Javadoc) + * @see is2.IFV#clone() + */ + @Override + public IFV clone() { + FV f= new FV(this.size); + for(int i=0;i<this.size;i++) { + f.m_index[i]=m_index[i]; + } + f.size=this.size; + return f; + } + + + +} diff --git a/dependencyParser/basic/mate-tools/src/is2/data/FVR.java b/dependencyParser/basic/mate-tools/src/is2/data/FVR.java new file mode 100644 index 0000000..f0b6784 --- /dev/null +++ b/dependencyParser/basic/mate-tools/src/is2/data/FVR.java @@ -0,0 +1,468 @@ +package is2.data; + + + +import gnu.trove.TIntDoubleHashMap; + + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; + +public final class FVR extends IFV { + + private FVR subfv1; + private FVR subfv2; + private boolean negateSecondSubFV = false; + + private int size; + + + + // content of the nodes NxC + private int m_index[]; + private float m_value[]; + + // type of the nodes NxT + + public FVR() { + this(10); + } + + public FVR(int initialCapacity) { + m_index = new int[initialCapacity]; + m_value = new float[initialCapacity]; + } + +/* + public FVR (FVR fv1, FVR fv2) { + subfv1 = fv1; + subfv2 = fv2; + } +*/ + public FVR (FVR fv1, FVR fv2, boolean negSecond) { + this(0); + subfv1 = fv1; + subfv2 = fv2; + negateSecondSubFV = negSecond; + } + + /** + * Read a feature vector + * @param index + * @param value + */ + public FVR(DataInputStream dos, int capacity) throws IOException { + this(capacity); + size= m_index.length; + + for (int i=0; i<size; i++) m_index[i] = dos.readInt(); + } + + + /** + * Read a feature vector + * @param index + * @param value + */ + public FVR(DataInputStream dos) throws IOException { + this(dos.readInt()); + size= m_index.length; + + for (int i=0; i<size; i++) m_index[i] = dos.readInt(); + + + } + + /** + * Increases the capacity of this <tt>Graph</tt> instance, if + * necessary, to ensure that it can hold at least the number of nodes + * specified by the minimum capacity argument. + * + * @param minCapacity the desired minimum capacity. + */ + private void ensureCapacity(int minCapacity) { + + + if (minCapacity > m_index.length) { + + int oldIndex[] = m_index; + float oldValue[] = m_value; + + int newCapacity = ( m_index.length * 3)/2 + 1; + + + if (newCapacity < minCapacity) newCapacity = minCapacity; + + m_index = new int[newCapacity]; + m_value = new float[newCapacity]; + + System.arraycopy(oldIndex, 0, m_index, 0, oldIndex.length); + System.arraycopy(oldValue, 0, m_value, 0, oldValue.length); + + } + } + + + final public int size() { + return size; + } + + final public boolean isEmpty() { + return size == 0; + } + + @Override + final public void clear() { + size = 0; + } + + + final public int createFeature(int i, float v) { + + ensureCapacity(size+1); + m_index[size] =i; + m_value[size] =v; + size++; + return size-1; + } + /* + final public int createFeature(int i) { + + ensureCapacity(size+1); + m_index[size] =i; + size++; + return size-1; + } + */ + + final public int getIndex(int i) { + return m_index[i]; + } + + public void setIndex(int p, int i) { + m_index[p] = i; + } + + + /** + * Trims the capacity of this <tt>Graph</tt> instance to true size. + * An application can use this operation to minimize + * the storage of an <tt>Graph</tt> instance. + */ + public void trimToSize() { + + if (size < m_index.length) { + + + int oldIndex[] = m_index; + + m_index = new int[size]; + System.arraycopy(oldIndex, 0, m_index, 0, size); + + } + + } + + + + + + final public void add(int i) { + if (i>=0) { + ensureCapacity(size+1); + m_index[size] =i; + m_value[size] =1.0f; + size++; + } + } + + final public void add(int i, float f) { + if (i>=0) createFeature(i,f); + } + + + // fv1 - fv2 + public FVR getDistVector(FVR fl2) { + return new FVR(this, fl2, true); + } + + + public double getScore(double[] parameters, boolean negate) { + double score = 0.0; + + if (null != subfv1) { + score += subfv1.getScore(parameters, negate); + + if (null != subfv2) { + if (negate) score += subfv2.getScore(parameters, !negateSecondSubFV); + else score += subfv2.getScore(parameters, negateSecondSubFV); + + } + } + + if (negate) for(int i=0;i<size;i++) score -= parameters[m_index[i]]; + else for(int i=0;i<size;i++) score += parameters[m_index[i]]; + + + return score; + } + + + final public float getScore(float[] parameters, boolean negate) { + float score = 0.0F; + + if (null != subfv1) { + score += subfv1.getScore(parameters, negate); + + if (null != subfv2) { + if (negate) score += subfv2.getScore(parameters, !negateSecondSubFV); + else score += subfv2.getScore(parameters, negateSecondSubFV); + + } + } + + // warning changed the value + + if (negate) for(int i=0;i<size;i++) score -= parameters[m_index[i]]*m_value[i]; + else for(int i=0;i<size;i++) score += parameters[m_index[i]]*m_value[i]; + + return score; + } + + final public int getScore(short[] parameters, boolean negate) { + int score = 0; + + if (null != subfv1) { + score += subfv1.getScore(parameters, negate); + + if (null != subfv2) { + if (negate) score += subfv2.getScore(parameters, !negateSecondSubFV); + else score += subfv2.getScore(parameters, negateSecondSubFV); + + } + } + + // warning changed the value + + if (negate) for(int i=0;i<size;i++) score -= parameters[m_index[i]]*m_value[i]; + else for(int i=0;i<size;i++) score += parameters[m_index[i]]*m_value[i]; + + return score; + } + + + + + + + public final void update(float[] parameters, float[] total, double alpha_k, double upd, boolean negate) { + + if (null != subfv1) { + subfv1.update(parameters, total, alpha_k, upd, negate); + + if (null != subfv2 && negate) { + subfv2.update(parameters, total, alpha_k, upd, !negateSecondSubFV); + } else { + subfv2.update(parameters, total, alpha_k, upd, negateSecondSubFV); + } + + } + + if (negate) { + for(int i=0;i<size;i++){ + parameters[getIndex(i)] -= alpha_k*m_value[i]; + total[getIndex(i)] -= upd*alpha_k*m_value[i]; + } + } else { + for(int i=0;i<size;i++){ + parameters[getIndex(i)] += alpha_k*m_value[i]; + total[getIndex(i)] += upd*alpha_k*m_value[i]; // + } + } + + + } + + + +// private static IntIntHash hm1; +// private static IntIntHash hm2; + + private static TIntDoubleHashMap hd1; + private static TIntDoubleHashMap hd2; + + + public int dotProduct(FVR fl2) { + + if (hd1==null) hd1 = new TIntDoubleHashMap(size(),0.4F); + else hd1.clear(); + + addFeaturesToMap(hd1); + + if (hd2==null)hd2 = new TIntDoubleHashMap(fl2.size,0.4F); + else hd2.clear(); + + fl2.addFeaturesToMap(hd2); + + int[] keys = hd1.keys(); + + int result = 0; + for(int i = 0; i < keys.length; i++) result += hd1.get(keys[i])*hd2.get(keys[i]); + + return result; + + } + + + private void addFeaturesToMap(TIntDoubleHashMap map) { + + if (null != subfv1) { + subfv1.addFeaturesToMap(map); + + if (null != subfv2) { + subfv2.addFeaturesToMap(map, negateSecondSubFV); + + } + } + + + for(int i=0;i<size;i++) if (!map.adjustValue(getIndex(i), m_value[i])) map.put(getIndex(i), m_value[i]); + + + + } + + + + private void addFeaturesToMap(IntIntHash map, boolean negate) { + + if (null != subfv1) { + subfv1.addFeaturesToMap(map, negate); + + if (null != subfv2) { + if (negate) subfv2.addFeaturesToMap(map, !negateSecondSubFV); + else subfv2.addFeaturesToMap(map, negateSecondSubFV); + + } + } + + if (negate) { + for(int i=0;i<size;i++) if (!map . adjustValue(getIndex(i), -1)) map.put(getIndex(i), -1); + } else { + for(int i=0;i<size;i++) if (!map.adjustValue(getIndex(i), 1)) map.put(getIndex(i), 1); + } + + + } + + private void addFeaturesToMap(TIntDoubleHashMap map, boolean negate) { + + if (null != subfv1) { + subfv1.addFeaturesToMap(map, negate); + + if (null != subfv2) { + if (negate) subfv2.addFeaturesToMap(map, !negateSecondSubFV); + else subfv2.addFeaturesToMap(map, negateSecondSubFV); + + } + } + + if (negate) { + for(int i=0;i<size;i++) if (!map . adjustValue(getIndex(i), -m_value[i])) map.put(getIndex(i), -m_value[i]); + } else { + for(int i=0;i<size;i++) if (!map.adjustValue(getIndex(i), m_value[i])) map.put(getIndex(i), m_value[i]); + } + + + } + + + + @Override + public final String toString() { + StringBuilder sb = new StringBuilder(); + toString(sb); + return sb.toString(); + } + + private final void toString(StringBuilder sb) { + if (null != subfv1) { + subfv1.toString(sb); + + if (null != subfv2) + subfv2.toString(sb); + } + for(int i=0;i<size;i++) + sb.append(getIndex(i)).append('=').append(m_value[i]).append(' '); + } + + public void writeKeys(DataOutputStream dos) throws IOException { + + // int keys[] = keys(); + // dos.writeInt(keys.length); + // for(int i=0;i<keys.length;i++) { + // dos.writeInt(keys[i]); + // } + + + //int keys[] = keys(); + dos.writeInt(size); + for(int i=0;i<size;i++) { + dos.writeInt(m_index[i]); + } + + } + + /* + + final public static FVR cat(FVR f1,FVR f2) { + if (f1==null) return f2; + if (f2==null) return f1; + return new FVR(f1, f2); + } + + final public static FVR cat(FVR f1,FVR f2, FVR f3) { + return FVR.cat(f1, FVR.cat(f2, f3)); + } + final public static FVR cat(FVR f1,FVR f2, FVR f3, FVR f4) { + return FVR.cat(f1, FVR.cat(f2, FVR.cat(f3, f4))); + } + */ + + + final public static FVR read(DataInputStream dis) throws IOException { + int cap = dis.readInt(); + if (cap == 0) return null; + return new FVR(dis,cap); + + } + + /* (non-Javadoc) + * @see is2.IFV#getScore() + */ + @Override + public double getScore() { + System.out.println("not implemented"); + new Exception().printStackTrace(); + // TODO Auto-generated method stub + return 0; + } + + /* (non-Javadoc) + * @see is2.IFV#clone() + */ + @Override + public IFV clone() { + FVR f= new FVR(this.size); + for(int i=0;i<this.size;i++) { + f.m_index[i]=m_index[i]; + f.m_value[i]=m_value[i]; + } + f.size=this.size; + return f; + } + + + +} diff --git a/dependencyParser/basic/mate-tools/src/is2/data/IEncoder.java b/dependencyParser/basic/mate-tools/src/is2/data/IEncoder.java new file mode 100755 index 0000000..03c4a45 --- /dev/null +++ b/dependencyParser/basic/mate-tools/src/is2/data/IEncoder.java @@ -0,0 +1,26 @@ +/** + * + */ +package is2.data; + +import java.util.HashMap; + +/** + * @author Bernd Bohnet, 20.09.2009 + * + * + */ +public interface IEncoder { + public int getValue(String a, String v); + + /** + * @param spath + * @param substring + */ +// public int register(String spath, String substring); + + /** + * @return + */ +// public HashMap<String,Integer> getFeatureCounter(); +} diff --git a/dependencyParser/basic/mate-tools/src/is2/data/IEncoderPlus.java b/dependencyParser/basic/mate-tools/src/is2/data/IEncoderPlus.java new file mode 100644 index 0000000..2558d6e --- /dev/null +++ b/dependencyParser/basic/mate-tools/src/is2/data/IEncoderPlus.java @@ -0,0 +1,28 @@ +/** + * + */ +package is2.data; + +import java.util.HashMap; + +/** + * @author Bernd Bohnet, 20.09.2009 + * + * + */ +public interface IEncoderPlus extends IEncoder { + + final public static String NONE="<None>"; + + + /** + * @param spath + * @param substring + */ + public int register(String spath, String substring); + + /** + * @return + */ + public HashMap<String,Integer> getFeatureCounter(); +} diff --git a/dependencyParser/basic/mate-tools/src/is2/data/IFV.java b/dependencyParser/basic/mate-tools/src/is2/data/IFV.java new file mode 100755 index 0000000..28fbcfe --- /dev/null +++ b/dependencyParser/basic/mate-tools/src/is2/data/IFV.java @@ -0,0 +1,28 @@ +package is2.data; + +public abstract class IFV { + + // public double score=0; + + public abstract void add(int i); + + public abstract double getScore(); + + public abstract void clear(); + + @Override + public abstract IFV clone(); + + /** + * @param gvs + * @param li + */ + public void add(long[] gvs, Long2IntInterface li, int l) { + for(int k=0;k<gvs.length;k++) { + if (gvs[k]==Integer.MIN_VALUE) break; + if (gvs[k]>0) add(li.l2i(gvs[k]+l)); + } + } + + +} diff --git a/dependencyParser/basic/mate-tools/src/is2/data/Instances.java b/dependencyParser/basic/mate-tools/src/is2/data/Instances.java new file mode 100755 index 0000000..ccb26f9 --- /dev/null +++ b/dependencyParser/basic/mate-tools/src/is2/data/Instances.java @@ -0,0 +1,392 @@ +package is2.data; + +import java.util.BitSet; + +import is2.io.CONLLReader09; +import is2.util.DB; + + + +public class Instances { + + + public IEncoder m_encoder; + + + protected int size=0; + + protected int capacity; + + public int[][] forms; + + public int[][] plemmas; + public int[][] glemmas; + + + public short[][] heads; + public short[][] pheads; + + public short[][] labels; + public short[][] plabels; + + public short[][] gpos; + public short[][] pposs; + + + public short[][][] feats; + + + public int[][] predicat; + + + public short[][] predicateId; + + + public short[][] semposition; + + + public short[][][] arg; + + + public short[][][] argposition; + + + public BitSet[] pfill; + + + public short[][] gfeats; + public short[][] pfeats; + + + public Instances() {} + + + + + public static int m_unkown = 0; + public static int m_count = 0; + + + public static boolean m_report; + public static boolean m_found =false; + + + final public void setForm(int i, int p, String x) { + + + forms[i][p] = m_encoder.getValue(PipeGen.WORD,x); + if (forms[i][p]==-1) { + if (m_report) System.out.println("unkwrd "+x); + m_unkown++; + m_found=true; + } + m_count++; + } + + + + final public void setRel(int i, int p, String x) { + labels[i][p] = (short)m_encoder.getValue(PipeGen.REL,x); + + } + + + final public void setHead(int i, int c, int p) { + heads[i][c] =(short)p; + } + + final public int size() { + return size; + } + public void setSize(int n) { + size=n; + } + + + + + public void init(int ic, IEncoder mf) { + init(ic, mf, -1); + } + + + public void init(int ic, IEncoder mf, int version) { + capacity =ic; + m_encoder = mf; + + forms = new int[capacity][]; + plemmas = new int[capacity][]; + glemmas = new int[capacity][]; + pposs= new short[capacity][]; + + gpos= new short[capacity][]; + labels= new short[capacity][]; + heads= new short[capacity][]; + plabels= new short[capacity][]; + pheads= new short[capacity][]; + feats = new short[capacity][][]; + gfeats = new short[capacity][]; + pfeats = new short[capacity][]; + + predicat =new int[ic][]; + predicateId = new short[ic][]; + semposition = new short[ic][]; + arg= new short[ic][][]; + argposition= new short[ic][][]; + + pfill = new BitSet[ic]; + } + + + public int length(int i) { + return forms[i].length; + } + + + public int createInstance09(int length) { + + forms[size] = new int[length]; + plemmas[size] = new int[length]; + glemmas[size] = new int[length]; + + pposs[size] = new short[length]; + + gpos[size] = new short[length]; + + labels[size] = new short[length]; + heads[size] = new short[length]; + + this.pfill[size] = new BitSet(length); + + feats[size] = new short[length][]; + gfeats[size] = new short[length]; + pfeats[size] = new short[length]; + plabels[size] = new short[length]; + pheads[size] = new short[length]; + + size++; + + return size-1; + + } + +/* + public final void setPPos(int i, int p, String x) { + ppos[i][p] = (short)m_encoder.getValue(PipeGen.POS,x); + + } +*/ + + public final void setPPoss(int i, int p, String x) { + pposs[i][p] = (short)m_encoder.getValue(PipeGen.POS,x); + + } + + + public final void setGPos(int i, int p, String x) { + gpos[i][p] = (short)m_encoder.getValue(PipeGen.POS,x); + } + + + public void setLemma(int i, int p, String x) { + plemmas[i][p] = m_encoder.getValue(PipeGen.WORD,x); + } + + + public void setGLemma(int i, int p, String x) { + glemmas[i][p] = m_encoder.getValue(PipeGen.WORD,x); + } + + + public void setFeats(int i, int p, String[] fts) { + if (fts==null) { + feats[i][p] =null; + return ; + } + feats[i][p] = new short[fts.length]; + + for(int k=0;k<fts.length;k++) { + feats[i][p][k] = (short)m_encoder.getValue(PipeGen.FEAT,fts[k]); + } + + } + + + public void setFeature(int i, int p, String feature) { + if (feature==null) return; + this.gfeats[i][p]= (short) m_encoder.getValue(PipeGen.FFEATS,feature); +/* if (gfeats[i][p]==-1) { + System.out.println("+"+feature); + new Exception().printStackTrace(); + System.exit(0); + } + */ + } + public void setPFeature(int i, int p, String feature) { + if (feature==null) return; + this.pfeats[i][p]= (short) m_encoder.getValue(PipeGen.FFEATS,feature); + } + + + public int getWValue(String v) { + return m_encoder.getValue(PipeGen.WORD, v); + } + + + public final void setPRel(int i, int p, String x) { + plabels[i][p] = (short)m_encoder.getValue(PipeGen.REL,x); + } + + + public final void setPHead(int i, int c, int p) { + pheads[i][c] =(short)p; + } + +/* + public String toString(int c) { + StringBuffer s = new StringBuffer(); + for(int i=0;i<length(c);i++) { + s.append(i).append('\t').append(forms[c][i]).append("\t_\t").append(ppos[c][i]).append('\t'). + append('\t').append(heads[c][i]).append('\n'); + } + + return s.toString(); + } +*/ + + /* + public void setPos(int i, int p, String x) { + ppos[i][p] = (short)m_encoder.getValue(PipeGen.POS,x); + + } +*/ + + /** + * Create the semantic representation + * @param inst + * @param it + * @return + */ + public boolean createSem(int inst, SentenceData09 it) { + + boolean error = false; + + if (it.sem==null) return error; + + predicat[inst] = new int[it.sem.length]; + semposition[inst] = new short[it.sem.length]; + predicateId[inst] = new short[it.sem.length]; + + if (it.sem!=null) { + arg[inst] = new short[it.sem.length][]; + argposition[inst] =new short[it.sem.length][]; + } + if (it.sem==null) return error; + + // init sems + + + + + for(int i=0;i<it.sem.length;i++) { + + String pred; + short predSense =0; + if (it.sem[i].indexOf('.')>0) { + pred = it.sem[i].substring(0, it.sem[i].indexOf('.')); + predSense = (short)m_encoder.getValue(PipeGen.SENSE, it.sem[i].substring(it.sem[i].indexOf('.')+1, it.sem[i].length())); + //Short.parseShort(it.sem[i].substring(it.sem[i].indexOf('.')+1, it.sem[i].length())); + } else { + pred = it.sem[i]; + predSense=(short)m_encoder.getValue(PipeGen.SENSE, ""); + } + + predicat[inst][i] = m_encoder.getValue(PipeGen.PRED, pred); + predicateId[inst][i] = predSense; + + semposition[inst][i]=(short)it.semposition[i]; + + // this can happen too when no arguments have values + if (it.arg==null) { + // DB.println("error arg == null "+i+" sem"+it.sem[i]+" inst number "+inst); + // error =true; + continue; + } + + + // last pred(s) might have no argument + if (it.arg.length<=i) { + // DB.println("error in instance "+inst+" argument list and number of predicates different arg lists: "+it.arg.length+" preds "+sem.length); + // error =true; + continue; + } + + + // this happens from time to time, if the predicate has no arguments + if (it.arg[i]==null) { + // DB.println("error no args for pred "+i+" "+it.sem[i]+" length "+it.ppos.length); + // error =true; + continue; + } + + int argCount=it.arg[i].length; + arg[inst][i] = new short[it.arg[i].length]; + argposition[inst][i] = new short[it.arg[i].length]; + + // add the content of the argument + for(int a=0;a<argCount;a++) { + arg[inst][i][a]=(short)m_encoder.getValue(PipeGen.ARG, it.arg[i][a]); + argposition[inst][i][a]=(short)it.argposition[i][a]; + + //System.out.print(" #"+a+" pos: "+argposition[inst][i][a]+" "+it.arg[i][a]+" "); + } + //System.out.println(""); + + } + + return error; + + } + + + public int predCount(int n) { + return pfill[n].cardinality(); + } + + + /** + * @param pscnt + * @return + */ + public String print(int pscnt) { + StringBuilder s = new StringBuilder(); + + for(int i=0;i<this.length(pscnt);i++) { + s.append(i+"\t"+forms[pscnt][i]+"\t"+this.glemmas[pscnt][i]+"\t"+this.plemmas[pscnt][i]+"\t"+this.gpos[pscnt][i]+"\t" + +this.pposs[pscnt][i]+"\t"+this.gfeats[pscnt][i]+"\t"+(this.feats[pscnt][i]!=null&&this.feats[pscnt][i].length>0?this.feats[pscnt][i][0]:null)+ + "\t l "+(labels[pscnt]!=null&&labels[pscnt].length>i?labels[pscnt][i]:null)+"\t"+ + "\t"+heads[pscnt][i]+"\t"+ + (plabels[pscnt]!=null&&plabels[pscnt].length>i?plabels[pscnt][i]:null)+ + "\t"+this.predicat[pscnt][i]+"\n"); + } + return s.toString(); + } + + public String print1(int pscnt) { + StringBuilder s = new StringBuilder(); + + for(int i=0;i<this.length(pscnt);i++) { + s.append(i+"\t"+forms[pscnt][i]+"\t"+"\t"+this.plemmas[pscnt][i]+"\t"+ + +this.pposs[pscnt][i]+ + "\t l "+(labels[pscnt]!=null&&labels[pscnt].length>i?labels[pscnt][i]:null)+"\t"+ + "\t"+heads[pscnt][i]+"\t"+ + (plabels[pscnt]!=null&&plabels[pscnt].length>i?plabels[pscnt][i]:null)+ + "\n"); + } + return s.toString(); + } + + + + +} diff --git a/dependencyParser/basic/mate-tools/src/is2/data/InstancesTagger.java b/dependencyParser/basic/mate-tools/src/is2/data/InstancesTagger.java new file mode 100644 index 0000000..8079222 --- /dev/null +++ b/dependencyParser/basic/mate-tools/src/is2/data/InstancesTagger.java @@ -0,0 +1,77 @@ +/** + * + */ +package is2.data; + +import is2.data.IEncoder; +import is2.data.Instances; +import is2.data.SentenceData09; + + +/** + * @author Dr. Bernd Bohnet, 06.11.2010 + * + * + */ +public class InstancesTagger extends Instances { + + public short[][][] chars; + public int[][] formlc; + + public void init(int ic, IEncoder mf) { + super.init(ic, mf,9); + chars = new short[capacity][][]; + formlc = new int[capacity][]; + // System.out.println("create chars "+capacity ); + } + + public void fillChars(SentenceData09 instance, int i, int cend) { + chars[i] = new short[instance.length()][13]; + formlc[i] = new int[instance.length()]; + + + for(int k=0;k<instance.length();k++) { + chars[i][k][0]= (short) ( instance.forms[k].length()>0?m_encoder.getValue(PipeGen.CHAR, String.valueOf(instance.forms[k].charAt(0))):cend); + chars[i][k][1]= (short) ( instance.forms[k].length()>1?m_encoder.getValue(PipeGen.CHAR, String.valueOf(instance.forms[k].charAt(1))):cend);//m_encoder.getValue(PipeGen.CHAR, END); + chars[i][k][2]= (short) ( instance.forms[k].length()>2?m_encoder.getValue(PipeGen.CHAR, String.valueOf(instance.forms[k].charAt(2))):cend); + chars[i][k][3]= (short) ( instance.forms[k].length()>3?m_encoder.getValue(PipeGen.CHAR, String.valueOf(instance.forms[k].charAt(3))):cend); + chars[i][k][4]= (short) ( instance.forms[k].length()>4?m_encoder.getValue(PipeGen.CHAR, String.valueOf(instance.forms[k].charAt(4))):cend); + chars[i][k][5]= (short) ( instance.forms[k].length()>5?m_encoder.getValue(PipeGen.CHAR, String.valueOf(instance.forms[k].charAt(5))):cend); + + chars[i][k][6]= (short) ( instance.forms[k].length()>0?m_encoder.getValue(PipeGen.CHAR,String.valueOf(instance.forms[k].charAt(instance.forms[k].length()-1))):cend); + chars[i][k][7]= (short) ( instance.forms[k].length()>1?m_encoder.getValue(PipeGen.CHAR,String.valueOf(instance.forms[k].charAt(instance.forms[k].length()-2))):cend);//m_encoder.getValue(PipeGen.CHAR, END); + chars[i][k][8]= (short) ( instance.forms[k].length()>2?m_encoder.getValue(PipeGen.CHAR,String.valueOf(instance.forms[k].charAt(instance.forms[k].length()-3))):cend); + chars[i][k][9]= (short) ( instance.forms[k].length()>3?m_encoder.getValue(PipeGen.CHAR,String.valueOf(instance.forms[k].charAt(instance.forms[k].length()-4))):cend); + chars[i][k][10]= (short) ( instance.forms[k].length()>4?m_encoder.getValue(PipeGen.CHAR,String.valueOf(instance.forms[k].charAt(instance.forms[k].length()-5))):cend); + chars[i][k][11] = (short)instance.forms[k].length(); + chars[i][k][12] = (short) ( instance.forms[k].length()>0?m_encoder.getValue(PipeGen.CHAR, String.valueOf(instance.forms[k].charAt(0))):cend); + formlc[i][k] =m_encoder.getValue(PipeGen.WORD, instance.forms[k].toLowerCase()); + } + } + + public void fillChars(SentenceData09 instance, int i, String[] what,int cend) { + chars[i] = new short[instance.length()][13]; + formlc[i] = new int[instance.length()]; + + + for(int k=0;k<instance.length();k++) { + chars[i][k][0]= (short) m_encoder.getValue(PipeGen.CHAR, String.valueOf(what[k].charAt(0))); + chars[i][k][1]= (short) ( what[k].length()>1?m_encoder.getValue(PipeGen.CHAR, String.valueOf(what[k].charAt(1))):cend);//m_encoder.getValue(PipeGen.CHAR, END); + chars[i][k][2]= (short) ( what[k].length()>2?m_encoder.getValue(PipeGen.CHAR, String.valueOf(what[k].charAt(2))):cend); + chars[i][k][3]= (short) ( what[k].length()>3?m_encoder.getValue(PipeGen.CHAR, String.valueOf(what[k].charAt(3))):cend); + chars[i][k][4]= (short) ( what[k].length()>4?m_encoder.getValue(PipeGen.CHAR, String.valueOf(what[k].charAt(4))):cend); + chars[i][k][5]= (short) ( what[k].length()>5?m_encoder.getValue(PipeGen.CHAR, String.valueOf(what[k].charAt(5))):cend); + + chars[i][k][6]= (short) ( m_encoder.getValue(PipeGen.CHAR,String.valueOf(what[k].charAt(what[k].length()-1)))); + chars[i][k][7]= (short) ( what[k].length()>1?m_encoder.getValue(PipeGen.CHAR,String.valueOf(what[k].charAt(what[k].length()-2))):cend);//m_encoder.getValue(PipeGen.CHAR, END); + chars[i][k][8]= (short) ( what[k].length()>2?m_encoder.getValue(PipeGen.CHAR,String.valueOf(what[k].charAt(what[k].length()-3))):cend); + chars[i][k][9]= (short) ( what[k].length()>3?m_encoder.getValue(PipeGen.CHAR,String.valueOf(what[k].charAt(what[k].length()-4))):cend); + chars[i][k][10]= (short) ( what[k].length()>4?m_encoder.getValue(PipeGen.CHAR,String.valueOf(what[k].charAt(what[k].length()-5))):cend); + chars[i][k][11] = (short)what[k].length(); + formlc[i][k] =m_encoder.getValue(PipeGen.WORD, what[k].toLowerCase()); + } + } + + + +} diff --git a/dependencyParser/basic/mate-tools/src/is2/data/IntIntHash.java b/dependencyParser/basic/mate-tools/src/is2/data/IntIntHash.java new file mode 100644 index 0000000..4aec043 --- /dev/null +++ b/dependencyParser/basic/mate-tools/src/is2/data/IntIntHash.java @@ -0,0 +1,270 @@ +package is2.data; + + + +import java.util.Arrays; + +final public class IntIntHash { + + + protected int _size; + protected int _free; + protected float _loadFactor; + public int _maxSize; + protected int _autoCompactRemovesRemaining; + protected float _autoCompactionFactor; + public int _set[]; + private int _values[]; + + + public IntIntHash() { + this(102877, 0.5F); + } + + + public IntIntHash(int initialCapacity, float loadFactor) { + _loadFactor = loadFactor; + _autoCompactionFactor = loadFactor; + setUp((int)Math.ceil(initialCapacity / loadFactor)); + } + + + public int size() { return _size;} + + public void ensureCapacity(int desiredCapacity) { + + if(desiredCapacity > _maxSize - size()) { + rehash(PrimeFinder.nextPrime((int)Math.ceil((desiredCapacity + size()) / _loadFactor) + 1)); + computeMaxSize(capacity()); + } + } + + public void compact() { + rehash(PrimeFinder.nextPrime((int)Math.ceil(size() / _loadFactor) + 1)); + computeMaxSize(capacity()); + if(_autoCompactionFactor != 0.0F) computeNextAutoCompactionAmount(size()); + } + + public void setAutoCompactionFactor(float factor) { + if(factor < 0.0F) { + throw new IllegalArgumentException((new StringBuilder()).append("Factor must be >= 0: ").append(factor).toString()); + } else + { + _autoCompactionFactor = factor; + return; + } + } + + public float getAutoCompactionFactor() { return _autoCompactionFactor; } + + + private void computeMaxSize(int capacity) + { + _maxSize = Math.min(capacity - 1, (int)Math.floor(capacity * _loadFactor)); + _free = capacity - _size; + } + + private void computeNextAutoCompactionAmount(int size) + { + if(_autoCompactionFactor != 0.0F) + _autoCompactRemovesRemaining = Math.round(size * _autoCompactionFactor); + } + + protected final void postInsertHook(boolean usedFreeSlot) + { + if(usedFreeSlot) _free--; + if(++_size > _maxSize || _free == 0) { + int newCapacity = _size <= _maxSize ? capacity() : PrimeFinder.nextPrime(capacity() << 1); + rehash(newCapacity); + computeMaxSize(capacity()); + } + } + + protected int calculateGrownCapacity() { return capacity() << 1; } + + protected int capacity() { return _values.length; } + + public boolean contains(int val) { return index(val) >= 0;} + + private int index(int v) { + + int length = _set.length; + int index = Math.abs((computeHashCode(v) /*& 2147483647*/ ) % length); + + while(true) { + // first + long l =_set[index]; + if (l == 0) { + // good++; + return -1; + } + // second + if (l == v) { + return index; + } + if(--index < 0) index += length; + } + //return -1; + } + + protected int insertionIndex(long val) + { + int length = _set.length; + int index = Math.abs((computeHashCode(val) /*& 2147483647*/ ) % length); + while(true) { + if(_set[index] == 0) return index; + if(_set[index] == val) return -index - 1; + if(--index < 0) index += length; + + } + } + + public int computeHashCode(long value) + { + return (int)(( value ^ (value&0xffffffff00000000L) >>> 32 ) *31);//0x811c9dc5 ^ // 29 + } + + + + + + + protected int setUp(int initialCapacity) + { + int capacity = PrimeFinder.nextPrime(initialCapacity); + computeMaxSize(capacity); + computeNextAutoCompactionAmount(initialCapacity); + _set = new int[capacity]; + _values = new int[capacity]; + return capacity; + } + + public void put(int key, int value) + { + int index = insertionIndex(key); + doPut(key, value, index); + } + private void doPut(int key, int value, int index) + { + boolean isNewMapping = true; + if(index < 0) + { + index = -index - 1; + isNewMapping = false; + } + _set[index] = key; + _values[index] = value; + if(isNewMapping) postInsertHook(true); + + } + + protected void rehash(int newCapacity) + { + int oldCapacity = _set.length; + int oldKeys[] = _set; + int oldVals[] = _values; + _set = new int[newCapacity]; + _values = new int[newCapacity]; + int i = oldCapacity; + + while(true){ + if(i-- <= 0) break; + if(oldVals[i] != 0) { + int o = oldKeys[i]; + int index = insertionIndex(o); + _set[index] = o; + _values[index] = oldVals[i]; + } + } + } + + int index =0; + + + public int get(int key) + { + int index = index(key); + return index >= 0 ? _values[index] : 0; + } + + + public void clear() + { + _size = 0; + _free = capacity(); + Arrays.fill(_set, 0, _set.length, 0); + // Arrays.fill(_values, 0, _values.length, 0); + } + + public int remove(int key) + { + int prev = 0; + int index = index(key); + if(index >= 0) + { + prev = _values[index]; + _values[index] = 0; + _set[index] = 0; + _size--; + if(_autoCompactionFactor != 0.0F) { + _autoCompactRemovesRemaining--; + if( _autoCompactRemovesRemaining <= 0) compact(); + } + } + return prev; + } + + + public int[] getValues() + { + int vals[] = new int[size()]; + int v[] = _values; + int i = v.length; + int j = 0; + do + { + if(i-- <= 0) break; + if(v[i] != 0) vals[j++] = v[i]; + } while(true); + return vals; + } + + public int[] keys() + { + int keys[] = new int[size()]; + int k[] = _set; + // byte states[] = _states; + int i = k.length; + int j = 0; + do + { + if(i-- <= 0) + break; + if(k[i] != 0) + keys[j++] = k[i]; + } while(true); + return keys; + } + + + /** + * @param index2 + * @param i + * @return + */ + public boolean adjustValue(int key, int i) { + int index = index(key); + if (index >= 0){ + _values[index] +=i; + return true; + } + return false; + } + + + + + + + +} diff --git a/dependencyParser/basic/mate-tools/src/is2/data/Long2Int.java b/dependencyParser/basic/mate-tools/src/is2/data/Long2Int.java new file mode 100755 index 0000000..e505cb0 --- /dev/null +++ b/dependencyParser/basic/mate-tools/src/is2/data/Long2Int.java @@ -0,0 +1,113 @@ +package is2.data; + + + +/** + * @author Bernd Bohnet, 01.09.2009 + * + * Maps for the Hash Kernel the long values to the int values. + */ +final public class Long2Int implements Long2IntInterface { + + + public Long2Int() { + size=115911564; + } + + + public Long2Int(int s) { + size=s; + } + + public static void main(String args[]) { + + long l =123456; + long l2 =1010119; + System.out.println("l \t"+l+"\t"+printBits(l)); + + long x =100000000; + System.out.println("1m\t"+l2+"\t"+printBits(x)+"\t"+x); + + System.out.println("l2\t"+l2+"\t"+printBits(l)); + + System.out.println("l2*l\t"+l2+"\t"+printBits(l*l2)+" \t "+l*l2); + + System.out.println("l2*l*l2\t"+l2+"\t"+printBits(l*l2*l2)+" \t "+l*l2*l2); + + System.out.println("l2*l*l2\t"+l2+"\t"+printBits(l*l2*l2*l2)+" \t "+l*l2*l2*l2); + + + System.out.println("l2*l*l2\t"+l2+"\t"+printBits((l*l2)%0xfffff)+" \t "+l*l2*l2*l2+"\t "+0xfffff); + System.out.println("l2*l*l2\t"+l2+"\t"+printBits((l*l2)&0xfffffff)+" \t "+l*l2*l2*l2); + } + + + /** Integer counter for long2int */ + final private int size; //0x03ffffff //0x07ffffff + + + /* (non-Javadoc) + * @see is2.sp09k9992.Long2IntIterface#size() + */ + public int size() {return size;} + + /* (non-Javadoc) + * @see is2.sp09k9992.Long2IntIterface#start() + * has no meaning for this implementation + */ + final public void start() {} + + + /* (non-Javadoc) + * @see is2.sp09k9992.Long2IntIterface#l2i(long) + */ + final public int l2i(long l) { + if (l<0) return -1; + + // this works well LAS 88.138 + // int r= (int)(( l ^ (l&0xffffffff00000000L) >>> 29 ));//0x811c9dc5 ^ // 29 + // return Math.abs(r % size); + // this works a bit better and good with 0x03ffffff + // + /* + long r= l;//26 + l = (l>>12)&0xfffffffffffff000L; + r ^= l;//38 + l = (l>>11)&0xffffffffffffc000L; + r ^= l;//49 + l = (l>>9)& 0xffffffffffff0000L; //53 + r ^= l;//58 + l = (l>>7)&0xfffffffffffc0000L; //62 + r ^=l;//65 + int x = (int)r; + x = x % size; + // return x >= 0 ? x : -x ;// Math.abs(r % size); + + */ + // 26 0x03ffffff + // together with 0x07ffffff 27 88.372 + long r= l;// 27 + l = (l>>13)&0xffffffffffffe000L; + r ^= l; // 40 + l = (l>>11)&0xffffffffffff0000L; + r ^= l; // 51 + l = (l>>9)& 0xfffffffffffc0000L; //53 + r ^= l; // 60 + l = (l>>7)& 0xfffffffffff00000L; //62 + r ^=l; //67 + int x = ((int)r) % size; + + return x >= 0 ? x : -x ; + } + + static public StringBuffer printBits(long out) { + StringBuffer s = new StringBuffer(); + + for(int k=0;k<65;k++) { + s.append((out & 1)==1?"1":"0"); + out >>=1; + } + s.reverse(); + return s; + } +} diff --git a/dependencyParser/basic/mate-tools/src/is2/data/Long2IntExact.java b/dependencyParser/basic/mate-tools/src/is2/data/Long2IntExact.java new file mode 100644 index 0000000..62f6375 --- /dev/null +++ b/dependencyParser/basic/mate-tools/src/is2/data/Long2IntExact.java @@ -0,0 +1,60 @@ +package is2.data; + + + +/** + * @author Bernd Bohnet, 01.09.2009 + * + * Maps for the Hash Kernel the long values to the int values. + */ +final public class Long2IntExact implements Long2IntInterface { + + static gnu.trove.TLongIntHashMap mapt = new gnu.trove.TLongIntHashMap(); + + static int cnt=0; + + + + public Long2IntExact() { + size=115911564; + } + + + public Long2IntExact(int s) { + size=s; + } + + + /** Integer counter for long2int */ + final private int size; //0x03ffffff //0x07ffffff + + + /* (non-Javadoc) + * @see is2.sp09k9992.Long2IntIterface#size() + */ + public int size() {return size;} + + /* (non-Javadoc) + * @see is2.sp09k9992.Long2IntIterface#start() + * has no meaning for this implementation + */ + final public void start() {} + + + /* (non-Javadoc) + * @see is2.sp09k9992.Long2IntIterface#l2i(long) + */ + final public int l2i(long l) { + if (l<0) return -1; + + int i = mapt.get(l); + if (i!=0) return i; + + if (i==0 && cnt<size-1) { + cnt++; + mapt.put(l, cnt); + return cnt; + } + return -1; + } +} diff --git a/dependencyParser/basic/mate-tools/src/is2/data/Long2IntInterface.java b/dependencyParser/basic/mate-tools/src/is2/data/Long2IntInterface.java new file mode 100755 index 0000000..a6cba63 --- /dev/null +++ b/dependencyParser/basic/mate-tools/src/is2/data/Long2IntInterface.java @@ -0,0 +1,15 @@ +package is2.data; + +public interface Long2IntInterface { + + public abstract int size(); + + + /** + * Maps a long to a integer value. This is very useful to save memory for sparse data long values + * @param l + * @return the integer + */ + public abstract int l2i(long l); + +} \ No newline at end of file diff --git a/dependencyParser/basic/mate-tools/src/is2/data/Long2IntQuick.java b/dependencyParser/basic/mate-tools/src/is2/data/Long2IntQuick.java new file mode 100644 index 0000000..adbe57d --- /dev/null +++ b/dependencyParser/basic/mate-tools/src/is2/data/Long2IntQuick.java @@ -0,0 +1,47 @@ +package is2.data; + + + +/** + * @author Bernd Bohnet, 01.09.2009 + * + * Maps for the Hash Kernel the long values to the int values. + */ +final public class Long2IntQuick implements Long2IntInterface { + + + /** Integer counter for long2int */ + final private int size; + + public Long2IntQuick() { + size=0x07ffffff; + } + + + public Long2IntQuick(int s) { + size=s; + } + + + /* (non-Javadoc) + * @see is2.sp09k9992.Long2IntIterface#size() + */ + public int size() {return size;} + + /* (non-Javadoc) + * @see is2.sp09k9992.Long2IntIterface#start() + * has no meaning for this implementation + */ + + + /* (non-Javadoc) + * @see is2.sp09k9992.Long2IntIterface#l2i(long) + */ + final public int l2i(long r) { + long l = (r>>16)&0xfffffffffffff000L; + r ^= l; + r ^= l = (l>>12)&0xffffffffffff0000L; + r ^= l = (l>>8)& 0xfffffffffffc0000L; + return (int)(r % size); + } +} diff --git a/dependencyParser/basic/mate-tools/src/is2/data/MFB.java b/dependencyParser/basic/mate-tools/src/is2/data/MFB.java new file mode 100755 index 0000000..04c36ae --- /dev/null +++ b/dependencyParser/basic/mate-tools/src/is2/data/MFB.java @@ -0,0 +1,256 @@ +package is2.data; + + +import is2.util.DB; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; +import java.util.HashMap; +import java.util.Map.Entry; + +/** + * Map Features, do not map long to integer + * + * @author Bernd Bohnet, 20.09.2009 + */ + +final public class MFB implements IEncoderPlus { + + /** The features and its values */ + static private final HashMap<String,HashMap<String,Integer>> m_featureSets = new HashMap<String,HashMap<String,Integer>>(); + + /** The feature class and the number of values */ + static private final HashMap<String,Integer> m_featureCounters = new HashMap<String,Integer>(); + + /** The number of bits needed to encode a feature */ + static final HashMap<String,Integer> m_featureBits = new HashMap<String,Integer>(); + + /** Integer counter for long2int */ + static private int count=0; + + /** Stop growing */ + public boolean stop=false; + + final public static String NONE="<None>"; + + + + + + + + public MFB () {} + + + public int size() {return count;} + + + + /** + * Register an attribute class, if it not exists and add a possible value + * @param type + * @param type2 + */ + final public int register(String a, String v) { + + synchronized(m_featureCounters) { + + HashMap<String,Integer> fs = getFeatureSet().get(a); + if (fs==null) { + fs = new HashMap<String,Integer>(); + getFeatureSet().put(a, fs); + fs.put(NONE, 0); + getFeatureCounter().put(a, 1); + } + + Integer i = fs.get(v); + if (i==null) { + Integer c = getFeatureCounter().get(a); + fs.put(v, c); + c++; + getFeatureCounter().put(a,c); + return c-1; + } else return i; + } + } + + /** + * Calculates the number of bits needed to encode a feature + */ + public void calculateBits() { + + int total=0; + for(Entry<String,Integer> e : getFeatureCounter().entrySet() ){ + int bits =(int)Math.ceil((Math.log(e.getValue()+1)/Math.log(2))); + m_featureBits.put(e.getKey(), bits); + total+=bits; + // System.out.println(" "+e.getKey()+" bits "+bits+" number "+(e.getValue()+1)); + } + +// System.out.println("total number of needed bits "+total); + } + + + + public String toString() { + + StringBuffer content = new StringBuffer(); + for(Entry<String,Integer> e : getFeatureCounter().entrySet() ){ + content.append(e.getKey()+" "+e.getValue()); + content.append(':'); + // HashMap<String,Integer> vs = getFeatureSet().get(e.getKey()); + content.append(getFeatureBits(e.getKey())); + + /*if (vs.size()<120) + for(Entry<String,Integer> e2 : vs.entrySet()) { + content.append(e2.getKey()+" ("+e2.getValue()+") "); + }*/ + content.append('\n'); + + } + return content.toString(); + } + + + + static final public short getFeatureBits(String a) { + if(m_featureBits.get(a)==null) return 0; + return (short)m_featureBits.get(a).intValue(); + } + + + + /** + * Get the integer place holder of the string value v of the type a + * + * @param t the type + * @param v the value + * @return the integer place holder of v + */ + final public int getValue(String t, String v) { + + if (m_featureSets.get(t)==null) return -1; + Integer vi = m_featureSets.get(t).get(v); + if (vi==null) return -1; //stop && + return vi.intValue(); + } + + /** + * Static version of getValue + * @see getValue + */ + static final public int getValueS(String a, String v) { + + if (m_featureSets.get(a)==null) return -1; + Integer vi = m_featureSets.get(a).get(v); + if (vi==null) return -1; //stop && + return vi.intValue(); + } + + public int hasValue(String a, String v) { + + Integer vi = m_featureSets.get(a).get(v); + if (vi==null) return -1; + return vi.intValue(); + } + + + public static String printBits(int k) { + StringBuffer s = new StringBuffer(); + for(int i =0;i<31;i++) { + s.append((k&0x00000001)==1?'1':'0'); + k=k>>1; + + } + s.reverse(); + return s.toString(); + } + + + + + + + + /** + * Maps a long to a integer value. This is very useful to save memory for sparse data long values + * @param l + * @return the integer + */ + static public int misses = 0; + static public int good = 0; + + + + + /** + * Write the data + * @param dos + * @throws IOException + */ + static public void writeData(DataOutputStream dos) throws IOException { + dos.writeInt(getFeatureSet().size()); + // DB.println("write"+getFeatureSet().size()); + for(Entry<String, HashMap<String,Integer>> e : getFeatureSet().entrySet()) { + dos.writeUTF(e.getKey()); + dos.writeInt(e.getValue().size()); + + for(Entry<String,Integer> e2 : e.getValue().entrySet()) { + + if(e2.getKey()==null) DB.println("key "+e2.getKey()+" value "+e2.getValue()+" e -key "+e.getKey()); + dos.writeUTF(e2.getKey()); + dos.writeInt(e2.getValue()); + + } + + } + } + public void read(DataInputStream din) throws IOException { + + int size = din.readInt(); + for(int i=0; i<size;i++) { + String k = din.readUTF(); + int size2 = din.readInt(); + + HashMap<String,Integer> h = new HashMap<String,Integer>(); + getFeatureSet().put(k,h); + for(int j = 0;j<size2;j++) { + h.put(din.readUTF(), din.readInt()); + } + getFeatureCounter().put(k, size2); + } + + count =size; + // stop(); + calculateBits(); + } + + + /** + * Clear the data + */ + static public void clearData() { + getFeatureSet().clear(); + m_featureBits.clear(); + getFeatureSet().clear(); + } + + public HashMap<String,Integer> getFeatureCounter() { + return m_featureCounters; + } + + static public HashMap<String,HashMap<String,Integer>> getFeatureSet() { + return m_featureSets; + } + + static public String[] reverse(HashMap<String,Integer> v){ + String[] set = new String[v.size()]; + for(Entry<String,Integer> e : v.entrySet()) { + set[e.getValue()]=e.getKey(); + } + return set; + } + + +} diff --git a/dependencyParser/basic/mate-tools/src/is2/data/MFC.java b/dependencyParser/basic/mate-tools/src/is2/data/MFC.java new file mode 100644 index 0000000..bb1f27a --- /dev/null +++ b/dependencyParser/basic/mate-tools/src/is2/data/MFC.java @@ -0,0 +1,246 @@ +package is2.data; + + +import is2.util.DB; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; +import java.util.HashMap; +import java.util.Map.Entry; + +/** + * Map Features, do not map long to integer + * + * @author Bernd Bohnet, 17.09.2011 + */ + +final public class MFC implements IEncoderPlus { + + /** The features and its values */ + private final HashMap<String,HashMap<String,Integer>> m_featureSets = new HashMap<String,HashMap<String,Integer>>(); + + /** The feature class and the number of values */ + private final HashMap<String,Integer> m_featureCounters = new HashMap<String,Integer>(); + + /** The number of bits needed to encode a feature */ + final HashMap<String,Integer> m_featureBits = new HashMap<String,Integer>(); + + /** Integer counter for long2int */ + private int count=0; + + + public MFC () {} + + + public int size() {return count;} + + + + /** + * Register an attribute class, if it not exists and add a possible value + * @param type + * @param type2 + */ + final public int register(String a, String v) { + + synchronized(m_featureCounters) { + + HashMap<String,Integer> fs = getFeatureSet().get(a); + if (fs==null) { + fs = new HashMap<String,Integer>(); + getFeatureSet().put(a, fs); + fs.put(NONE, 0); + getFeatureCounter().put(a, 1); + } + + Integer i = fs.get(v); + if (i==null) { + Integer c = getFeatureCounter().get(a); + fs.put(v, c); + c++; + getFeatureCounter().put(a,c); + return c-1; + } else return i; + } + } + + /** + * Calculates the number of bits needed to encode a feature + */ + public void calculateBits() { + + int total=0; + for(Entry<String,Integer> e : getFeatureCounter().entrySet() ){ + int bits =(int)Math.ceil((Math.log(e.getValue()+1)/Math.log(2))); + m_featureBits.put(e.getKey(), bits); + total+=bits; + // System.out.println(" "+e.getKey()+" bits "+bits+" number "+(e.getValue()+1)); + } + +// System.out.println("total number of needed bits "+total); + } + + + + public String toString() { + + StringBuffer content = new StringBuffer(); + for(Entry<String,Integer> e : getFeatureCounter().entrySet() ){ + content.append(e.getKey()+" "+e.getValue()); + content.append(':'); + // HashMap<String,Integer> vs = getFeatureSet().get(e.getKey()); + content.append(getFeatureBits(e.getKey())); + + /*if (vs.size()<120) + for(Entry<String,Integer> e2 : vs.entrySet()) { + content.append(e2.getKey()+" ("+e2.getValue()+") "); + }*/ + content.append('\n'); + + } + return content.toString(); + } + + + + final public short getFeatureBits(String a) { + if(m_featureBits.get(a)==null) return 0; + return (short)m_featureBits.get(a).intValue(); + } + + + + /** + * Get the integer place holder of the string value v of the type a + * + * @param t the type + * @param v the value + * @return the integer place holder of v + */ + final public int getValue(String t, String v) { + + if (m_featureSets.get(t)==null) return -1; + Integer vi = m_featureSets.get(t).get(v); + if (vi==null) return -1; //stop && + return vi.intValue(); + } + + /** + * Static version of getValue + * @see getValue + */ + final public int getValueS(String a, String v) { + + if (m_featureSets.get(a)==null) return -1; + Integer vi = m_featureSets.get(a).get(v); + if (vi==null) return -1; //stop && + return vi.intValue(); + } + + public int hasValue(String a, String v) { + + Integer vi = m_featureSets.get(a).get(v); + if (vi==null) return -1; + return vi.intValue(); + } + + + public static String printBits(int k) { + StringBuffer s = new StringBuffer(); + for(int i =0;i<31;i++) { + s.append((k&0x00000001)==1?'1':'0'); + k=k>>1; + + } + s.reverse(); + return s.toString(); + } + + + + + + + + /** + * Maps a long to a integer value. This is very useful to save memory for sparse data long values + * @param l + * @return the integer + */ + static public int misses = 0; + static public int good = 0; + + + + + /** + * Write the data + * @param dos + * @throws IOException + */ + public void writeData(DataOutputStream dos) throws IOException { + dos.writeInt(getFeatureSet().size()); + // DB.println("write"+getFeatureSet().size()); + for(Entry<String, HashMap<String,Integer>> e : getFeatureSet().entrySet()) { + dos.writeUTF(e.getKey()); + dos.writeInt(e.getValue().size()); + + for(Entry<String,Integer> e2 : e.getValue().entrySet()) { + + if(e2.getKey()==null) DB.println("key "+e2.getKey()+" value "+e2.getValue()+" e -key "+e.getKey()); + dos.writeUTF(e2.getKey()); + dos.writeInt(e2.getValue()); + + } + + } + } + public void read(DataInputStream din) throws IOException { + + int size = din.readInt(); + for(int i=0; i<size;i++) { + String k = din.readUTF(); + int size2 = din.readInt(); + + HashMap<String,Integer> h = new HashMap<String,Integer>(); + getFeatureSet().put(k,h); + for(int j = 0;j<size2;j++) { + h.put(din.readUTF(), din.readInt()); + } + getFeatureCounter().put(k, size2); + } + + count =size; + // stop(); + calculateBits(); + } + + + /** + * Clear the data + */ + public void clearData() { + getFeatureSet().clear(); + m_featureBits.clear(); + getFeatureSet().clear(); + } + + public HashMap<String,Integer> getFeatureCounter() { + return m_featureCounters; + } + + public HashMap<String,HashMap<String,Integer>> getFeatureSet() { + return m_featureSets; + } + + public String[] reverse(HashMap<String,Integer> v){ + String[] set = new String[v.size()]; + for(Entry<String,Integer> e : v.entrySet()) { + set[e.getValue()]=e.getKey(); + } + return set; + } + + +} diff --git a/dependencyParser/basic/mate-tools/src/is2/data/MFO.java b/dependencyParser/basic/mate-tools/src/is2/data/MFO.java new file mode 100755 index 0000000..ff4d43e --- /dev/null +++ b/dependencyParser/basic/mate-tools/src/is2/data/MFO.java @@ -0,0 +1,386 @@ +package is2.data; + + +import is2.util.DB; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; +import java.util.HashMap; +import java.util.Map.Entry; + +/** + * Map Features, do not map long to integer + * + * @author Bernd Bohnet, 20.09.2009 + */ + +final public class MFO implements IEncoderPlus { + + /** The features and its values */ + static private final HashMap<String,HashMap<String,Integer>> m_featureSets = new HashMap<String,HashMap<String,Integer>>(); + + /** The feature class and the number of values */ + static private final HashMap<String,Integer> m_featureCounters = new HashMap<String,Integer>(); + + /** The number of bits needed to encode a feature */ + static final HashMap<String,Integer> m_featureBits = new HashMap<String,Integer>(); + + final public static String NONE="<None>"; + + final public static class Data4 { + public int shift; + public short a0,a1,a2,a3,a4,a5,a6,a7,a8,a9; + public int v0,v1,v2,v3,v4,v5,v6,v7,v8,v9; + + final public long calcs(int b, long v, long l) { + if (l<0) return l; + l |= v<<shift; + shift +=b; + return l; + } + + } + + public MFO () {} + + + + + + /** + * Register an attribute class, if it not exists and add a possible value + * @param type + * @param type2 + */ + final public int register(String a, String v) { + + HashMap<String,Integer> fs = getFeatureSet().get(a); + if (fs==null) { + fs = new HashMap<String,Integer>(); + getFeatureSet().put(a, fs); + fs.put(NONE, 0); + getFeatureCounter().put(a, 1); + } + Integer c = getFeatureCounter().get(a); + + Integer i = fs.get(v); + if (i==null) { + fs.put(v, c); + c++; + getFeatureCounter().put(a,c); + return c-1; + } else return i; + } + + /** + * Calculates the number of bits needed to encode a feature + */ + public void calculateBits() { + + int total=0; + for(Entry<String,Integer> e : getFeatureCounter().entrySet() ){ + int bits =(int)Math.ceil((Math.log(e.getValue()+1)/Math.log(2))); + m_featureBits.put(e.getKey(), bits); + total+=bits; + // System.out.println(" "+e.getKey()+" bits "+bits+" number "+(e.getValue()+1)); + } + + // System.out.println("total number of needed bits "+total); + } + + + + @Override + public String toString() { + + StringBuffer content = new StringBuffer(); + for(Entry<String,Integer> e : getFeatureCounter().entrySet() ){ + content.append(e.getKey()+" "+e.getValue()); + content.append(':'); + // HashMap<String,Integer> vs = getFeatureSet().get(e.getKey()); + content.append(getFeatureBits(e.getKey())); + + /*if (vs.size()<120) + for(Entry<String,Integer> e2 : vs.entrySet()) { + content.append(e2.getKey()+" ("+e2.getValue()+") "); + }*/ + content.append('\n'); + + } + return content.toString(); + } + + + static final public long calcs(Data4 d,int b, long v, long l) { + if (l<0) return l; + l |= v<<d.shift; + d.shift +=b; + return l; + } + + + static final public short getFeatureBits(String a) { + return (short)m_featureBits.get(a).intValue(); + } + + + + /** + * Get the integer place holder of the string value v of the type a + * + * @param t the type + * @param v the value + * @return the integer place holder of v + */ + final public int getValue(String t, String v) { + + if (m_featureSets.get(t)==null) return -1; + Integer vi = m_featureSets.get(t).get(v); + if (vi==null) return -1; //stop && + return vi.intValue(); + } + + /** + * Static version of getValue + * @see getValue + */ + static final public int getValueS(String a, String v) { + + if (m_featureSets.get(a)==null) return -1; + Integer vi = m_featureSets.get(a).get(v); + if (vi==null) return -1; //stop && + return vi.intValue(); + } + + public int hasValue(String a, String v) { + + Integer vi = m_featureSets.get(a).get(v); + if (vi==null) return -1; + return vi.intValue(); + } + + + + + final public long calc2(Data4 d) { + + if (d.v0<0||d.v1<0) return -1; + // if (d.v1<0||d.v2<0) return -1; + + long l = d.v0; + short shift =d.a0; + l |= (long)d.v1<<shift; + shift +=d.a1; + // l |= (long)d.v2<<shift; + d.shift=shift; + + //d.shift=; + return l; + } + + + + final public long calc3(Data4 d) { + + if (d.v0<0||d.v1<0||d.v2<0) return -1; + // if (d.v1<0||d.v2<0) return -1; + + long l = d.v0; + short shift =d.a0; + l |= (long)d.v1<<shift; + shift +=d.a1; + l |= (long)d.v2<<shift; + d.shift=shift + d.a2; + + //d.shift=; + return l; + } + + + final public long calc4(Data4 d) { + if (d.v0<0||d.v1<0||d.v2<0||d.v3<0) return -1; + + long l = d.v0; + int shift =d.a0; + l |= (long)d.v1<<shift; + shift +=d.a1; + l |= (long)d.v2<<shift; + shift +=d.a2; + l |= (long)d.v3<<shift; + d.shift= shift +d.a3; + + return l; + } + + + + final public long calc5(Data4 d) { + + if (d.v0<0||d.v1<0||d.v2<0||d.v3<0||d.v4<0) return -1; + + long l = d.v0; + int shift =d.a0; + l |= (long)d.v1<<shift; + shift +=d.a1; + l |= (long)d.v2<<shift; + shift +=d.a2; + l |= (long)d.v3<<shift; + shift +=d.a3; + l |= (long)d.v4<<shift; + d.shift =shift+d.a4; + + return l; + } + + + static final public long calc6(Data4 d) { + + if (d.v0<0||d.v1<0||d.v2<0||d.v3<0||d.v4<0||d.v5<0) return -1; + + long l = d.v0; + int shift =d.a0; + l |= (long)d.v1<<shift; + shift +=d.a1; + l |= (long)d.v2<<shift; + shift +=d.a2; + l |= (long)d.v3<<shift; + shift +=d.a3; + l |= (long)d.v4<<shift; + shift +=d.a4; + l |= (long)d.v5<<shift; + d.shift =shift+d.a5; + + return l; + } + + final public long calc7(Data4 d) { + + if (d.v0<0||d.v1<0||d.v2<0||d.v3<0||d.v4<0||d.v5<0||d.v6<0) return -1; + + long l = d.v0; + int shift =d.a0; + l |= (long)d.v1<<shift; + shift +=d.a1; + l |= (long)d.v2<<shift; + shift +=d.a2; + l |= (long)d.v3<<shift; + shift +=d.a3; + l |= (long)d.v4<<shift; + shift +=d.a4; + l |= (long)d.v5<<shift; + shift +=d.a5; + l |= (long)d.v6<<shift; + d.shift =shift+d.a6; + + return l; + } + + + final public long calc8(Data4 d) { + + if (d.v0<0||d.v1<0||d.v2<0||d.v3<0||d.v4<0||d.v5<0||d.v6<0||d.v7<0) return -1; + + long l = d.v0; + int shift =d.a0; + l |= (long)d.v1<<shift; + shift +=d.a1; + l |= (long)d.v2<<shift; + shift +=d.a2; + l |= (long)d.v3<<shift; + shift +=d.a3; + l |= (long)d.v4<<shift; + shift +=d.a4; + l |= (long)d.v5<<shift; + shift +=d.a5; + l |= (long)d.v6<<shift; + shift +=d.a6; + l |= (long)d.v7<<shift; + d.shift =shift+d.a7; + + return l; + } + + + + + + + + /** + * Maps a long to a integer value. This is very useful to save memory for sparse data long values + * @param node + * @return the integer + */ + static public int misses = 0; + static public int good = 0; + + + + + /** + * Write the data + * @param dos + * @throws IOException + */ + public void writeData(DataOutputStream dos) throws IOException { + dos.writeInt(getFeatureSet().size()); + for(Entry<String, HashMap<String,Integer>> e : getFeatureSet().entrySet()) { + dos.writeUTF(e.getKey()); + dos.writeInt(e.getValue().size()); + + for(Entry<String,Integer> e2 : e.getValue().entrySet()) { + + if(e2.getKey()==null) DB.println("key "+e2.getKey()+" value "+e2.getValue()+" e -key "+e.getKey()); + dos.writeUTF(e2.getKey()); + dos.writeInt(e2.getValue()); + + } + + } + } + public void read(DataInputStream din) throws IOException { + + int size = din.readInt(); + for(int i=0; i<size;i++) { + String k = din.readUTF(); + int size2 = din.readInt(); + + HashMap<String,Integer> h = new HashMap<String,Integer>(); + getFeatureSet().put(k,h); + for(int j = 0;j<size2;j++) { + h.put(din.readUTF(), din.readInt()); + } + getFeatureCounter().put(k, size2); + } + + calculateBits(); + } + + + /** + * Clear the data + */ + static public void clearData() { + getFeatureSet().clear(); + m_featureBits.clear(); + getFeatureSet().clear(); + } + + public HashMap<String,Integer> getFeatureCounter() { + return m_featureCounters; + } + + static public HashMap<String,HashMap<String,Integer>> getFeatureSet() { + return m_featureSets; + } + + static public String[] reverse(HashMap<String,Integer> v){ + String[] set = new String[v.size()]; + for(Entry<String,Integer> e : v.entrySet()) { + set[e.getValue()]=e.getKey(); + } + return set; + } + +} diff --git a/dependencyParser/basic/mate-tools/src/is2/data/Open.java b/dependencyParser/basic/mate-tools/src/is2/data/Open.java new file mode 100755 index 0000000..ba75fe3 --- /dev/null +++ b/dependencyParser/basic/mate-tools/src/is2/data/Open.java @@ -0,0 +1,37 @@ +package is2.data; + + + +final public class Open { + + public float p; + short s, e, label; + byte dir; + + Closed left; + Closed right; + + public Open(short s, short t, short dir, short label,Closed left, Closed right, float p) { + this.s = s; + this.e = t; + this.label = label; + this.dir = (byte)dir; + this.left =left; + this.right=right; + this.p=p; + } + + + void create(Parse parse) { + if (dir == 0) { + parse.heads[s] = e; + if (label != -1) parse.labels[s] = label; + } else { + parse.heads[e] = s; + if (label != -1) parse.labels[e] = label; + } + if (left != null) left.create(parse); + if (right != null) right.create(parse); + } + +} diff --git a/dependencyParser/basic/mate-tools/src/is2/data/PSTree.java b/dependencyParser/basic/mate-tools/src/is2/data/PSTree.java new file mode 100644 index 0000000..30c1364 --- /dev/null +++ b/dependencyParser/basic/mate-tools/src/is2/data/PSTree.java @@ -0,0 +1,711 @@ +/** + * + */ +package is2.data; + +import is2.util.DB; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.Stack; + +/** + * @author Dr. Bernd Bohnet, 17.01.2011 + * + * + */ +public class PSTree { + + int wordCount =0; + public String entries[]; + public String lemmas[]; + public int head[]; + public String pos[]; + public int[] ok; + public int non; + public int terminalCount; + public String[] morph; + + public int[] forms; + public int[] phrases; + public int[][] psfeats; + public int[] ppos; + + + /** + * @param d + */ + public PSTree(SentenceData09 d) { + create(d.length()-1,d.length()*20); + for(int i=1;i<d.length();i++) { + entries[i-1]=d.forms[i]; + pos[i-1]=d.ppos[i]; + } + } + + + /** + * Create an undefined phrase tree + */ + public PSTree() { } + + + /** + * @param terminals + * @param nonTerminals + */ + public void create(int terminals, int nonTerminals) { + entries = new String[terminals+nonTerminals]; + pos = new String[terminals+nonTerminals]; + head = new int[terminals+nonTerminals]; + lemmas = new String[terminals+nonTerminals]; + morph = new String[terminals+nonTerminals]; + non=terminals; + wordCount=terminals; + + for(int i=terminals+1;i<head.length;i++) head[i]=-1; + } + + + public String toString() { + + StringBuffer s = new StringBuffer(); + + for(int i=0;i<entries.length;i++) { + if (head[i]==-1&&entries[i]==null) break; + + s.append(i+"\t"+pos[i]+"\t"+entries[i]+"\t"+head[i]+(ok==null?"":("\t"+(ok[i]==1)))+" \n"); + + } + // DB.println("entries "+entries.length); + return s.toString(); + } + + + /** + * @return + */ + public boolean containsNull() { + for(int k=0;k<wordCount-1;k++) { + if (entries[k]==null) return true; + } + return false; + } + + + public int equals(SentenceData09 s) { + + int j=1; // starts with root + for(int i=0;i<terminalCount-1;i++){ + + // if (s.forms[j].equals("erschrekkend")) s.forms[j]="erschreckend"; + + if (s.forms.length<j) { + DB.println(""+s+" "+this.toString()); + return i; + + } + + if(!entries[i].equals(s.forms[j])) { + // System.out.println("ps "+entries[i]+" != ds "+s.forms[j]); + // Rolls-Royce + if(entries[i].startsWith(s.forms[j]) && s.forms.length>i+2 && s.forms[j+1].equals("-")) { + j+=2; + if( entries[i].contains(s.forms[j-1]) && s.forms.length>i+3 && s.forms[j+1].equals("-")) { + j+=2; // && + // System.out.println("s.forms[j] "+s.forms[j]+" s.forms[j-1] "+s.forms[j-1]+" "+entries[i]); + if( entries[i].contains(s.forms[j-1]) && s.forms.length>i+3 && s.forms[j+1].equals("-")) { + j+=2; // && + // System.out.println("s.forms[j] "+s.forms[j]+" s.forms[j-1] "+s.forms[j-1]+" "+entries[i]); + } + } + //Interstate\/Johnson + } else if(entries[i].startsWith(s.forms[j]) && s.forms.length>i+2 && s.forms[j+1].equals("/")) { + j+=2; + if( entries[i].contains(s.forms[j-1]) && s.forms.length>i+3 && s.forms[j+1].equals("/")) { + j+=2; // && + // System.out.println("s.forms[j] "+s.forms[j]+" s.forms[j-1] "+s.forms[j-1]+" "+entries[i]); + } + + // U.S.-Japan -> U . S . - Japan + } else if(entries[i].startsWith(s.forms[j]) && s.forms.length>i+2 && s.forms[j+1].equals(".")) { + j+=2; + if( entries[i].contains(s.forms[j-1]) && s.forms.length>i+3 && s.forms[j+1].equals(".")) { + j+=2; // && + // System.out.println("s.forms[j] "+s.forms[j]+" s.forms[j-1] "+s.forms[j-1]+" "+entries[i]); + } + } else if(entries[i].startsWith(s.forms[j]) && s.forms.length>i+1 && s.forms[j+1].equals("'S")) { + j+=1; + + } else { + + // chech those !!! + // System.out.print("entry "+entries[i]+" form "+s.forms[j]+" "); + return j; + } + + } + j++; + + + } + + // without root + return s.length(); + //return j; + + } + + + /** + * @param dn + * @return + */ + public int getPS(int dn) { + + return this.head[dn-1]; + } + + + /** + * @param dn + * @param n + * @param commonHead the common head in the phrase structure + * @return + */ + public String getChain(int dn, int n, int commonHead) { + + int pdn =dn-1,pdh=n-1; + // int phraseHead =head[pdh]; + + // System.out.println("phrase head "+phraseHead+" common head "+commonHead); + + int[] ch = new int[20]; + int head =this.head[pdn]; + int i=0; + ch[i++]=head; + while(commonHead!=head && head!=0) { + + head = this.head[head]; + ch[i++]=head; + } + StringBuffer chain= new StringBuffer(); + + for(int k=0;k<i;k++) { + chain.append(entries[ch[k]]).append(" "); + } + return chain.toString(); + } + + + /** + * @param dn + * @param n + * @return + */ + public int getCommonHead(int d, int dh) { + int pdh = this.getPS(dh), pd = this.getPS(d); + + + ArrayList<Integer> path2root = getPath2Root(pdh); + + //System.out.println("path 2 root "+path2root+" pdh "+pdh); + + for(int n : path2root) { + int candidateHead=pd; + while(candidateHead!=0&& candidateHead!=-1) { + if (n==candidateHead) return n; + candidateHead =this.head[candidateHead]; + } + } + return -1; + } + + + /** + * @param pdh + */ + private ArrayList<Integer> getPath2Root(int pdh) { + ArrayList<Integer> path = new ArrayList<Integer>(); + + + // restrict the number in case its a cycle which should never be + for(int k=0;k<100;k++) { + if(pdh==-1) break; + path.add(pdh); + pdh = this.head[pdh]; + if(pdh==0) break; + } + return path; + } + + + /** + * Get operations to create root + * see operation in method getOperation + * @param pr + */ + public String getOperationRoot(int pr) { + + StringBuffer o = new StringBuffer(); + int h = pr; + int[] path = new int[10]; + // System.out.println(" start node "+pr); + int k=0; + for(;k<10;k++) { + h = head[h]; + if (h==-1){ + break; + } + path[k]=h; + if (h==0){ + break; + } + + } + k-=2; + + boolean first=true; + for(;k>=0;k--) { + + // create phrase + if (first) { + o.append("c:").append(entries[path[k]]); + first =false; + } + + // insert and create phrase + else {o.append(":ci:").append(entries[path[k]]);} + } + + + // insert dependent node + //if (o.length()>0) + o.append(":in:d"); + //else o.append("in:d"); // insert root into nothing + return o.toString(); + } + + + /** + * Create operation to include dependency edges in phrase structure + * Operations: c - create ; i - insert ; in - insert (dependent) node ; up:X go the (phrase) X up + * ci create and insert ... + * + * @param dn + * @param n + * @param commonHead + * @return + */ + public String getOperation(int dn, int n, int commonHead) { + + StringBuffer o= new StringBuffer(); + + // from n move up to common head, if needed + int ph =n-1, pd = dn-1; + + int[] path = new int[20]; + int i=0; + + int h =ph; + + boolean nth=false; + for(int k=0;k<10;k++) { + h = head[h]; + path[k]=h; + if (nth) o.append(':'); + o.append("up:"+entries[h]); + nth=true; + if (h==commonHead) break; + } + + // from common head to the node + int k=0; + h=pd; + for(;k<10;k++) { + h = head[h]; + path[k]=h; + if (h==commonHead){ + break; + } + + } + k-=1; + + // boolean first=true; + for(;k>=0;k--) { + + // create phrase + if (!nth) { + o.append("ci:").append(entries[path[k]]); + nth =true; + } + + // insert and create phrase + else {o.append(":ci:").append(entries[path[k]]);} + } + + + // insert dependent node + o.append(":in:d"); + + + + return o.toString(); + } + + + /** + * @param ph node in the phrase structure corresponding to the head in the dependency structure + * @param pt node in the prhase structure corresponding to the dependent in the ds. + * @param check + * @return rules was applicable + */ + public boolean exec(String r, int ph, int pt, boolean check) { + + String o[] = r.split(":"); + + int last =-1, headP = -1; + + // create root node + + // System.out.println("operation "+r+" "+ph+" "+pt); + boolean done =true; + for(int i=0;i<o.length;i++) { + + if (o[i].equals("c")) { + if (check) return true; + + if(ph<0) { + last=non++; + } + + entries[non]=o[++i]; // create + head[pt]=non; + head[non]=last; // insert into root + last=non++; + } else if (o[i].equals("ci")) { + if (check) return true; + entries[non]= o[++i]; // create + head[non] = last; // insert + last =non; + non++; + } else if (o[i].equals("in")&&o[i+1].equals("d")) { + if (check) return true; + head[pt] = last; // insert + i++; // move forward because of 'd' + } else if (o[i].equals("up")) { + + if (ph==-1) { + // System.out.println("ph is -1 please check this "+ph+" there is a bug "); + return false; + } + + if (headP==-1) headP=head[ph]; + else headP=head[headP]; + + try { + if (headP==-1 || entries[headP]==null ||!entries[headP].equals(o[i+1])) return false; + + } catch(Exception e) { + e.printStackTrace(); + System.out.println(""+entries[headP]+" o[i+1] "+o[i+1]+" "+headP+" "+this.terminalCount); + // System.out.println(""+ this.toString()); + System.exit(0); + } + + i++; + last =headP; + } else { + done = false; + } + + } + + + return done; + } + + /** + * More tolerant mapping + * + * @param ph node in the phrase structure corresponding to the head in the dependency structure + * @param pt node in the prhase structure corresponding to the dependent in the ds. + * @param check + * @return rules was applicable + */ + public boolean execT(String r, int ph, int pt, boolean check) { + + String o[] = r.split(":"); + + int last =-1, headP = -1; + + int up=0; + + boolean done =true; + for(int i=0;i<o.length;i++) { + + if (o[i].equals("c")) { + if (check) return true; + + + // create root node + if(ph<0) { + last=non++; + } + + entries[non]= o[++i]; // create + head[pt]=non; + head[non]=last; // insert into root + last=non++; + } else if (o[i].equals("ci")) { + + if (check) return true; + entries[non]= o[++i]; // create + head[non] = last; // insert + last =non; + non++; + } else if (o[i].equals("in")&&o[i+1].equals("d")) { + if (check) return true; + + // DB.println("hallo"); + + if (last !=-1) + head[pt] = last; // insert + + + // i am not sure if this does much good? + + // if (last ==-1) + + // done=true; + + + + i++; // move forward because of 'd' + + } else if (o[i].equals("up")) { + up++; + if (ph==-1) { + return false; + } + + if (headP==-1) headP=head[ph]; + else headP=head[headP]; + + try { + + // tolerant mapping + if (headP==-1 || entries[headP]==null || + ((!entries[headP].equals(o[i+1]) ) && up>1 )) return false; //>1 +// && entries[headP].charAt(0)!=o[i+1].charAt(0) + } catch(Exception e) { + e.printStackTrace(); + System.out.println(""+entries[headP]+" o[i+1] "+o[i+1]+" "+headP+" "+this.terminalCount); + } + + i++; + last =headP; + } else { + done = false; + } + + } + + + return done; + } + + + public final static boolean INSERT_NEWLINE =true; + + /** + * Convert to bracket format + * @param newLine + * @return + */ + public String toPennBracket(boolean newLine) { + + + StringBuffer b = new StringBuffer(); + ArrayList<Integer> current=null;// = new ArrayList<Integer>(); + int open =0; + for(int i=0; i<terminalCount ;i++) { + ArrayList<Integer> path = getPathToRoot(i); + + ArrayList<Integer> diff = getDiffPath(path, current); + + boolean spaces=false; + + ArrayList<Integer> common = this.getDiffCommon(path, current); + + if(current!=null && (current.size()>common.size())) { + + // close brackets + for(int bc =0;bc<current.size()-common.size();bc++) { + b.append(")"); + open--; + } + if(diff.size()==0 && newLine) b.append("\n"); + spaces=true; + } + + if(i!=0 && diff.size()>0 && newLine) b.append("\n").append(createSpaces(open)); + + for(int k=diff.size()-1;k>=0;k--) { + open++; + b.append("("+(entries[path.get(k)]==null?" ":entries[path.get(k)])); + if (k!=0 &&path.size()-1!=k && newLine) + b.append("\n").append(createSpaces(open)); + spaces=false; + } + if(spaces) b.append(createSpaces(open)); + else b.append(" "); + + String term=entries[i]; + if(term.equals("(")) term="-LRB-"; + if(term.equals(")")) term="-RRB-"; + if(term.equals("{")) term="-LCB-"; + if(term.equals("}")) term="-RCB-"; + + String ps=pos[i]; + if(ps.equals("(")) ps="-LRB-"; + if(ps.equals("$(")) ps="-LRB-"; + + if(ps.equals(")")) ps="-RRB-"; + if(ps.equals("{")) ps="-LCB-"; + if(ps.equals("}")) ps="-RCB-"; + + + b.append("(").append(ps).append(" ").append(term).append(')'); + current = path; + // break; + } + for(;open>0;open--) { + b.append(")"); + } + // b.append("\n"); + + return b.toString(); + } + static int cnt=0; + + /** + * @param path + * @param current + * @return + */ + private ArrayList<Integer> getDiffPath(ArrayList<Integer> path, ArrayList<Integer> current) { + if (current==null) return path; + + ArrayList<Integer> common = new ArrayList<Integer>(); + + int pindex = path.size()-1; + int cindex = current.size()-1; + + while(cindex>=0 && pindex>=0) { + + if(path.get(pindex)==current.get(cindex)) { + cindex--; + pindex--; + } else break; + } + + for(int k=0;k<=pindex;k++) { + common.add(path.get(k)); + } + + return common; + } + + private ArrayList<Integer> getDiffCommon(ArrayList<Integer> path, ArrayList<Integer> current) { + if (current==null) return path; + + ArrayList<Integer> common = new ArrayList<Integer>(); + + int pindex = path.size()-1; + int cindex = current.size()-1; + + while(cindex>=0 && pindex>=0) { + + if(path.get(pindex)==current.get(cindex)) { + common.add(path.get(pindex)); + cindex--; + pindex--; + } else break; + } + + Collections.reverse(common); + // System.out.println("common "+pindex+" "+common); + + return common; + } + /** + * @param i + * @return + */ + private StringBuffer createSpaces(int i) { + StringBuffer s = new StringBuffer(); + for (int k=0;k<i;k++) s.append(" "); + return s; + } + + + /** + * @param i + * @return + */ + private ArrayList<Integer> getPathToRoot(int i) { + + ArrayList<Integer> path = new ArrayList<Integer> (); + + int h=i; + while(true) { + h=this.head[h]; + if (h<this.terminalCount || path.contains(h)) break; + path.add(h); + } + + // Collections.reverse(list) + + + return path; + } + + + public String conll09() { + + StringBuilder s = new StringBuilder(); + for(int i=0;i<this.terminalCount;i++) { + if (head[i]==-1&&entries[i]==null) break; + + s.append((i+1)).append('\t').append(entries[i]).append("\t_\t_\t").append(pos[i]).append("\t_\t_\t_\t_\t_\t_\t_\t_\n"); + + + } + + + return s.toString(); + } + + /** + * @param phead + * @return + */ + public int[] getChilds(int head) { + + int count=0; + for(int i =0;i<this.entries.length;i++) { + if (this.head[i]==head) count++; + } + + int[] clds = new int[count]; + count=0; + for(int i =0;i<this.entries.length;i++) { + if (this.head[i]==head) clds[count++]=i; + } + + return clds; + } + +} diff --git a/dependencyParser/basic/mate-tools/src/is2/data/Parameter.java b/dependencyParser/basic/mate-tools/src/is2/data/Parameter.java new file mode 100644 index 0000000..35a9911 --- /dev/null +++ b/dependencyParser/basic/mate-tools/src/is2/data/Parameter.java @@ -0,0 +1,13 @@ +/** + * + */ +package is2.data; + +/** + * @author Dr. Bernd Bohnet, 23.12.2010 + * + * + */ +public class Parameter { + +} diff --git a/dependencyParser/basic/mate-tools/src/is2/data/ParametersFloat.java b/dependencyParser/basic/mate-tools/src/is2/data/ParametersFloat.java new file mode 100755 index 0000000..653487e --- /dev/null +++ b/dependencyParser/basic/mate-tools/src/is2/data/ParametersFloat.java @@ -0,0 +1,183 @@ +package is2.data; + +import is2.util.DB; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; + + + +final public class ParametersFloat { + + public float[] parameters; + public float[] total; + + public ParametersFloat(int size) { + + parameters = new float[size]; + total = new float[size]; + for(int i = 0; i < parameters.length; i++) { + parameters[i] = 0F; + total[i] = 0F; + } + } + + + /** + * @param parameters2 + */ + public ParametersFloat(float[] p) { + parameters =p; + } + + public void average(double avVal) { + for(int j = 0; j < total.length; j++) { + parameters[j] = total[j]/((float)avVal); + } + total =null; + } + + public ParametersFloat average2(double avVal) { + float[] px = new float[this.parameters.length]; + for(int j = 0; j < total.length; j++) { + px[j] = total[j]/((float)avVal); + } + ParametersFloat pf = new ParametersFloat(px); + return pf; + } + + public void update(FV pred, FV act, float upd, float err) { + + + float lam_dist = act.getScore(parameters,false)- pred.getScore(parameters,false); + float loss =(float)err - lam_dist; + + FV dist = act.getDistVector(pred); + + float alpha; + float A = dist.dotProduct(dist); + if (A<=0.0000000000000001) alpha=0.0f; + else alpha= loss/A; + + // alpha = Math.min(alpha, 0.00578125F); + + dist.update(parameters, total, alpha, upd,false); + + } + + public void update(FV pred, FV act, float upd, float err, float C) { + + + float lam_dist = act.getScore(parameters,false)- pred.getScore(parameters,false); + float loss =(float)err - lam_dist; + + FV dist = act.getDistVector(pred); + + float alpha; + float A = dist.dotProduct(dist); + if (A<=0.0000000000000001) alpha=0.0f; + else alpha= loss/A; + + alpha = Math.min(alpha, C); + + dist.update(parameters, total, alpha, upd,false); + + } + + + + public double update(FV a, double b) { + + double A = a.dotProduct(a); + if (A<=0.0000000000000000001) return 0.0; + return b/A; + } + + + public double getScore(FV fv) { + if (fv ==null) return 0.0F; + return fv.getScore(parameters,false); + + } + + + final public void write(DataOutputStream dos) throws IOException{ + + dos.writeInt(parameters.length); + for(float d : parameters) dos.writeFloat(d); + + } + + public void read(DataInputStream dis) throws IOException{ + + parameters = new float[dis.readInt()]; + int notZero=0; + for(int i=0;i<parameters.length;i++) { + parameters[i]=dis.readFloat(); + if (parameters[i]!=0.0F) notZero++; + } + + DB.println("read parameters "+parameters.length+" not zero "+notZero); + + } + + public int countNZ() { + + int notZero=0; + for(int i=0;i<parameters.length;i++) { + if (parameters[i]!=0.0F) notZero++; + } + return notZero; + + } + + public F2SF getFV() { + return new F2SF(parameters); + } + + + public int size() { + return parameters.length; + } + + public void update(FVR act, FVR pred, Instances isd, int instc, Parse dx, double upd, double e, float lam_dist) { + + e++; + + + float b = (float)e-lam_dist; + + FVR dist = act.getDistVector(pred); + + dist.update(parameters, total, hildreth(dist,b), upd,false); + } + + + public void update(FVR pred, FVR act, float upd, float e) { + + e++; + float lam_dist = act.getScore(parameters,false)- pred.getScore(parameters,false); + + float b = (float)e-lam_dist; + + FVR dist = act.getDistVector(pred); + + dist.update(parameters, total, hildreth(dist,b), upd,false); + } + + protected double hildreth(FVR a, double b) { + + double A = a.dotProduct(a); + if (A<=0.0000000000000000001) return 0.0; + return b/A; + } + + public float getScore(FVR fv) { //xx + if (fv ==null) return 0.0F; + return fv.getScore(parameters,false); + + } + + +} diff --git a/dependencyParser/basic/mate-tools/src/is2/data/Parse.java b/dependencyParser/basic/mate-tools/src/is2/data/Parse.java new file mode 100755 index 0000000..21a83d9 --- /dev/null +++ b/dependencyParser/basic/mate-tools/src/is2/data/Parse.java @@ -0,0 +1,157 @@ +package is2.data; + + +import java.util.BitSet; + + +public class Parse implements Comparable<Parse> { + + public short[] heads; + public short[] labels; + public double f1; + + + public Parse() {} + + public Parse(int i) { + heads = new short[i]; + labels = new short[i]; + + } + /** + * @param heads2 + * @param types2 + * @param p_new + */ + public Parse(short[] heads2, short[] types2, float p_new) { + this.heads = new short[heads2.length]; + this.labels = new short[types2.length]; + // this.heads=heads2; + // this.labels=types2; + System.arraycopy(heads2, 0, heads, 0, heads.length); + System.arraycopy(types2, 0, labels, 0, labels.length); + f1=p_new; + + } + + /** + * @param heads2 + * @param types2 + * @param p_new + */ + public Parse(String parse, float p_new) { + + // this(parse.length()/2); + + signature2parse(parse); + + f1=p_new; + + } + + public void signature2parse(String parse) { + int p=0; + heads = new short[parse.length()/2]; + labels = new short[heads.length]; + // DB.println("pl "+parse.length()); + for(int k=0;k<heads.length;k++) { + heads[k]= (short)parse.charAt(p++); + labels[k] = (short)parse.charAt(p++); + } + } + + + @Override + public Parse clone() { + Parse p = new Parse(); + p.heads = new short[heads.length]; + p.labels = new short[labels.length]; + + System.arraycopy(heads, 0, p.heads, 0, heads.length); + System.arraycopy(labels, 0, p.labels, 0, labels.length); + + p.f1=f1; + + return p; + } + + /** + * Check if it is a tree + * @return + */ + public boolean checkTree() { + + BitSet set = new BitSet(heads.length); + set.set(0); + return checkTree(set, 0); + + } + + /** + * @param set + * @return + */ + private boolean checkTree(BitSet set, int h) { + //System.out.print(" h "+h); + + for(int i=0;i<heads.length;i++) { + if (heads[i]==h) { + // System.out.print(" "+i); + if (!set.get(i)) checkTree(set, i); + set.set(i); + + } + } + + for(int i=0;i<heads.length;i++) { + if (!set.get(i)) return false; + } + return true; + } + + public String toString() { + StringBuilder b = new StringBuilder(); + for(int k=0;k<this.heads.length;k++) { + b.append(k).append(" ").append(heads[k]+" ").append(this.labels[k]).append("\n"); + } + return b.toString(); + } + + + + /* (non-Javadoc) + * @see java.lang.Comparable#compareTo(java.lang.Object) + */ + @Override + public int compareTo(Parse o) { + + if (f1==o.f1) return this.signature().compareTo(o.signature()); + return f1<o.f1?1:f1==o.f1?0:-1; + } + + /** + * @return the signature of a parse + */ + public String signature() { + StringBuilder b = new StringBuilder(heads.length*2); + for(int k=0;k<heads.length;k++) { + b.append((char)heads[k]).append((char)labels[k]); + } + return b.toString(); + } + + + /** + * @return the signature of a parse + */ + public StringBuilder signatureSB() { + StringBuilder b = new StringBuilder(heads.length*2); + for(int k=0;k<heads.length;k++) { + b.append((char)heads[k]).append((char)labels[k]); + } + return b; + } + + +} + \ No newline at end of file diff --git a/dependencyParser/basic/mate-tools/src/is2/data/ParseNBest.java b/dependencyParser/basic/mate-tools/src/is2/data/ParseNBest.java new file mode 100644 index 0000000..b66306c --- /dev/null +++ b/dependencyParser/basic/mate-tools/src/is2/data/ParseNBest.java @@ -0,0 +1,107 @@ +package is2.data; + + + + +final public class ParseNBest extends Parse { + + + private String signature=null; + + //public float[] scores; + + public ParseNBest() {} + + public ParseNBest(short[] heads2, short[] types2, float p_new) { + super(heads2, types2, p_new); + } + + public ParseNBest(int i) { + super(i); + } + + /** + * @param sig + * @param readFloat + */ + public ParseNBest(String sig, float score) { + super(sig,score); + } + + /** + * create a total order to provide replicable deterministic results + * @param o + * @return + */ + public int compareTo(ParseNBest o) { + if (f1<o.f1) return 1; + if (f1==o.f1) { + if (signature==null) signature=signature(); + if (o.signature==null) o.signature=o.signature(); + return o.signature.compareTo(signature); + + } + return -1; + } + + /** + * @return the signature of a parse + */ + public String signature() { + if (signature!=null) return signature; + signature= super.signature(); + return signature; + } + + /** + * @return the signature of a parse + */ + public String signature(short[] heads, short[] labels) { + StringBuilder b = new StringBuilder(heads.length*2); + for(int k=0;k<heads.length;k++) { + b.append((char)heads[k]). + append((char)labels[k]); + } + signature = b.toString(); + return signature; + } + + /** + * @param heads + * @param types + * @param oldP + * @param ch + * @param s + */ + public String signature(short[] heads, short[] types, short p, short ch,short l) { + StringBuilder b = new StringBuilder(heads.length*2); + for(int k=0;k<heads.length;k++) { + + + b.append(k==ch?(char)p: + (char)heads[k]). + append(k==ch?(char)l:(char)types[k]); + } + signature = b.toString(); + return signature; + + } + + @Override + public Parse clone() { + ParseNBest p = new ParseNBest(); + p.heads = new short[heads.length]; + p.labels = new short[labels.length]; + + System.arraycopy(heads, 0, p.heads, 0, heads.length); + System.arraycopy(labels, 0, p.labels, 0, labels.length); + + p.f1=f1; + + return p; + } + + +} + + \ No newline at end of file diff --git a/dependencyParser/basic/mate-tools/src/is2/data/PipeGen.java b/dependencyParser/basic/mate-tools/src/is2/data/PipeGen.java new file mode 100755 index 0000000..b63fb90 --- /dev/null +++ b/dependencyParser/basic/mate-tools/src/is2/data/PipeGen.java @@ -0,0 +1,83 @@ +package is2.data; + + +public class PipeGen { + + public static final String SENSE = "SENSE",POS = "POS",DIST = "DIST",WORD = "WORD",PRED = "PRED",ARG = "ARG", + FEAT = "F", REL = "REL",TYPE = "TYPE" ,CHAR = "C",FFEATS="FF", DIR="DIR",LA = "LA",RA = "RA"; + + public static final String GPOS = "GPOS", MID = "MID",END = "END",STR = "STR",FM="FM", NOFEAT = "NOFEAT"; + + public static final String _0 = "0",_4 = "4", _3 = "3", _2 = "2",_1 = "1", _5 = "5",_10 = "10"; + + static public int outValue(int num1, int del) { + String out = ""+num1; + StringBuffer delS=new StringBuffer(); + for(int k =0;k< del;k++) delS.append('\b'); + del=out.length(); + System.out.print(delS+out); + return del; + } + + static public int outValue(int num1, int del, long last) { + String out = ""+num1+" ("+(System.currentTimeMillis()-last)/(num1+1)+" ms/instance)"; + StringBuffer delS=new StringBuffer(); + for(int k =0;k< del;k++) delS.append('\b'); + del=out.length(); + System.out.print(delS+out); + return del; + } + + static public int outValueErr(int num1, float err, float f1, int del, long last) { + + String out = ""+num1+" ("+(System.currentTimeMillis()-last)/(num1+1)+" ms/instance "+(err/num1)+" err/instance f1="+ + f1 +") "; + StringBuffer delS=new StringBuffer(); + for(int k =0;k< del;k++) delS.append('\b'); + del=out.length(); + System.out.print(delS+out); + return del; + } + + + static public int outValueErr(int num1, float err, float f1, int del, long last, double upd) { + String out = ""+num1+" ("+(System.currentTimeMillis()-last)/(num1+1)+" ms/instance "+(err/num1)+" err/instance f1="+ + f1 +") upd "+upd; + StringBuffer delS=new StringBuffer(); + for(int k =0;k< del;k++) delS.append('\b'); + del=out.length(); + System.out.print(delS+out); + return del; + } + + static public int outValueErr(int num1, float err, float f1, int del, long last, double upd, String info) { + String out = ""+num1+" ("+(System.currentTimeMillis()-last)/(num1+1)+" ms/instance "+(err/(float)num1)+" err/instance f1="+ + f1 +") upd "+upd+" "+info; + StringBuffer delS=new StringBuffer(); + for(int k =0;k< del;k++) delS.append('\b'); + del=out.length(); + System.out.print(delS+out); + return del; + } + + + /** + * @param cnt + * @param l + * @return + */ + public static String getSecondsPerInstnace(int cnt, long l) { + return " "+((float)l/(cnt*1000f))+" seconds/sentnece "; + } + + /** + * @param l + * @return + */ + public static String getUsedTime(long l) { + return "Used time " + (((float)l)/1000f)+" seconds "; + } + + + +} diff --git a/dependencyParser/basic/mate-tools/src/is2/data/PrimeFinder.java b/dependencyParser/basic/mate-tools/src/is2/data/PrimeFinder.java new file mode 100644 index 0000000..38c614b --- /dev/null +++ b/dependencyParser/basic/mate-tools/src/is2/data/PrimeFinder.java @@ -0,0 +1,66 @@ +/** + * + */ +package is2.data; + +import java.util.Arrays; + +/** + * @author Dr. Bernd Bohnet, 13.05.2010 + * + * + */ +public class PrimeFinder { + + + + public PrimeFinder() + { + } + + public static final int nextPrime(int desiredCapacity) + { + int i = Arrays.binarySearch(primeCapacities, desiredCapacity); + if(i < 0) + i = -i - 1; + return primeCapacities[i]; + } + + public static final int largestPrime = 2147483647; + private static final int primeCapacities[] = { + 2147483647, 5, 11, 23, 47, 97, 197, 397, 797, 1597, + 3203, 6421, 12853, 25717, 51437, 102877, 205759, 411527, 823117, 1646237, + 3292489, 6584983, 13169977, 26339969, 52679969, 105359939, 210719881, 421439783, 842879579, 1685759167, + 433, 877, 1759, 3527, 7057, 14143, 28289, 56591, 113189, 226379, + 452759, 905551, 1811107, 3622219, 7244441, 14488931, 28977863, 57955739, 115911563, 231823147, + 463646329, 927292699, 1854585413, 953, 1907, 3821, 7643, 15287, 30577, 61169, + 122347, 244703, 489407, 978821, 1957651, 3915341, 7830701, 15661423, 31322867, 62645741, + 125291483, 250582987, 501165979, 1002331963, 2004663929, 1039, 2081, 4177, 8363, 16729, + 33461, 66923, 133853, 267713, 535481, 1070981, 2141977, 4283963, 8567929, 17135863, + 34271747, 68543509, 137087021, 274174111, 548348231, 1096696463, 31, 67, 137, 277, + 557, 1117, 2237, 4481, 8963, 17929, 35863, 71741, 143483, 286973, + 573953, 1147921, 2295859, 4591721, 9183457, 18366923, 36733847, 73467739, 146935499, 293871013, + 587742049, 1175484103, 599, 1201, 2411, 4831, 9677, 19373, 38747, 77509, + 155027, 310081, 620171, 1240361, 2480729, 4961459, 9922933, 19845871, 39691759, 79383533, + 158767069, 317534141, 635068283, 1270136683, 311, 631, 1277, 2557, 5119, 10243, + 20507, 41017, 82037, 164089, 328213, 656429, 1312867, 2625761, 5251529, 10503061, + 21006137, 42012281, 84024581, 168049163, 336098327, 672196673, 1344393353, 3, 7, 17, + 37, 79, 163, 331, 673, 1361, 2729, 5471, 10949, 21911, + 43853, 87719, 175447, 350899, 701819, 1403641, 2807303, 5614657, 11229331, 22458671, + 44917381, 89834777, 179669557, 359339171, 718678369, 1437356741, 43, 89, 179, 359, + 719, 1439, 2879, 5779, 11579, 23159, 46327, 92657, 185323, 370661, + 741337, 1482707, 2965421, 5930887, 11861791, 23723597, 47447201, 94894427, 189788857, 379577741, + 759155483, 1518310967, 379, 761, 1523, 3049, 6101, 12203, 24407, 48817, + 97649, 195311, 390647, 781301, 1562611, 3125257, 6250537, 12501169, 25002389, 50004791, + 100009607, 200019221, 400038451, 800076929, 1600153859 + }; + + static + { + Arrays.sort(primeCapacities); + } + + + + +} diff --git a/dependencyParser/basic/mate-tools/src/is2/data/RandomIndex.java b/dependencyParser/basic/mate-tools/src/is2/data/RandomIndex.java new file mode 100644 index 0000000..7fc67b3 --- /dev/null +++ b/dependencyParser/basic/mate-tools/src/is2/data/RandomIndex.java @@ -0,0 +1,161 @@ +/** + * + */ +package is2.data; + +import java.util.BitSet; + +import is2.util.DB; + + +/** + * @author Dr. Bernd Bohnet, 20.05.2011 + * + * + */ +public class RandomIndex implements Long2IntInterface { + + + final int[] prims = {52349171,199951347,89990,5001,32891,17,19,23,29,31,37,47,53,59,61,67,71}; +// final int[] prims = {1,3,5,7,11,17,19,23,29,31,37,47,53,59,61,67,71}; + + final long hashFunctionModifiers[]; + + final int kbit,lbit; + final int hsize ; // maximal size of hash + + final int bits; // available bits + final int moves; // needed moves to put a number into + + + /** + * Creates the random functions. + * + * @param kbit The bits to be mapped + * @param lbit The left shift of the bits + * @param hsize The size of the featurs space (not included in the original algorithm) + * @param numberFunctions The number of the hash functions + */ + public RandomIndex(int kbit, int lbit, int hsize, int numberFunctions) { + + + this.kbit =kbit; + this.lbit =lbit; + + + if (hsize<=0) this.hsize = 67000001; // default value + else this.hsize = hsize; + + bits = (int) Math.ceil(Math.log(this.hsize)/Math.log(2)); + + moves = (int) Math.ceil(64f/(float)bits); + + + + DB.println("moves "+moves+" bits "+bits+" hsize "+hsize); + + hashFunctionModifiers = new long[numberFunctions]; + + for (int f = 0;f<numberFunctions;f++) hashFunctionModifiers[f] = prims[f]; + } + + + + public int[] hash(long x) + { + int[] hvals = new int[hashFunctionModifiers.length]; + + for(int k=0;k<hashFunctionModifiers.length;k++) { + + // the original function: value = ((x+1) * hashFunctionModifiers[k] & m ) >> n; + + // the first part of the original function + long value = (x+1) * hashFunctionModifiers[k]; + + // do the above >> n with a maximal size of the available hash values + // Shift all bits until they have been each xor-ed (^) in the range of the hash + // in order the have all information potentially represented there. + + for(int j=1;j<= moves;j++) value = value ^ (value >> (bits*j)); + + // Map the value to the range of the available space should be the same as (value & m) . + hvals[k] = Math.abs((int)value % hsize); + } + return hvals; + } + + public int[] hashU(long x) + { + int[] hvals = new int[hashFunctionModifiers.length]; + + long y = Long.reverse(x); + for(int k=0;k<hashFunctionModifiers.length;k++) { + + // the original function: value = ((x+1) * hashFunctionModifiers[k] & m ) >> n; + + // the first part of the original function + long value1 = (((y+1) * hashFunctionModifiers[k]) /* % 2 pow 64 */ ) >> (kbit-lbit); + + // I get probably only the first part lets get the second part too + // long value2 = (((y+1>>20) * hashFunctionModifiers[k]) /* % 2 pow 64 */ ) >> (kbit-lbit); + + + // the modulo (%) 2 pow 64 is done since the long number can not be larger than 2 pow 64. + // System.out.println("value "+value+" shift "+(lbit-kbit)); + hvals[k] = Math.abs((int)value1); + } + return hvals; + } + + /* + (defun generate-hash-fn (&key (k-bit 32) + (l-bit 8) + verbosep constants (count 4)) + + (labels ((random-constant () + (let ((a (+ (random (- (expt 2 k-bit) 1)) 1))) + (logior a 1)))) ;; inclusive OR ensures odd number. + (let ((pdiff (- (- k-bit l-bit)));; neg. sign to do a rightshift, see ash() + (sub1 (- (expt 2 k-bit) 1)) + (constants (copy-list constants))) + (unless constants + (loop ;; a = odd number a where 0 < a < u. + until (= count (length constants)) + do (pushnew (random-constant) constants))) + (when verbosep + (format t "~&generate-hash-fn(): using random constants: ~a~%" + constants)) + (values + #'(lambda (x) + (loop + for a in constants + ;;; always add 1 to x to avoid f(0)=0. + collect (ash (logand (* (+ 1 x) a) sub1) pdiff))) + constants)))) + + */ + + + + + + /* (non-Javadoc) + * @see is2.data.Long2IntInterface#l2i(long) + */ + @Override + public int l2i(long l) { + // TODO Auto-generated method stub + return 0; + } + + /* (non-Javadoc) + * @see is2.data.Long2IntInterface#size() + */ + @Override + public int size() { + return hsize; + } + +} + + diff --git a/dependencyParser/basic/mate-tools/src/is2/data/SentenceData09.java b/dependencyParser/basic/mate-tools/src/is2/data/SentenceData09.java new file mode 100755 index 0000000..46cabc0 --- /dev/null +++ b/dependencyParser/basic/mate-tools/src/is2/data/SentenceData09.java @@ -0,0 +1,530 @@ +package is2.data; + + +import is2.io.CONLLReader09; +import is2.io.CONLLWriter09; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; +import java.io.ObjectInputStream; +import java.io.StringWriter; +import java.util.ArrayList; + +public class SentenceData09 { + + + public String[] id; + public String[] forms; + + public String[] lemmas; + public String[] plemmas; + + public int[] heads; + public int[] pheads; + + public String[] labels; + public String[] plabels; + + public String[] gpos; // gold pos + public String[] ppos; + + public String feats[][]; +// public String[] split_lemma; + + public String[] sem; + public int[] semposition; + + // predicate number, argument number -> argument string + public String[][] arg; + public int[][] argposition; + + public String[] fillp; + + public String[] ofeats; + public String[] pfeats; + + public SentenceData09() {} + + public SentenceData09(String[] forms, String[] postags, String[] labs, int[] heads) { + this.forms = forms; + gpos = postags; + labels = labs; + this.heads = heads; + } + + public SentenceData09(String[] forms, String[] lemmas, String[] postags, String[] labs, int[] heads) { + this.forms = forms; + gpos = postags; + //ppos = postags; + + labels = labs; + this.heads = heads; + this.plemmas = lemmas; + } + public SentenceData09(String[] forms, String[] lemmas, String[] gpos, String[] ppos, String[] labs, int[] heads) { + this.forms = forms; + this.gpos = gpos; + this.ppos = ppos; + + labels = labs; + this.heads = heads; + this.plemmas = lemmas; + + + } + public SentenceData09(String[] forms, String[] lemmas, String[] gpos, String[] ppos, String[] labs, int[] heads, String[] fillpred) { + this.forms = forms; + this.gpos = gpos; + this.ppos = ppos; + + labels = labs; + this.heads = heads; + this.plemmas = lemmas; + + fillp =fillpred; + } + + public SentenceData09(String[] forms, String[] lemmas, String[] olemmas,String[] gpos, String[] ppos, String[] labs, int[] heads, String[] fillpred) { + this.forms = forms; + this.gpos = gpos; + this.ppos = ppos; + + labels = labs; + this.heads = heads; + this.plemmas = lemmas; + this.lemmas =olemmas; + fillp =fillpred; + } + + public SentenceData09(String[] forms, String[] olemmas, String[] lemmas,String[] gpos, + String[] ppos, String[] labs, int[] heads, String[] fillpred, String[] of, String[] pf) { + this.forms = forms; + this.gpos = gpos; + this.ppos = ppos; + + labels = labs; + this.heads = heads; + this.pheads =heads; + this.plabels=labs; + this.plemmas = lemmas; + this.lemmas =olemmas; + + this.ofeats =of; + this.pfeats =pf; + fillp =fillpred; + } + + + + + /** + * Create an instance without root of the input instance + * @param instance + */ + public SentenceData09(SentenceData09 i) { + + int length = i.length()-1; + + forms = new String[length]; + gpos = new String[length]; + ppos = new String[length]; + plemmas = new String[length]; + plabels = new String[length]; + lemmas = new String[length]; + heads = new int[length]; + pheads = new int[length]; + ofeats = new String[length]; + pfeats = new String[length]; + labels = new String[length]; + fillp = new String[length]; + id = new String[length]; + + + for(int j = 0; j < length; j++) { + forms[j] = i.forms[j+1]; + ppos[j] = i.ppos[j+1]; + gpos[j] = i.gpos[j+1]; + + labels[j] = i.labels[j+1]; + heads[j] = i.heads[j+1]; + + + + if (i.pheads!=null) pheads[j] = i.pheads[j+1]; + if (i.plabels!=null) plabels[j] = i.plabels[j+1]; + + + if (i.lemmas!=null) lemmas[j] = i.lemmas[j+1]; + + plemmas[j] = i.plemmas[j+1]; + + + if (i.ofeats!=null) ofeats[j] = i.ofeats[j+1]; + if (i.pfeats!=null) pfeats[j] = i.pfeats[j+1]; + + if (i.fillp!=null) fillp[j] = i.fillp[j+1]; + if (i.id!=null) id[j] = i.id[j+1]; + } + + + } + public void setPPos(String[] pos) { + ppos=pos; + } + + public void setLemmas(String[] lemmas) { + this.plemmas=lemmas; + } + + public void setFeats(String[] fts) { + feats = new String[fts.length][]; + for(int i=0;i<fts.length;i++) { + feats[i] = fts[i].split("\\|"); + } + pfeats =fts; + } + + public int length () { + return forms.length; + } + + @Override + public String toString () { + // prepare the output + StringWriter sw = new StringWriter(); + CONLLWriter09 snt2str = new is2.io.CONLLWriter09(sw); + try{ + snt2str.write(this, CONLLWriter09.NO_ROOT); + snt2str.finishWriting(); + return sw.toString(); + }catch(Exception e) { + e.printStackTrace(); + } + + // backup + StringBuffer sb = new StringBuffer(); + for(int k=0;k<forms.length;k++) sb.append(k+1).append('\t').append(forms[k]).append('\t').append(heads[k]).append('\t').append(labels[k]).append('\n'); + return sw.toString(); + } + + + final public void write (DataOutputStream out) throws IOException { + + out.writeInt(forms.length); + for(int k=0;k<forms.length;k++) { + out.writeUTF(forms[k]); + out.writeUTF(ppos[k]); + out.writeUTF(gpos[k]); + out.writeInt(heads[k]); + out.writeUTF(labels[k]); + out.writeUTF(lemmas[k]); + out.writeUTF(plemmas[k]); + out.writeUTF(ofeats[k]); // needed for mtag + out.writeUTF(fillp[k]); + } + + // out.writeUTF(actParseTree); + + } + + final public void read (DataInputStream dis) throws IOException { + + int l = dis.readInt(); + + forms = new String[l]; + lemmas = new String[l]; + plemmas = new String[l]; + ppos = new String[l]; + gpos = new String[l]; + labels = new String[l]; + heads = new int[l]; + fillp = new String[l]; + ofeats=new String[l]; + + for(int k=0;k<l;k++) { + forms[k] = dis.readUTF(); + ppos[k]=dis.readUTF(); + gpos[k]=dis.readUTF(); + heads[k]=dis.readInt(); + labels[k]=dis.readUTF(); + lemmas[k]=dis.readUTF(); + plemmas[k]=dis.readUTF(); + ofeats[k]=dis.readUTF(); + fillp[k]=dis.readUTF(); + + } + } + + + private void readObject (ObjectInputStream in) throws IOException, ClassNotFoundException { + forms = (String[])in.readObject(); + plemmas = (String[])in.readObject(); + ppos = (String[])in.readObject(); + heads = (int[])in.readObject(); + labels = (String[])in.readObject(); + } + + public void addPredicate(int i, String s) { + + int predId; + if (sem == null) { + predId=0; + sem = new String[1]; + semposition = new int[1]; + } + else { + predId=sem.length; + String p[] = new String[sem.length+1]; + System.arraycopy(sem, 0, p, 0, sem.length); + int id[] = new int[sem.length+1]; + System.arraycopy(semposition, 0, id, 0, semposition.length); + sem =p; + semposition=id; + } + sem[predId]=s; + semposition[predId]=i; + } + + + /** + * Add an argument + * @param i the instance (the child) + * @param predId the id of the predicate (the head) + * @param a the label of the argument + */ + public void addArgument(int i, int predId, String a) { + + if (a ==null || a.equals("_")) return; + + // ensure the space for the argument in the data structure + if (arg == null) { + arg = new String[predId+1][]; + argposition = new int[predId+1][]; + } else if (arg.length<=predId) { + String p[][] = new String[predId+1][]; + System.arraycopy(arg, 0, p, 0, arg.length); + arg =p; + + int id[][] = new int[predId+1][]; + System.arraycopy(argposition, 0, id, 0, argposition.length); + argposition = id; + } + + + + int aId; + if (arg[predId]==null) { + aId=0; + arg[predId] = new String[1]; + argposition[predId] = new int[1]; + } else { + aId =arg[predId].length; + String args[] = new String[arg[predId].length+1]; + System.arraycopy(arg[predId], 0, args, 0, arg[predId].length); + arg[predId]=args; + + int argsId[] = new int[argposition[predId].length+1]; + System.arraycopy(argposition[predId], 0, argsId, 0, argposition[predId].length); + argposition[predId]=argsId; + } + + arg[predId][aId]=a; + argposition[predId][aId]=i; + + } + + public int[] getParents() { + return heads; + } + + public String[] getLabels() { + return labels; + } + + public String printSem() { + + if (sem==null) return ""; + StringBuilder s = new StringBuilder(); + + for(int k=0;k<sem.length;k++) { + s.append(sem[k]).append("\n"); + + if (arg==null) { + s.append("arg == null"); + }else + if (arg.length<=k) { + s.append("args.length <=k arg.length:"+arg.length+" k:"+k); + } else if (arg[k]!=null) { + for(int a=0;a< arg[k].length;a++) { + s.append(" ").append(arg[k][a]); + } + } else { + s.append("args == null "); + } + s.append('\n'); + } + return s.toString(); + } + + + /** + * Initialize a instance so that a tagger, parser, etc. could be applied + * @param forms + */ + public void init(String[] forms) { + this.forms = forms; + heads = new int[forms.length]; + gpos = new String[forms.length]; + ppos = new String[forms.length]; + plemmas = new String[forms.length]; + feats = new String[forms.length][0]; + labels = new String[forms.length]; + } + + /** + * @param instance + * @param fillp2 + * @param i09 + */ + public void createSemantic(SentenceData09 instance) { + + this.sem = instance.sem; + this.semposition = instance.semposition; + + if (instance.semposition!=null) + for (int k= 0;k< instance.semposition.length;k++) { + this.semposition[k]=instance.semposition[k]-1; + } + + this.arg = instance.arg; + + + this.argposition = instance.argposition; + + if (this.argposition!=null) + for (int p= 0;p< instance.argposition.length;p++) { + if (this.argposition[p]!=null) + for(int a=0;a<instance.argposition[p].length;a++) + this.argposition[p][a]=instance.argposition[p][a]-1; + } + + + } + + /** + * + */ + public String oneLine() { + + + StringBuffer o = new StringBuffer(); + for(int i=1;i<this.length();i++) { + + if (i!=1)o.append(" "); + o.append(this.forms[i]); + } + return o.toString(); + } + + /** + * Get the children of this instance + * @param head + * @return children of the head + */ + public ArrayList<Integer> getChildren(int head) { + + ArrayList<Integer> children = new ArrayList<Integer>(); + for(int i=0;i<length();i++) { + if (heads[i]==head) children.add(i); + } + return children; + } + + public void createWithRoot(SentenceData09 i) { + + int length = i.length(); + int offset = 0; + if (! i.forms[0].equals(CONLLReader09.ROOT)) { + length++; + offset = -1; + } + + + + forms = new String[length]; + gpos = new String[length]; + ppos = new String[length]; + plemmas = new String[length]; + plabels = new String[length]; + lemmas = new String[length]; + heads = new int[length]; + pheads = new int[length]; + ofeats = new String[length]; + pfeats = new String[length]; + labels = new String[length]; + fillp = new String[length]; + id = new String[length]; + feats = new String[forms.length][]; + + for(int j = 1; j < length; j++) { + forms[j] = i.forms[j+offset]; + ppos[j] = i.ppos[j+offset]; + gpos[j] = i.gpos[j+offset]; + + labels[j] = i.labels[j+offset]; + heads[j] = i.heads[j+offset]; + + + + if (i.pheads!=null) pheads[j] = i.pheads[j+offset]; + if (i.plabels!=null) plabels[j] = i.plabels[j+offset]; + + + if (i.lemmas!=null) lemmas[j] = i.lemmas[j+offset]; + + plemmas[j] = i.plemmas[j+offset]; + + + // if (i.ofeats!=null) ofeats[j] = i.ofeats[j+offset]; + + ofeats[j]= i.ofeats[j+offset].equals(CONLLWriter09.DASH)? "_" : i.ofeats[j+offset]; + + // if (i.pfeats!=null) pfeats[j] = i.pfeats[j+offset]; + + if (i.pfeats!=null && i.pfeats[j+offset]!=null) { + if (i.pfeats[j+offset].equals(CONLLWriter09.DASH)) feats[j]=null; + else { + feats[j] =i.pfeats[j+offset].split(CONLLReader09.PIPE); + + // if (info[7].equals(CONLLWriter09.DASH)) it.feats[i]=null; + // else { + // it.feats[i] =info[7].split(PIPE); + pfeats[j] = i.pfeats[j+offset]; + // } + } + } + + if (i.fillp!=null) fillp[j] = i.fillp[j+offset]; + if (i.id!=null) id[j] = i.id[j+offset]; + } + + + + forms[0] = CONLLReader09.ROOT; + plemmas[0] = CONLLReader09.ROOT_LEMMA; + fillp[0] = "N"; + lemmas[0] = CONLLReader09.ROOT_LEMMA; + + gpos[0] = CONLLReader09.ROOT_POS; + ppos[0] = CONLLReader09.ROOT_POS; + labels[0] = CONLLReader09.NO_TYPE; + heads[0] = -1; + plabels[0] = CONLLReader09.NO_TYPE; + pheads[0] = -1; + ofeats[0] = CONLLReader09.NO_TYPE; + id[0] ="0"; + } + + +} diff --git a/dependencyParser/basic/mate-tools/src/is2/data/Thesaurus.java b/dependencyParser/basic/mate-tools/src/is2/data/Thesaurus.java new file mode 100644 index 0000000..2d3677a --- /dev/null +++ b/dependencyParser/basic/mate-tools/src/is2/data/Thesaurus.java @@ -0,0 +1,194 @@ +/** + * + */ +package is2.data; + +import is2.util.DB; + +import java.io.BufferedReader; +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.FileInputStream; +import java.io.IOException; +import java.io.InputStreamReader; +import java.util.ArrayList; + +/** + * @author Dr. Bernd Bohnet, 28.10.2010 + * + * + */ +final public class Thesaurus { + + public static final String LPATH = "LP"; + public static final String SPATH = "SP"; + + // [word][p] p = [0:long-path | 1:short-path] + final private int[][] word2path; + + public Thesaurus() { + word2path =new int[0][]; + } + + /** + * @param clusterFile + * @param mf + * + */ + public Thesaurus(String clusterFile, IEncoderPlus mf, int ls) { + + final String REGEX = "\t"; + + // register words + try { + BufferedReader inputReader = new BufferedReader(new InputStreamReader(new FileInputStream(clusterFile),"UTF-8"),32768); + + int cnt=0; + String line; + while ((line =inputReader.readLine())!=null) { + + cnt++; + try { + String[] split = line.split(REGEX); + // mf.register(LPATH, split[0].length()<ls?split[0]:split[0].substring(0,ls)); + mf.register(PipeGen.WORD, split[0]); + mf.register(PipeGen.WORD, split[1]); + } catch(Exception e) { + System.out.println("Error in cluster line "+cnt+" error: "+e.getMessage()); + } + } + System.out.println("read number of thesaury entries "+cnt); + inputReader.close(); + + } catch (Exception e) { + e.printStackTrace(); + } + + word2path = new int[mf.getFeatureCounter().get(PipeGen.WORD)][]; + + + // insert words + try { + String line; + BufferedReader inputReader = new BufferedReader(new InputStreamReader(new FileInputStream(clusterFile),"UTF-8"),32768); + + int startWd =-1; + ArrayList<Integer> wrds = new ArrayList<Integer>(); + while ((line =inputReader.readLine())!=null) { + + String[] split = line.split(REGEX); + int wd = mf.getValue(PipeGen.WORD, split[0]); + // DB.println("wd "+wd+" "+startWd); + if (startWd == wd) { + int thesaurusWrd = mf.getValue(PipeGen.WORD, split[1]); + if (thesaurusWrd!=wd) wrds.add(thesaurusWrd); + } else if (startWd!=-1) { + int[] ths = new int[wrds.size()]; + for(int k=0;k<ths.length;k++) ths[k]=wrds.get(k); + word2path[startWd] = ths; + // DB.println(""+wrds+" size "+ths.length); + wrds.clear(); + int thesaurusWrd = mf.getValue(PipeGen.WORD, split[1]); + if (thesaurusWrd!=wd) wrds.add(thesaurusWrd); + } + startWd=wd; + } + + if (wrds.size()!=0) { + // put rest of the words + int[] ths = new int[wrds.size()]; + for(int k=0;k<ths.length;k++) ths[k]=wrds.get(k); + word2path[startWd] = ths; + // DB.println(""+wrds+" size "+ths.length); + wrds.clear(); + + + + + } + + inputReader.close(); + int fill=0; + for(int l = 0; l<word2path.length; l++ ){ + if (word2path[l]!=null) fill++; + } + /* + for(int l = 0; l<word2path.length; l++ ){ + if (word2path[l][1]!=0) fillL++; + if (word2path[l][1]<-1) System.out.println("lower "+word2path[l][1]); + } + */ + System.out.println("filled "+fill+" of "+word2path.length); + + } catch (Exception e) { + e.printStackTrace(); + } + } + + /** + * Read the cluster + * @param dos + * @throws IOException + */ + public Thesaurus(DataInputStream dis) throws IOException { + + word2path = new int[dis.readInt()][]; + for(int i =0;i<word2path.length;i++) { + int len = dis.readInt(); + if (len>0) { + word2path[i] = new int[len]; + for(int j =0;j<len;j++) { + word2path[i][j] = dis.readInt(); + + } + } + + word2path[i][0]=dis.readShort(); + } + DB.println("Read cluster with "+word2path.length+" words "); + } + + /** + * Write the cluster + * @param dos + * @throws IOException + */ + public void write(DataOutputStream dos) throws IOException { + + dos.writeInt(word2path.length); + for(int[] i : word2path) { + dos.writeInt(i==null?0:i.length); + + if (i!=null) { + for(int j=0;j<i.length;j++) { + + dos.writeInt(i[j]); + + } + + } + } + + } + + /** + * @param form the id of a word form + * @return the short path to the word form in the cluster + + final public int getSP(int form) { + if (word2path.length<form) return -1; + return word2path[form][0]; + } + */ + /** + * get the long path to a word form in the cluster + * @param form the id of a word form + * @return the long path to the word + */ + final public int get(int form, int k) { + if (word2path.length<form || word2path[form]==null) return -1; + return word2path[form][k]; + } + + +} diff --git a/dependencyParser/basic/mate-tools/src/is2/io/CONLLReader04.java b/dependencyParser/basic/mate-tools/src/is2/io/CONLLReader04.java new file mode 100644 index 0000000..4ca5254 --- /dev/null +++ b/dependencyParser/basic/mate-tools/src/is2/io/CONLLReader04.java @@ -0,0 +1,272 @@ + + +package is2.io; + +import is2.data.Instances; +import is2.data.SentenceData09; +import is2.util.DB; + +import java.io.BufferedReader; +import java.io.FileInputStream; +import java.io.IOException; +import java.io.InputStreamReader; +import java.util.ArrayList; + + + +/** + * This class reads files in the CONLL-08 and CONLL-09 format. + * + * @author Bernd Bohnet + */ +public class CONLLReader04 { + + private static final String US = "_"; + private static final String REGEX = "\t"; + public static final String STRING = "*"; + public static final String PIPE = "\\|"; + public static final String NO_TYPE = "<no-type>"; + public static final String ROOT_POS = "<root-POS>"; + public static final String ROOT_LEMMA = "<root-LEMMA>"; + public static final String ROOT = "<root>"; + public static final String EMPTY_FEAT = "<ef>"; + + private static final String NUMBER = "[0-9]+|[0-9]+\\.[0-9]+|[0-9]+[0-9,]+"; + private static final String NUM = "<num>"; + + private BufferedReader inputReader; + + public static final int TASK08=8; + public static final int TASK09=9; + + public static boolean normalizeOn =true; + + + private int lineNumber = 0; + + public CONLLReader04(){} + + public CONLLReader04(String file){ + lineNumber=0; + try { + inputReader = new BufferedReader(new InputStreamReader(new FileInputStream(file),"UTF-8"),32768); //,"UTF-8" + } catch (Exception e) { + e.printStackTrace(); + } + } + + public CONLLReader04(String file, int task){ + this(file); + } + + + + public void startReading(String file ){ + lineNumber=0; + try { + inputReader = new BufferedReader(new InputStreamReader(new FileInputStream(file),"UTF-8"),32768); + } catch (Exception e) { + e.printStackTrace(); + } + } + + /**i.forms[heads[l]-1]+" "+rel+" "+ + * Read a instance + * @return a instance + * @throws Exception + */ + public SentenceData09 getNext() throws Exception { + + try { + + ArrayList<String[]> lineList = new ArrayList<String[]>(); + + String line = inputReader.readLine(); + + while(line !=null && line.length()<2) { + line = inputReader.readLine(); + lineNumber++; + System.out.println("skip empty line at line "+lineNumber); + } + + while (line != null && line.length()!=0 && !line.startsWith(STRING) &&!line.startsWith(REGEX)) { + lineList.add(line.split(REGEX)); + line = inputReader.readLine(); + lineNumber++; + } + + + + int length = lineList.size(); + + if(length == 0) { + inputReader.close(); + return null; + } + + SentenceData09 it = new SentenceData09(); + + // column content + // 1 id + // 2 form + // 3 lemma + // 4 cpos-tag + // 5 pos-tog + // 6 feats + // 7 head + // 8 deprel + + + it.forms = new String[length+1]; + + it.plemmas = new String[length+1]; + it.gpos = new String[length+1]; + it.labels = new String[length+1]; + it.heads = new int[length+1]; + it.pheads = new int[length+1]; + it.plabels = new String[length+1]; + + it.ppos = new String[length+1]; + it.lemmas = new String[length+1]; + it.fillp = new String[length+1]; + it.feats = new String[length+1][]; + it.ofeats = new String[length+1]; + it.pfeats = new String[length+1]; + + + it.forms[0] = ROOT; + it.plemmas[0] = ROOT_LEMMA; + it.fillp[0] = "N"; + it.lemmas[0] = ROOT_LEMMA; + + it.gpos[0] = ROOT_POS; + it.ppos[0] = ROOT_POS; + it.labels[0] = NO_TYPE; + it.heads[0] = -1; + it.plabels[0] = NO_TYPE; + it.pheads[0] = -1; + it.ofeats[0] = NO_TYPE; + + // root is 0 therefore start with 1 + + for(int i = 1; i <= length; i++) { + + String[] info = lineList.get(i-1); + + it.forms[i] = info[0]; //normalize( + + it.lemmas[i] = "_"; + it.plemmas[i] ="_"; + + // 3 cpos + + it.gpos[i] = info[1]; + it.ppos[i] = info[1]; + + it.ofeats[i]="_"; + + + + it.feats[i]=null; + // it.feats[i] =info[5].split(PIPE); + it.pfeats[i] = "_"; + + + if (info[2].equals(US)) it.heads[i]=-1; + else it.heads[i] = Integer.parseInt(info[2]);// head + + + + it.labels[i] = info[3]; + + + } + return it; + + } catch(Exception e) { + System.out.println("\n!!! Error in input file at line : "+lineNumber+" "+e.toString()); + e.printStackTrace(); + throw new Exception(); + // return null; + } + + } + + /** + * Read a instance an store it in a compressed format + * @param is + * @return + * @throws IOException + */ + final public SentenceData09 getNext(Instances is) throws Exception { + + SentenceData09 it = getNext(); + + if (is !=null) insert(is,it); + + return it; + + } + + + + + final public boolean insert(Instances is, SentenceData09 it) throws IOException { + + try { + + if(it == null) { + inputReader.close(); + return false; + } + + int i= is.createInstance09(it.length()); + + for(int p = 0; p < it.length(); p++) { + + is.setForm(i, p, normalize(it.forms[p])); + is.setGPos(i, p, it.gpos[p]); + + if (it.ppos[p]==null||it.ppos[p].equals(US)) { + is.setPPoss(i, p, it.gpos[p]); + } else is.setPPoss(i, p, it.ppos[p]); + + + if (it.plemmas[p]==null ||it.plemmas[p].equals(US)) { + is.setLemma(i, p, normalize(it.forms[p])); + } else is.setLemma(i, p, normalize(it.plemmas[p])); + + + is.setFeats(i,p,it.feats[p]); + + + is.setFeature(i,p,it.ofeats[p]); + + + is.setRel(i,p,it.labels[p]); + if (it.plabels!=null) is.setPRel(i,p,it.plabels[p]); + is.setHead(i,p,it.heads[p]); + if (it.pheads!=null) is.setPHead(i,p,it.pheads[p]); + + if (it.fillp!=null && it.fillp[p]!=null && it.fillp[p].startsWith("Y")) is.pfill[i].set(p); + else is.pfill[i].clear(p); + } + + if (is.createSem(i,it)) { + DB.println("count "+i+" len "+it.length()); + DB.println(it.printSem()); + } + } catch(Exception e ){ + DB.println("head "+it); + e.printStackTrace(); + } + return true; + + } + public static String normalize (String s) { + if (!normalizeOn) return s; + if(s.matches(NUMBER)) return NUM; + return s; + } + +} diff --git a/dependencyParser/basic/mate-tools/src/is2/io/CONLLReader06.java b/dependencyParser/basic/mate-tools/src/is2/io/CONLLReader06.java new file mode 100755 index 0000000..351fa04 --- /dev/null +++ b/dependencyParser/basic/mate-tools/src/is2/io/CONLLReader06.java @@ -0,0 +1,275 @@ + + +package is2.io; + +import is2.data.Instances; +import is2.data.SentenceData09; +import is2.util.DB; + +import java.io.BufferedReader; +import java.io.FileInputStream; +import java.io.IOException; +import java.io.InputStreamReader; +import java.util.ArrayList; + + + +/** + * This class reads files in the CONLL-08 and CONLL-09 format. + * + * @author Bernd Bohnet + */ +public class CONLLReader06 { + + private static final String US = "_"; + private static final String REGEX = "\t"; + public static final String STRING = "*"; + public static final String PIPE = "\\|"; + public static final String NO_TYPE = "<no-type>"; + public static final String ROOT_POS = "<root-POS>"; + public static final String ROOT_LEMMA = "<root-LEMMA>"; + public static final String ROOT = "<root>"; + public static final String EMPTY_FEAT = "<ef>"; + + private static final String NUMBER = "[0-9]+|[0-9]+\\.[0-9]+|[0-9]+[0-9,]+"; + private static final String NUM = "<num>"; + + private BufferedReader inputReader; + + public static final int TASK08=8; + public static final int TASK09=9; + + public static boolean normalizeOn =true; + + + private int lineNumber = 0; + + public CONLLReader06(){} + + public CONLLReader06(String file){ + lineNumber=0; + try { + inputReader = new BufferedReader(new InputStreamReader(new FileInputStream(file),"UTF-8"),32768); //,"UTF-8" + } catch (Exception e) { + e.printStackTrace(); + } + } + + public CONLLReader06(String file, int task){ + this(file); + } + + + + public void startReading(String file ){ + lineNumber=0; + try { + inputReader = new BufferedReader(new InputStreamReader(new FileInputStream(file),"UTF-8"),32768); + } catch (Exception e) { + e.printStackTrace(); + } + } + + /**i.forms[heads[l]-1]+" "+rel+" "+ + * Read a instance + * @return a instance + * @throws Exception + */ + public SentenceData09 getNext() throws Exception { + + try { + + ArrayList<String[]> lineList = new ArrayList<String[]>(); + + String line = inputReader.readLine(); + + while(line !=null && line.length()==0) { + line = inputReader.readLine(); + lineNumber++; + System.out.println("skip empty line at line "+lineNumber); + } + + while (line != null && line.length()!=0 && !line.startsWith(STRING) &&!line.startsWith(REGEX)) { + lineList.add(line.split(REGEX)); + line = inputReader.readLine(); + lineNumber++; + } + + + + int length = lineList.size(); + + if(length == 0) { + inputReader.close(); + return null; + } + + SentenceData09 it = new SentenceData09(); + + // column content + // 1 id + // 2 form + // 3 lemma + // 4 cpos-tag + // 5 pos-tog + // 6 feats + // 7 head + // 8 deprel + + + it.forms = new String[length+1]; + + it.plemmas = new String[length+1]; + it.gpos = new String[length+1]; + it.labels = new String[length+1]; + it.heads = new int[length+1]; + it.pheads = new int[length+1]; + it.plabels = new String[length+1]; + + it.ppos = new String[length+1]; + it.lemmas = new String[length+1]; + it.fillp = new String[length+1]; + it.feats = new String[length+1][]; + it.ofeats = new String[length+1]; + it.pfeats = new String[length+1]; + + + it.forms[0] = ROOT; + it.plemmas[0] = ROOT_LEMMA; + it.fillp[0] = "N"; + it.lemmas[0] = ROOT_LEMMA; + + it.gpos[0] = ROOT_POS; + it.ppos[0] = ROOT_POS; + it.labels[0] = NO_TYPE; + it.heads[0] = -1; + it.plabels[0] = NO_TYPE; + it.pheads[0] = -1; + it.ofeats[0] = NO_TYPE; + + // root is 0 therefore start with 1 + + for(int i = 1; i <= length; i++) { + + String[] info = lineList.get(i-1); + + it.forms[i] = info[1]; //normalize( + + it.lemmas[i] = info[2]; + it.plemmas[i] =info[2]; + + // 3 cpos + + it.gpos[i] = info[3]; + it.ppos[i] = info[4]; + + it.ofeats[i]=info[5].equals(CONLLWriter09.DASH)? "": info[5]; + + + + if (info[5].equals(CONLLWriter09.DASH)) it.feats[i]=null; + else { + it.feats[i] =info[5].split(PIPE); + it.pfeats[i] = info[5]; + } + + if (info[6].equals(US)) it.heads[i]=-1; + else it.heads[i] = Integer.parseInt(info[6]);// head + + +// it.phead[i]=info[9].equals(US) ? it.phead[i]=-1: Integer.parseInt(info[9]);// head + + it.labels[i] = info[7]; +// it.pedge[i] = info[11]; + + + } + return it; + + } catch(Exception e) { + System.out.println("\n!!! Error in input file at line : "+lineNumber+" "+e.toString()); + e.printStackTrace(); + throw new Exception(); + // return null; + } + + } + + /** + * Read a instance an store it in a compressed format + * @param is + * @return + * @throws IOException + */ + final public SentenceData09 getNext(Instances is) throws Exception { + + SentenceData09 it = getNext(); + + if (is !=null) insert(is,it); + + return it; + + } + + + + + final public boolean insert(Instances is, SentenceData09 it) throws IOException { + + try { + + if(it == null) { + inputReader.close(); + return false; + } + + int i= is.createInstance09(it.length()); + + for(int p = 0; p < it.length(); p++) { + + is.setForm(i, p, normalize(it.forms[p])); + is.setGPos(i, p, it.gpos[p]); + + if (it.ppos[p]==null||it.ppos[p].equals(US)) { + is.setPPoss(i, p, it.gpos[p]); + } else is.setPPoss(i, p, it.ppos[p]); + + + if (it.plemmas[p]==null ||it.plemmas[p].equals(US)) { + is.setLemma(i, p, normalize(it.forms[p])); + } else is.setLemma(i, p, normalize(it.plemmas[p])); + + + is.setFeats(i,p,it.feats[p]); + + + is.setFeature(i,p,it.ofeats[p]); + + + is.setRel(i,p,it.labels[p]); + if (it.plabels!=null) is.setPRel(i,p,it.plabels[p]); + is.setHead(i,p,it.heads[p]); + if (it.pheads!=null) is.setPHead(i,p,it.pheads[p]); + + if (it.fillp!=null && it.fillp[p]!=null && it.fillp[p].startsWith("Y")) is.pfill[i].set(p); + else is.pfill[i].clear(p); + } + + if (is.createSem(i,it)) { + DB.println("count "+i+" len "+it.length()); + DB.println(it.printSem()); + } + } catch(Exception e ){ + DB.println("head "+it); + e.printStackTrace(); + } + return true; + + } + public static String normalize (String s) { + if (!normalizeOn) return s; + if(s.matches(NUMBER)) return NUM; + return s; + } + +} diff --git a/dependencyParser/basic/mate-tools/src/is2/io/CONLLReader08.java b/dependencyParser/basic/mate-tools/src/is2/io/CONLLReader08.java new file mode 100644 index 0000000..a6194a3 --- /dev/null +++ b/dependencyParser/basic/mate-tools/src/is2/io/CONLLReader08.java @@ -0,0 +1,413 @@ + + +package is2.io; + +import is2.data.Instances; +import is2.data.SentenceData09; +import is2.util.DB; + +import java.io.BufferedReader; +import java.io.FileInputStream; +import java.io.IOException; +import java.io.InputStreamReader; +import java.util.ArrayList; + + + +/** + * This class reads files in the CONLL-09 format. + * + * @author Bernd Bohnet + */ +public class CONLLReader08 extends IOGenerals { + + + private BufferedReader inputReader; + + public static final boolean NORMALIZE = true; + + public static final boolean NO_NORMALIZE = false; + + public boolean normalizeOn =true; + + + + private int format = 0; + + private int lineNumber = 0; + + + public CONLLReader08(boolean normalize){ + + normalizeOn=normalize; + } + + public CONLLReader08(String file){ + lineNumber=0; + try { + inputReader = new BufferedReader(new InputStreamReader(new FileInputStream(file),"UTF-8"),32768); + } catch (Exception e) { + e.printStackTrace(); + } + } + + public CONLLReader08(String file, boolean normalize){ + this(file); + normalizeOn=normalize; + } + + /** + * Sets the input format: + * + * CONLL09 is standard, + * ONE_LINE + * + * @param format the fomrat (see the constants starting with F_). + */ + public void setInputFormat(int format) { + this.format=format; + } + + + + /** + * + */ + public CONLLReader08() {} + + /** + * @param testfile + * @param formatTask + */ + public CONLLReader08(String testfile, int formatTask) { + this(testfile); + } + + public void startReading(String file ){ + lineNumber=0; + try { + inputReader = new BufferedReader(new InputStreamReader(new FileInputStream(file),"UTF-8"),32768); + } catch (Exception e) { + e.printStackTrace(); + } + } + + public SentenceData09 getNext() { + + if (F_ONE_LINE == format) return getNextOneLine(); + else return getNextCoNLL09(); + } + + /** + * @return + */ + private SentenceData09 getNextOneLine() { + + String line=null; + int i=0; + try { + + + line = inputReader.readLine(); + lineNumber++; + + if (line==null ) { + inputReader.close(); + return null; + } + + String[] tokens = line.split(" "); + int length = tokens.length; + if (line.isEmpty()) length=0; + + SentenceData09 it = new SentenceData09(); + + it.forms = new String[length+1]; + + it.plemmas = new String[length+1]; + // it.ppos = new String[length+1]; + it.gpos = new String[length+1]; + it.labels = new String[length+1]; + it.heads = new int[length+1]; + it.pheads = new int[length+1]; + it.plabels = new String[length+1]; + + it.ppos = new String[length+1]; + it.lemmas = new String[length+1]; + it.fillp = new String[length+1]; + it.feats = new String[length+1][]; + it.ofeats = new String[length+1]; + it.pfeats = new String[length+1]; + it.id = new String[length+1]; + + it.forms[0] = ROOT; + it.plemmas[0] = ROOT_LEMMA; + it.fillp[0] = "N"; + it.lemmas[0] = ROOT_LEMMA; + + it.gpos[0] = ROOT_POS; + it.ppos[0] = ROOT_POS; + it.labels[0] = NO_TYPE; + it.heads[0] = -1; + it.plabels[0] = NO_TYPE; + it.pheads[0] = -1; + it.ofeats[0] = NO_TYPE; + it.id[0] ="0"; + + // root is 0 therefore start with 1 + + for(i = 1; i <= length; i++) { + + it.id[i] = ""+i; + + it.forms[i] = this.normalizeOn?normalize(tokens[i-1]):tokens[i-1]; //normalize( + + + } + + return it; + + } catch(Exception e) { + System.out.println("\n!!! Error in input file sentence before line: "+lineNumber+" (in sentence line "+i+" ) "+e.toString()); + e.printStackTrace(); + System.exit(0); + + + + + //throw new Exception(); + return null; + } + + + + } + + /**i.forms[heads[l]-1]+" "+rel+" "+ + * Read a instance + * @return a instance + * @throws Exception + */ + + public SentenceData09 getNextCoNLL09() { + + String line=null; + int i=0; + try { + + ArrayList<String[]> lineList = new ArrayList<String[]>(); + + line = inputReader.readLine(); + lineNumber++; + + while(line !=null && line.length()==0) { + line = inputReader.readLine(); + lineNumber++; + System.out.println("skip empty line at line "+lineNumber); + } + + while (line != null && line.length()!=0 && !line.startsWith(STRING) &&!line.startsWith(REGEX)) { + lineList.add(line.split(REGEX)); + line = inputReader.readLine(); + lineNumber++; + } + + + + int length = lineList.size(); + + if(length == 0) { + inputReader.close(); + return null; + } + + SentenceData09 it = new SentenceData09(); + + it.forms = new String[length+1]; + + it.plemmas = new String[length+1]; + // it.ppos = new String[length+1]; + it.gpos = new String[length+1]; + it.labels = new String[length+1]; + it.heads = new int[length+1]; + it.pheads = new int[length+1]; + it.plabels = new String[length+1]; + + it.ppos = new String[length+1]; + it.lemmas = new String[length+1]; + it.fillp = new String[length+1]; + it.feats = new String[length+1][]; + it.ofeats = new String[length+1]; + it.pfeats = new String[length+1]; + it.id = new String[length+1]; + + it.forms[0] = ROOT; + it.plemmas[0] = ROOT_LEMMA; + it.fillp[0] = "N"; + it.lemmas[0] = ROOT_LEMMA; + + it.gpos[0] = ROOT_POS; + it.ppos[0] = ROOT_POS; + it.labels[0] = NO_TYPE; + it.heads[0] = -1; + it.plabels[0] = NO_TYPE; + it.pheads[0] = -1; + it.ofeats[0] = NO_TYPE; + it.id[0] ="0"; + + // root is 0 therefore start with 1 + + for(i = 1; i <= length; i++) { + + + + String[] info = lineList.get(i-1); + + it.id[i] = info[0]; + it.forms[i] = info[5]; //normalize( + if (info.length<3) continue; + + //it.lemmas[i] = info[2]; + it.plemmas[i] =info[6]; + it.gpos[i] = info[3]; + + if (info.length<5) continue; + it.ppos[i] = info[7];//.split("\\|")[0]; + + // feat 6 + // pfeat 7 + + // this causes trouble in the perl eval09 scirpt + //it.ofeats[i]=info[6].equals(CONLLWriter09.DASH)? "" : info[6]; + + // now we try underscore + it.ofeats[i]="_"; + + + // it.feats[i] ="_"; + it.pfeats[i] = "_"; + + + + + if (info[8].equals(US)) it.heads[i]=-1; + else it.heads[i] = Integer.parseInt(info[8]);// head + + it.pheads[i]=-1;// head + + it.labels[i] = info[9]; + it.plabels[i] = "_"; + + it.fillp[i]=info[10]; + + if (info.length>11) { + if (!info[10].equals(US)) it.addPredicate(i,info[10]); + for(int k=11;k<info.length;k++) it.addArgument(i,k-11,info[k]); + } + + + + + } + return it; + + } catch(Exception e) { + System.out.println("\n!!! Error in input file sentence before line: "+lineNumber+" (in sentence line "+i+" ) "+e.toString()); + e.printStackTrace(); + System.exit(0); + + + + + //throw new Exception(); + return null; + } + + } + + /** + * Read a instance an store it in a compressed format + * @param is + * @return + * @throws IOException + */ + final public SentenceData09 getNext(Instances is) { + + SentenceData09 it = getNext(); + + if (is !=null) insert(is,it); + + return it; + + } + + + + + final public boolean insert(Instances is, SentenceData09 it) { + + try { + + if(it == null) { + inputReader.close(); + return false; + } + + int i= is.createInstance09(it.length()); + + for(int p = 0; p < it.length(); p++) { + + is.setForm(i, p, normalize(it.forms[p])); + is.setGPos(i, p, it.gpos[p]); + + // System.out.println(""+is.gpos[i][p]); + + if (it.ppos[p]==null||it.ppos[p].equals(US)) { + + is.setPPoss(i, p, it.gpos[p]); + } else is.setPPoss(i, p, it.ppos[p]); + + + if (it.plemmas[p]==null ||it.plemmas[p].equals(US)) { + is.setLemma(i, p, normalize(it.forms[p])); + } else is.setLemma(i, p, normalize(it.plemmas[p])); + + if (it.lemmas!=null) + if (it.lemmas[p]==null ) { // ||it.org_lemmas[p].equals(US) that harms a lot the lemmatizer + is.setGLemma(i, p, it.plemmas[p]); + } else is.setGLemma(i, p, it.lemmas[p]); + + + if (it.feats!=null && it.feats[p]!=null) is.setFeats(i,p,it.feats[p]); + + if (it.ofeats!=null) is.setFeature(i,p,it.ofeats[p]); + + + is.setRel(i,p,it.labels[p]); + if (it.plabels!=null) is.setPRel(i,p,it.plabels[p]); + + is.setHead(i,p,it.heads[p]); + if (it.pheads!=null) is.setPHead(i,p,it.pheads[p]); + + if (it.fillp!=null && it.fillp[p]!=null && it.fillp[p].startsWith("Y")) is.pfill[i].set(p); + else is.pfill[i].clear(p); + } + + if (is.createSem(i,it)) { + DB.println("count "+i+" len "+it.length()); + DB.println(it.printSem()); + } + } catch(Exception e ){ + DB.println("head "+it); + e.printStackTrace(); + } + return true; + + } + public String normalize (String s) { + if (!normalizeOn) return s; + if(s.matches(NUMBER)) return NUM; + return s; + } + +} diff --git a/dependencyParser/basic/mate-tools/src/is2/io/CONLLReader09.java b/dependencyParser/basic/mate-tools/src/is2/io/CONLLReader09.java new file mode 100755 index 0000000..c020579 --- /dev/null +++ b/dependencyParser/basic/mate-tools/src/is2/io/CONLLReader09.java @@ -0,0 +1,411 @@ + + +package is2.io; + +import is2.data.Instances; +import is2.data.SentenceData09; +import is2.util.DB; + +import java.io.BufferedReader; +import java.io.FileInputStream; +import java.io.IOException; +import java.io.InputStreamReader; +import java.util.ArrayList; + + + +/** + * This class reads files in the CONLL-09 format. + * + * @author Bernd Bohnet + */ +public class CONLLReader09 extends IOGenerals { + + + private BufferedReader inputReader; + + public static final boolean NORMALIZE = true; + + public static final boolean NO_NORMALIZE = false; + + public boolean normalizeOn =true; + + static public String joint =""; + + private int format = 0; + + private int lineNumber = 0; + + + public CONLLReader09(boolean normalize){ + + normalizeOn=normalize; + } + + public CONLLReader09(String file){ + lineNumber=0; + try { + inputReader = new BufferedReader(new InputStreamReader(new FileInputStream(file),"UTF-8"),32768); + } catch (Exception e) { + e.printStackTrace(); + } + } + + public CONLLReader09(String file, boolean normalize){ + this(file); + normalizeOn=normalize; + } + + /** + * Sets the input format: + * + * CONLL09 is standard, + * ONE_LINE + * + * @param format the fomrat (see the constants starting with F_). + */ + public void setInputFormat(int format) { + this.format=format; + } + + + + /** + * + */ + public CONLLReader09() {} + + /** + * @param testfile + * @param formatTask + */ + public CONLLReader09(String testfile, int formatTask) { + this(testfile); + } + + public void startReading(String file ){ + lineNumber=0; + try { + inputReader = new BufferedReader(new InputStreamReader(new FileInputStream(file),"UTF-8"),32768); + } catch (Exception e) { + e.printStackTrace(); + } + } + + public SentenceData09 getNext() { + + if (F_ONE_LINE == format) return getNextOneLine(); + else return getNextCoNLL09(); + } + + /** + * @return + */ + private SentenceData09 getNextOneLine() { + + String line=null; + int i=0; + try { + + + line = inputReader.readLine(); + lineNumber++; + + if (line==null ) { + inputReader.close(); + return null; + } + + String[] tokens = line.split(" "); + int length = tokens.length; + if (line.isEmpty()) length=0; + + SentenceData09 it = new SentenceData09(); + + it.forms = new String[length+1]; + + it.plemmas = new String[length+1]; + // it.ppos = new String[length+1]; + it.gpos = new String[length+1]; + it.labels = new String[length+1]; + it.heads = new int[length+1]; + it.pheads = new int[length+1]; + it.plabels = new String[length+1]; + + it.ppos = new String[length+1]; + it.lemmas = new String[length+1]; + it.fillp = new String[length+1]; + it.feats = new String[length+1][]; + it.ofeats = new String[length+1]; + it.pfeats = new String[length+1]; + it.id = new String[length+1]; + + it.forms[0] = ROOT; + it.plemmas[0] = ROOT_LEMMA; + it.fillp[0] = "N"; + it.lemmas[0] = ROOT_LEMMA; + + it.gpos[0] = ROOT_POS; + it.ppos[0] = ROOT_POS; + it.labels[0] = NO_TYPE; + it.heads[0] = -1; + it.plabels[0] = NO_TYPE; + it.pheads[0] = -1; + it.ofeats[0] = NO_TYPE; + it.id[0] ="0"; + + // root is 0 therefore start with 1 + + for(i = 1; i <= length; i++) { + + it.id[i] = ""+i; + + it.forms[i] = this.normalizeOn?normalize(tokens[i-1]):tokens[i-1]; //normalize( + + + } + + return it; + + } catch(Exception e) { + System.out.println("\n!!! Error in input file sentence before line: "+lineNumber+" (in sentence line "+i+" ) "+e.toString()); + e.printStackTrace(); + + + + + + //throw new Exception(); + return null; + } + + + + } + + /**i.forms[heads[l]-1]+" "+rel+" "+ + * Read a instance + * @return a instance + * @throws Exception + */ + + public SentenceData09 getNextCoNLL09() { + + String line=null; + int i=0; + try { + + ArrayList<String[]> lineList = new ArrayList<String[]>(); + + line = inputReader.readLine(); + lineNumber++; + + while(line !=null && line.length()==0) { + line = inputReader.readLine(); + lineNumber++; + System.out.println("skip empty line at line "+lineNumber); + } + + while (line != null && line.length()!=0 && !line.startsWith(STRING) &&!line.startsWith(REGEX)) { + lineList.add(line.split(REGEX)); + line = inputReader.readLine(); + lineNumber++; + } + + + + int length = lineList.size(); + + if(length == 0) { + inputReader.close(); + return null; + } + + SentenceData09 it = new SentenceData09(); + + it.forms = new String[length+1]; + + it.plemmas = new String[length+1]; + // it.ppos = new String[length+1]; + it.gpos = new String[length+1]; + it.labels = new String[length+1]; + it.heads = new int[length+1]; + it.pheads = new int[length+1]; + it.plabels = new String[length+1]; + + it.ppos = new String[length+1]; + it.lemmas = new String[length+1]; + it.fillp = new String[length+1]; + it.feats = new String[length+1][]; + it.ofeats = new String[length+1]; + it.pfeats = new String[length+1]; + it.id = new String[length+1]; + + it.forms[0] = ROOT; + it.plemmas[0] = ROOT_LEMMA; + it.fillp[0] = "N"; + it.lemmas[0] = ROOT_LEMMA; + + it.gpos[0] = ROOT_POS; + it.ppos[0] = ROOT_POS; + it.labels[0] = NO_TYPE; + it.heads[0] = -1; + it.plabels[0] = NO_TYPE; + it.pheads[0] = -1; + it.ofeats[0] = NO_TYPE; + it.id[0] ="0"; + + // root is 0 therefore start with 1 + + for(i = 1; i <= length; i++) { + + + + String[] info = lineList.get(i-1); + + it.id[i] = info[0]; + it.forms[i] = info[1]; //normalize( + if (info.length<3) continue; + + it.lemmas[i] = info[2]; + it.plemmas[i] =info[3]; + it.gpos[i] = info[4]; + + if (info.length<5) continue; + it.ppos[i] = info[5];//.split("\\|")[0]; + // feat 6 + + // now we try underscore + it.ofeats[i]=info[6].equals(CONLLWriter09.DASH)? "_" : info[6]; + + if (info[7].equals(CONLLWriter09.DASH)) it.feats[i]=null; + else { + it.feats[i] =info[7].split(PIPE); + it.pfeats[i] = info[7]; + } + + + + if (info[8].equals(US))it.heads[i]=-1; + else it.heads[i] = Integer.parseInt(info[8]);// head + + it.pheads[i]=info[9].equals(US) ? it.pheads[i]=-1: Integer.parseInt(info[9]);// head + + it.labels[i] = info[10]; + it.plabels[i] = info[11]; + it.fillp[i]=info[12]; + + if (info.length>13) { + if (!info[13].equals(US)) it.addPredicate(i,info[13]); + for(int k=14;k<info.length;k++) it.addArgument(i,k-14,info[k]); + + } + + + + + } + return it; + + } catch(Exception e) { + System.out.println("\n!!! Error in input file sentence before line: "+lineNumber+" (in sentence line "+i+" ) "+e.toString()); + e.printStackTrace(); + System.exit(0); + + + + + //throw new Exception(); + return null; + } + + } + + /** + * Read a instance an store it in a compressed format + * @param is + * @return + * @throws IOException + */ + final public SentenceData09 getNext(Instances is) { + + SentenceData09 it = getNext(); + + if (is !=null) insert(is,it); + + return it; + + } + + + + + final public boolean insert(Instances is, SentenceData09 it) { + + try { + + if(it == null) { + inputReader.close(); + return false; + } + + int i= is.createInstance09(it.length()); + + for(int p = 0; p < it.length(); p++) { + + is.setForm(i, p, normalize(it.forms[p])); + // is.setFormOrg(i, p, it.forms[p]); + is.setGPos(i, p, it.gpos[p]); + + // System.out.println(""+is.gpos[i][p]); + + if (it.ppos[p]==null||it.ppos[p].equals(US)) { + + is.setPPoss(i, p, it.gpos[p]); + } else is.setPPoss(i, p, it.ppos[p]); + + + if (it.plemmas[p]==null ||it.plemmas[p].equals(US)) { + is.setLemma(i, p, normalize(it.forms[p])); + } else is.setLemma(i, p, normalize(it.plemmas[p])); + + if (it.lemmas!=null) + if (it.lemmas[p]==null ) { // ||it.org_lemmas[p].equals(US) that harms a lot the lemmatizer + is.setGLemma(i, p, it.plemmas[p]); + } else is.setGLemma(i, p, it.lemmas[p]); + + + if (it.feats!=null && it.feats[p]!=null) is.setFeats(i,p,it.feats[p]); + + if (it.ofeats!=null) is.setFeature(i,p,it.ofeats[p]); + if (it.pfeats!=null) is.setPFeature(i,p,it.pfeats[p]); + + + is.setRel(i,p,it.labels[p]); + if (it.plabels!=null) is.setPRel(i,p,it.plabels[p]); + + is.setHead(i,p,it.heads[p]); + if (it.pheads!=null) is.setPHead(i,p,it.pheads[p]); + + if (it.fillp!=null && it.fillp[p]!=null && it.fillp[p].startsWith("Y")) is.pfill[i].set(p); + else is.pfill[i].clear(p); + } + + if (is.createSem(i,it)) { + DB.println("count "+i+" len "+it.length()); + DB.println(it.printSem()); + } + } catch(Exception e ){ + DB.println("head "+it); + e.printStackTrace(); + } + return true; + + } + public String normalize (String s) { + if (!normalizeOn) return s; + if(s.matches(NUMBER)) return NUM; + return s; + } + +} diff --git a/dependencyParser/basic/mate-tools/src/is2/io/CONLLWriter06.java b/dependencyParser/basic/mate-tools/src/is2/io/CONLLWriter06.java new file mode 100755 index 0000000..26762bc --- /dev/null +++ b/dependencyParser/basic/mate-tools/src/is2/io/CONLLWriter06.java @@ -0,0 +1,193 @@ +package is2.io; + +import is2.data.SentenceData09; +import is2.util.DB; + +import java.io.BufferedReader; +import java.io.BufferedWriter; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStreamReader; +import java.io.OutputStreamWriter; +import java.util.StringTokenizer; + + +public class CONLLWriter06 { + + public static final String DASH = "_"; + + protected BufferedWriter writer; + + public CONLLWriter06 () { } + + + + public static void main(String args[]) throws IOException { + + + if (args.length==2) { + File f = new File(args[0]); + File f2 = new File(args[1]); + // BufferedReader bf = new BufferedReader(new FileInputStream(new File(args[0]),"UTF-8"),32768); + BufferedReader ir = new BufferedReader(new InputStreamReader(new FileInputStream(f),"ISO-8859"),32768); + BufferedWriter br = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(f2),"UTF-8"));; + boolean found =false; + boolean tab =false; + while(true) { + String l = ir.readLine(); + if (l==null) break; + String x =l.trim(); + if (x.endsWith("\t")) tab=true; + br.write(x); + br.newLine(); + if (!l.equals(x)) found =true; + + } + ir.close(); + br.flush(); + br.close(); + + if (found) DB.println("found diff. found tab? "+tab); + } else if (args.length==3) { + File f1 = new File(args[1]); + File f2 = new File(args[2]); + + BufferedReader ir1 = new BufferedReader(new InputStreamReader(new FileInputStream(f1),"ISO-8859"),32768); + BufferedReader ir2 = new BufferedReader(new InputStreamReader(new FileInputStream(f2),"UTF-8"),32768); + + int line =0, alltabs1=0,alltabs2=0; + while(true) { + String l1 = ir1.readLine(); + String l2 = ir2.readLine(); + + if (l1==null && l2!=null) DB.println("files do not end at the same line "); + if (l1!=null && l2==null) DB.println("files do not end at the same line "); + if (l1==null ) break; + StringTokenizer t1 = new StringTokenizer(l1,"\t"); + StringTokenizer t2 = new StringTokenizer(l2,"\t"); + int tabs1=0; + while(t1.hasMoreTokens()) { + + t1.nextElement(); + tabs1++; + alltabs1++; + } + + int tabs2=0; + while(t2.hasMoreTokens()) { + + t2.nextElement(); + tabs2++; + alltabs2++; + } + line ++; + if (tabs1!=tabs2) { + DB.println("number of tabs different in line "+line+" file1-tabs "+tabs1+" file2-tabs "+tabs2); + System.exit(0); + } + + + } + DB.println("checked lines "+line+" with tabs in file 1 "+alltabs1+" in file2 "+alltabs2); + + } else { + File f = new File(args[0]); + String[] dir =f.list(); + for(String fx :dir) { + BufferedReader ir = new BufferedReader(new InputStreamReader(new FileInputStream(args[0]+File.separatorChar+fx),"UTF-8"),32768); + System.out.println("check file "+fx); + while(true) { + String l = ir.readLine(); + if (l==null) break; + if (l.endsWith("\t")) { + DB.println("found tab in file "+fx); + break; + } + } + ir.close(); + } + } + + } + + +// public int version = CONLLReader09.TASK08; + + public CONLLWriter06 (String file) { + + try { + writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file),"UTF-8")); + } catch (Exception e) { + e.printStackTrace(); + } + } + + public CONLLWriter06(String outfile, int formatTask) { + this(outfile); + // version = formatTask; + } + + public void write(SentenceData09 inst) throws IOException { + + for (int i=0; i<inst.length(); i++) { + + + writer.write(Integer.toString(i+1)); writer.write('\t'); // id + writer.write(inst.forms[i]); writer.write('\t'); // form + + if (inst.lemmas!=null && inst.lemmas[i]!=null) { + writer.write(inst.lemmas[i]); + } + else writer.write(DASH); // lemma + writer.write('\t'); + +// writer.write(DASH); // cpos +// writer.write('\t'); + + + writer.write(inst.gpos[i]); // cpos has to be included + writer.write('\t'); + + writer.write(inst.gpos[i]); // gpos + writer.write('\t'); + + + if (inst.ofeats[i].isEmpty()||inst.ofeats[i].equals(" ")) writer.write(DASH); + else writer.write(inst.ofeats[i]); + writer.write('\t'); + + + //writer.write(DASH); writer.write('\t'); // pfeat + + writer.write(Integer.toString(inst.heads[i])); writer.write('\t'); // head + + if (inst.labels[i]!=null) writer.write(inst.labels[i]); // rel + else writer.write(DASH); + writer.write('\t'); + + writer.write(DASH); + writer.write('\t'); + + writer.write(DASH); + writer.write('\t'); + + + writer.newLine(); + } + writer.newLine(); + + } + + + + public void finishWriting () throws IOException { + writer.flush(); + writer.close(); + } + + + + +} diff --git a/dependencyParser/basic/mate-tools/src/is2/io/CONLLWriter09.java b/dependencyParser/basic/mate-tools/src/is2/io/CONLLWriter09.java new file mode 100755 index 0000000..e7a92a5 --- /dev/null +++ b/dependencyParser/basic/mate-tools/src/is2/io/CONLLWriter09.java @@ -0,0 +1,307 @@ +package is2.io; + +import is2.data.SentenceData09; +import is2.util.DB; + +import java.io.BufferedReader; +import java.io.BufferedWriter; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStreamReader; +import java.io.OutputStreamWriter; +import java.io.Writer; +import java.util.StringTokenizer; + + +public class CONLLWriter09 extends IOGenerals { + + + int format =0; + + public static final String DASH = "_"; + + public static final boolean NO_ROOT = true, ROOT = false; + + protected BufferedWriter writer; + + public CONLLWriter09 () { } + + public static void main(String args[]) throws IOException { + + + if (args.length==2) { + File f = new File(args[0]); + File f2 = new File(args[1]); + BufferedReader ir = new BufferedReader(new InputStreamReader(new FileInputStream(f),"UTF-8"),32768); + BufferedWriter br = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(f2),"UTF8"));; + boolean found =false; + boolean tab =false; + while(true) { + String l = ir.readLine(); + if (l==null) break; + String x =l.trim(); + if (x.endsWith("\t")) tab=true; + br.write(x); + br.newLine(); + if (!l.equals(x)) found =true; + + } + ir.close(); + br.flush(); + br.close(); + + if (found) DB.println("found diff. found tab? "+tab); + } else if (args.length==3) { + File f1 = new File(args[1]); + File f2 = new File(args[2]); + + BufferedReader ir1 = new BufferedReader(new InputStreamReader(new FileInputStream(f1),"UTF-8"),32768); + BufferedReader ir2 = new BufferedReader(new InputStreamReader(new FileInputStream(f2),"UTF-8"),32768); + + int line =0, alltabs1=0,alltabs2=0; + while(true) { + String l1 = ir1.readLine(); + String l2 = ir2.readLine(); + + if (l1==null && l2!=null) DB.println("files do not end at the same line "); + if (l1!=null && l2==null) DB.println("files do not end at the same line "); + if (l1==null ) break; + StringTokenizer t1 = new StringTokenizer(l1,"\t"); + StringTokenizer t2 = new StringTokenizer(l2,"\t"); + int tabs1=0; + while(t1.hasMoreTokens()) { + + t1.nextElement(); + tabs1++; + alltabs1++; + } + + int tabs2=0; + while(t2.hasMoreTokens()) { + + t2.nextElement(); + tabs2++; + alltabs2++; + } + line ++; + if (tabs1!=tabs2) { + DB.println("number of tabs different in line "+line+" file1-tabs "+tabs1+" file2-tabs "+tabs2); + System.exit(0); + } + + + } + DB.println("checked lines "+line+" with tabs in file 1 "+alltabs1+" in file2 "+alltabs2); + + } else { + File f = new File(args[0]); + String[] dir =f.list(); + for(String fx :dir) { + BufferedReader ir = new BufferedReader(new InputStreamReader(new FileInputStream(args[0]+File.separatorChar+fx),"UTF-8"),32768); + System.out.println("check file "+fx); + while(true) { + String l = ir.readLine(); + if (l==null) break; + if (l.endsWith("\t")) { + DB.println("found tab in file "+fx); + break; + } + } + ir.close(); + } + } + + } + + + public CONLLWriter09 (String file) { + + try { + writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file),"UTF8")); + } catch (Exception e) { + e.printStackTrace(); + } + } + + public CONLLWriter09 (Writer writer) { + this.writer = new BufferedWriter(writer); + } + + + + public CONLLWriter09(String outfile, int formatTask) { + this(outfile); + } + + public void write(SentenceData09 inst) throws IOException { + write(inst, NO_ROOT); + } + + /** + * + * @param inst + * @param root true: remove root node + * @throws IOException + */ + public void write(SentenceData09 inst, boolean root) throws IOException { + + int i, mod; + if(root&&(inst.forms[0].startsWith("<root")||(inst.lemmas[0]!=null&&inst.lemmas[0].startsWith("<root")))){ + i=1; mod=0; + } else { + i=0; mod=1; + } + //=()?1:0; + + if (format == this.F_ONE_LINE) { + boolean first =true; + for (; i<inst.length(); i++) { + if (first ){ + first=false; + } else writer.write(" "); + writer.write(inst.plemmas[i]); + } + writer.newLine(); + + return ; + } + + + for (; i<inst.length(); i++) { + + if (inst.id==null|| inst.id[i]==null) {writer.write(Integer.toString(i+mod)); writer.write('\t');} // id + else { writer.write(inst.id[i]); writer.write('\t');} + + writer.write(inst.forms[i]); writer.write('\t'); // form + + if (inst.lemmas!=null && inst.lemmas[i]!=null) { + writer.write(inst.lemmas[i]); + } + else writer.write(DASH); // lemma + writer.write('\t'); + + if (inst.plemmas!=null && inst.plemmas[i]!=null) writer.write(inst.plemmas[i]); + else writer.write(DASH); // plemma + writer.write('\t'); + + if (inst.gpos[i]!=null) writer.write(inst.gpos[i]); // gpos + else writer.write(DASH); + writer.write('\t'); + + if (inst.ppos!=null && inst.ppos[i]!=null) writer.write(inst.ppos[i]); + else writer.write(DASH); // ppos + writer.write('\t'); + + if (inst.ofeats!=null&& inst.ofeats[i]!=null) writer.write(inst.ofeats[i]); + else writer.write(DASH); + writer.write('\t'); + + //writer.write(DASH); writer.write('\t'); // feat + if (inst.pfeats!=null&&inst.pfeats[i]!=null) { + //System.out.println(""+inst.pfeats[i]); + writer.write(inst.pfeats[i]); + } + else writer.write(DASH); + writer.write('\t'); + + + writer.write(Integer.toString(inst.heads[i])); writer.write('\t'); // head + + if (inst.pheads!=null ) writer.write(Integer.toString(inst.pheads[i])); + else writer.write(DASH); + writer.write('\t'); // phead + + if (inst.labels[i]!=null) writer.write(inst.labels[i]); // rel + else writer.write(DASH); + writer.write('\t'); + + if (inst.plabels!=null &&inst.plabels[i]!=null) writer.write(inst.plabels[i]); // rel + else writer.write(DASH); + writer.write('\t'); + + if (inst.fillp!=null && inst.fillp[i]!=null) writer.write(inst.fillp[i]); // fill p + else { + writer.write(DASH); + } + + +// writer.write('\t'); + + + if (inst.sem==null) { + writer.write('\t'); + writer.write(DASH); + + } else { + + + + boolean foundPred =false; + // print the predicate + for (int p =0;p< inst.sem.length;p++) { + if (inst.semposition[p]==i) { + foundPred=true; + // System.out.println("write pred "+inst.sem[p] ); + writer.write('\t'); writer.write(inst.sem[p]); + + // if (inst.sem[p].startsWith(".")) DB.println("error "+inst.sem[p]); + } + } + + if (!foundPred ) { + writer.write('\t'); + writer.write(DASH); +// writer.write('\t'); +// writer.write(DASH); + } + + // print the arguments + for (int p =0;p< inst.sem.length;p++) { + + boolean found =false; + if (inst.arg!=null &&inst.arg.length>p&&inst.arg[p]!=null) + for(int a = 0; a<inst.arg[p].length;a++) { + + if (i==inst.argposition[p][a]) { + writer.write('\t'); writer.write(inst.arg[p][a]); + found = true; + break; + } + + } + if (!found) { + writer.write('\t'); + writer.write(DASH); + } + + + } + + + + + } + writer.newLine(); + } + writer.newLine(); + } + + public void finishWriting () throws IOException { + writer.flush(); + writer.close(); + } + + /** + * Sets the output format such as CoNLL or one line for the lemmata of the sentence (see F_xxxx constants). + * @param formatTask + */ + public void setOutputFormat(int formatTask) { + format =formatTask; + } + + + + +} diff --git a/dependencyParser/basic/mate-tools/src/is2/io/IOGenerals.java b/dependencyParser/basic/mate-tools/src/is2/io/IOGenerals.java new file mode 100644 index 0000000..456a17f --- /dev/null +++ b/dependencyParser/basic/mate-tools/src/is2/io/IOGenerals.java @@ -0,0 +1,33 @@ +/** + * + */ +package is2.io; + +/** + * @author Dr. Bernd Bohnet, 18.08.2011 + * + * + */ +public class IOGenerals { + + // some constants + public static final String US = "_"; + public static final String REGEX = "\t"; + public static final String STRING = "*"; + public static final String PIPE = "\\|"; + public static final String NO_TYPE = "<no-type>"; + public static final String ROOT_POS = "<root-POS>"; + public static final String ROOT_LEMMA = "<root-LEMMA>"; + public static final String ROOT = "<root>"; + public static final String EMPTY_FEAT = "<ef>"; + + + // the different readers + public static final int F_CONLL09 = 0; + public static final int F_ONE_LINE = 1; + + // normalization of the input + public static final String NUMBER = "[0-9]+|[0-9]+\\.[0-9]+|[0-9]+[0-9,]+"; + public static final String NUM = "<num>"; + +} diff --git a/dependencyParser/basic/mate-tools/src/is2/io/PSReader.java b/dependencyParser/basic/mate-tools/src/is2/io/PSReader.java new file mode 100644 index 0000000..3598b3d --- /dev/null +++ b/dependencyParser/basic/mate-tools/src/is2/io/PSReader.java @@ -0,0 +1,23 @@ +/** + * + */ +package is2.io; + +import is2.data.PSTree; + +/** + * @author Dr. Bernd Bohnet, 07.02.2011 + * + * + */ +public interface PSReader { + + public PSTree getNext(); + + /** + * @param ps + * @param filter + */ + public void startReading(String ps, String[] filter); + +} diff --git a/dependencyParser/basic/mate-tools/src/is2/io/TigerReader.java b/dependencyParser/basic/mate-tools/src/is2/io/TigerReader.java new file mode 100644 index 0000000..2a98b72 --- /dev/null +++ b/dependencyParser/basic/mate-tools/src/is2/io/TigerReader.java @@ -0,0 +1,403 @@ +/** + * + */ +package is2.io; + +import is2.data.PSTree; +import is2.util.DB; + +import java.io.BufferedReader; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.InputStreamReader; +import java.util.ArrayList; +import java.util.Stack; +import java.util.StringTokenizer; + +/** + * @author Dr. Bernd Bohnet, 17.01.2011 + * + * Reads a sentences in Penn Tree Bank bracket style and return sentences. + */ +public class TigerReader implements PSReader { + + BufferedReader inputReader; + ArrayList<File> psFiles = new ArrayList<File>(); + ArrayList<PSTree> psCache = new ArrayList<PSTree>(); + + String filter[] = null; + int startFilter =-1; + int endFilter =-1; + + public TigerReader() {} + + public TigerReader(String file ) { + + try { + inputReader = new BufferedReader(new InputStreamReader(new FileInputStream(file),"ISO-8859-1"),32768); + } catch (Exception e) { + e.printStackTrace(); + } + } + + /** + * @param ps + */ + @Override + public void startReading(String file, String[] filter) { + + + try { + this.filter =filter; + startFilter =filter==null?-1:1; + endFilter =filter==null?-1:1; + + inputReader = new BufferedReader(new InputStreamReader(new FileInputStream(file),"ISO-8859-1"),32768); + } catch (Exception e) { + e.printStackTrace(); + } + + } + + public static class Line { + String form; + String lemma; + String morph; + String pos; + int parent; + String edge; + + + } + + static int stop=0; + + /** + * @return + */ + public PSTree getNext() { + + PSTree ps = null; + String l =null; + ArrayList<Line> lines = new ArrayList<Line>(); + try { + int state=1, terminals=0, nonterminals=0; + while((l = inputReader.readLine())!=null) { + + if (startFilter==1 && l.startsWith("#BOS "+filter[0]) ) { + System.out.println("found start "+l); + startFilter=2; + } + if (endFilter==1 && l.startsWith("#EOS "+filter[1]) ){ + System.out.println("found end "+l); + + endFilter=2; + } + + + if (startFilter==1||endFilter==2) continue; + + if (l.startsWith("#BOS")) { + + state=2; + continue; + } + if (l.startsWith("#500")) state=3; + if (l.startsWith("#EOS")) state=4; + if (state<2) continue; + + if ( state==4) { + + ps = new PSTree(); + ps.create(terminals, nonterminals); + // System.out.println("terminals "+terminals); + //build ps tree + + int cnt=0; + // ps.entries[0] =CONLLReader09.ROOT; + // ps.head[0]=-1; + int root=-1; + for(Line line : lines) { + + /* if (cnt==terminals) { + // insert root + root =cnt; + cnt++; + } + */ + ps.entries[cnt] = line.form; + if (cnt<terminals) ps.pos[cnt] = line.pos; + else ps.entries[cnt] =line.pos; + ps.lemmas[cnt] = line.lemma; + ps.head[cnt] = line.parent==0?lines.size()-1:line.parent>=500?line.parent-500+terminals:line.parent; + // ps.head[cnt] = line.parent==0?lines.size()-1:line.parent>=500?line.parent-500+terminals:line.parent; + ps.morph[cnt]=line.morph; + cnt++; + + } + + if (root==-1) root= terminals; + ps.head[cnt-1]=0; // root + ps.terminalCount=terminals; + lines.clear(); + state=1; + + /* + for(int k=0;k<ps.head.length;k++) { + if (ps.head[k]<terminals && k!=root) { + ps.head[k]=root; + // DB.println("error "+k+" "+ps.head[k]); + } + } + */ + // System.out.println(""+ps.toString()); + // if (stop++ == 4)System.exit(0); + return ps; + } + + + + StringTokenizer t = new StringTokenizer(l,"\t"); + int tc=0; + Line line = new Line(); + lines.add(line); + while(t.hasMoreTokens()) { + String token = t.nextToken(); + if (token.equals("\t"))continue; + if (tc==0) { + if (token.startsWith("#5")||token.startsWith("#6") ) { + nonterminals++; + + } + else { + terminals++; + + //change it back to the wrong format since the conll stuff was derived from this. + // if (token.equals("durchblicken")) token="durchblikken"; + line.form = token; + } + + } else if (tc==1) { + line.lemma=token; + } else if (tc==2) { + line.pos=token; + } else if (tc==3) { + line.morph=token; + } else if (tc==4) { + line.edge=token; + } else if (tc==5) { + line.parent=Integer.parseInt(token); + } + + + if (token.length()>0)tc++; + } + + // read till #EOS + + + } + } catch(Exception e) { + e.printStackTrace(); + } + return ps; + + } + + /** + * @param tree + */ + private void removeTraces(ArrayList<Object> tree) { + + Stack<ArrayList<Object>> s = new Stack<ArrayList<Object>>(); + + s.push(tree); + ArrayList<Object> list =null; + while (!s.isEmpty()) { + + ArrayList<Object> last =list; + list = s.pop(); + for(int k=0;k<list.size();k++) { + Object o = list.get(k); + if(o instanceof String) { + String t = (String)o; + if ((t.endsWith("-1")||t.endsWith("-2")||t.endsWith("-3")||t.endsWith("-4")) && list.size()>(k+1)) { + t = t.substring(0, t.length()-2); + list.set(k, t); + } + + if (t.startsWith("-NONE-")) { + + // remove the bigger surrounding phrase, e.g. (NP (-NONE- *)) + if (last.size()==2 && last.get(0) instanceof String && last.contains(list)) { + ArrayList<Object> rest = remove(tree, last); + if (rest!=null && rest.size()==1){ + rest = remove(tree, rest); + } + } + // remove the phrase only, e.g. (NP (AP nice small) (-NONE- *)) + else { + // there might a phrase with two empty elements (VP (-NONE- *) (-NONE- ...)) +// System.out.println("last "+last+" list "+list ); + ArrayList<Object> rest = remove(tree, list); + removeTraces(rest); + if (rest.size()==1) { + rest = remove(tree, rest); + if (rest!=null && rest.size()==1){ + System.out.println("rest "+rest); + System.exit(0); + } + } + } + continue; + } + } + if (o instanceof ArrayList) { + s.push((ArrayList<Object>)o); + } + } + } + } + + + + + /** + * Remove from tree p + * @param tree phrase structure tree + * @param p elment to remove + */ + private ArrayList<Object> remove(ArrayList<Object> tree, Object p) { + Stack<ArrayList<Object>> s = new Stack<ArrayList<Object>>(); + + s.push(tree); + + while (!s.isEmpty()) { + + ArrayList<Object> list = s.pop(); + for(int k=0;k<list.size();k++) { + Object o = list.get(k); + if (o == p) { + list.remove(p); + return list ; + } + if (o instanceof ArrayList) { + s.push((ArrayList<Object>)o); + } + } + } + return null; + } + + /** + * Count the terminals + * @param current + * @return + */ + private int countTerminals(ArrayList<Object> current) { + + int count =0; + boolean found =false, all =true ; + for(Object o : current) { + if (o instanceof String) found =true; + else { + all =false; + if (o instanceof ArrayList) count +=countTerminals((ArrayList<Object>)o); + } + } + + if (found && all) { + // System.out.println(""+current); + count++; + } + + return count; + } + + /** + * Count the terminals + * @param current + * @return + */ + private int insert(PSTree ps, ArrayList<Object> current, Integer terminal, Integer xxx, int head) { + + boolean found =false, all =true; + String term =null; + String pos =null; + for(Object o : current) { + if (o instanceof String) { + if (found) term =(String)o; + if (!found) pos =(String)o; + found =true; + } else { + all =false; + // if (o instanceof ArrayList) count +=countTerminals((ArrayList<Object>)o); + } + } + + if (found && all) { + + if(term.equals("-LRB-")) term="("; + if(term.equals("-RRB-")) term=")"; + if(term.equals("-LCB-")) term="{"; + if(term.equals("-RCB-")) term="}"; + if(term.contains("1\\/2-year")) term=term.replace("\\/", "/"); + if(term.contains("1\\/2-foot-tall")) term=term.replace("\\/", "/"); + + + ps.entries[ps.terminalCount] =term; + ps.pos[ps.terminalCount]=pos; + ps.head[ps.terminalCount]=head; + // System.out.println("terminal "+term+" "+ps.terminal+" head "+head); + ps.terminalCount ++; + } else if (found && ! all) { + if(pos.startsWith("NP-SBJ")) pos="NP-SBJ"; + if(pos.startsWith("WHNP")) pos="WHNP"; + + ps.entries[ps.non] =pos; + ps.head[ps.non]=head; + // System.out.println("non terminal "+pos+" "+ps.non+" head "+ head); + int non =ps.non ++; + + for (Object o : current) { + if (o instanceof ArrayList) { + insert(ps,(ArrayList<Object>)o,terminal,ps.non, non); + } + } + } + if(!all && !found)for (Object o : current) { + if (o instanceof ArrayList) { + insert(ps,(ArrayList<Object>)o,terminal,0, ps.non-1); + } + } + return terminal; + } + + + /** + * Count the terminals + * @param current + * @return + */ + private int countNonTerminals(ArrayList<Object> current) { + + int count =0; + boolean found =false, all =true ; + for(Object o : current) { + if (o instanceof String) found =true; + else { + all =false; + if (o instanceof ArrayList) count +=countNonTerminals((ArrayList<Object>)o); + } + } + + if (found && !all) count++; + + return count; + } + + + + +} diff --git a/dependencyParser/basic/mate-tools/src/is2/lemmatizer/Evaluator.java b/dependencyParser/basic/mate-tools/src/is2/lemmatizer/Evaluator.java new file mode 100755 index 0000000..b333c62 --- /dev/null +++ b/dependencyParser/basic/mate-tools/src/is2/lemmatizer/Evaluator.java @@ -0,0 +1,105 @@ +package is2.lemmatizer; + +import is2.data.SentenceData09; +import is2.io.CONLLReader09; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.Comparator; +import java.util.Hashtable; +import java.util.Map.Entry; + + +public class Evaluator { + + public static void evaluate (String act_file, String pred_file, String format) throws Exception { + + CONLLReader09 goldReader = new CONLLReader09(act_file, CONLLReader09.NO_NORMALIZE); + CONLLReader09 predictedReader = new CONLLReader09(pred_file,CONLLReader09.NO_NORMALIZE); + // predictedReader.startReading(pred_file); + + + Hashtable<String,Integer> errors = new Hashtable<String,Integer>(); + + + int total = 0, corr = 0, corrL = 0, corrT=0; + int numsent = 0, corrsent = 0, corrsentL = 0; + SentenceData09 goldInstance = goldReader.getNext(); + SentenceData09 predInstance = predictedReader.getNext(); + + while(goldInstance != null) { + + int instanceLength = goldInstance.length(); + + if (instanceLength != predInstance.length()) + System.out.println("Lengths do not match on sentence "+numsent); + + + String gold[] = goldInstance.lemmas; + String pred[] = predInstance.plemmas; + + + boolean whole = true; + boolean wholeL = true; + + // NOTE: the first item is the root info added during nextInstance(), so we skip it. + + for (int i = 1; i < instanceLength; i++) { + if (gold[i].toLowerCase().equals(pred[i].toLowerCase())) corrT++; + + if (gold[i].equals(pred[i])) corrL++; + else { + + // System.out.println("error gold:"+goldPos[i]+" pred:"+predPos[i]+" "+goldInstance.forms[i]+" snt "+numsent+" i:"+i); + String key = "gold: '"+gold[i]+"' pred: '"+pred[i]+"'"; + Integer cnt = errors.get(key); + if (cnt==null) { + errors.put(key,1); + } else { + errors.put(key,cnt+1); + } + } + + } + total += instanceLength - 1; // Subtract one to not score fake root token + + if(whole) corrsent++; + if(wholeL) corrsentL++; + numsent++; + + goldInstance = goldReader.getNext(); + predInstance = predictedReader.getNext(); + } + ArrayList<Entry<String, Integer>> opsl = new ArrayList<Entry<String, Integer>>(); + for(Entry<String, Integer> e : errors.entrySet()) { + opsl.add(e); + } + + Collections.sort(opsl, new Comparator<Entry<String, Integer>>(){ + + @Override + public int compare(Entry<String, Integer> o1, + Entry<String, Integer> o2) { + + return o1.getValue()==o2.getValue()?0:o1.getValue()>o2.getValue()?1:-1; + } + + + }); + + for(Entry<String, Integer> e : opsl) { + // System.out.println(e.getKey()+" "+e.getValue()); + } + + System.out.println("Tokens: " + total+" Correct: " + corrT+" "+(float)corrT/total+" correct uppercase "+(float)corrL/total); + } + + public static void main (String[] args) throws Exception { + String format = "CONLL"; + if (args.length > 2) + format = args[2]; + + evaluate(args[0], args[1], format); + } + +} diff --git a/dependencyParser/basic/mate-tools/src/is2/lemmatizer/Lemmatizer.java b/dependencyParser/basic/mate-tools/src/is2/lemmatizer/Lemmatizer.java new file mode 100755 index 0000000..33756dd --- /dev/null +++ b/dependencyParser/basic/mate-tools/src/is2/lemmatizer/Lemmatizer.java @@ -0,0 +1,535 @@ +package is2.lemmatizer; + + +import is2.data.Cluster; +import is2.data.F2SF; +import is2.data.FV; +import is2.data.Instances; +import is2.data.InstancesTagger; +import is2.data.Long2Int; +import is2.data.ParametersFloat; +import is2.data.PipeGen; +import is2.data.SentenceData09; +import is2.io.CONLLReader09; +import is2.io.CONLLWriter09; +import is2.tools.IPipe; +import is2.tools.Tool; +import is2.tools.Train; +import is2.util.DB; +import is2.util.OptionsSuper; + +import java.io.BufferedInputStream; +import java.io.BufferedOutputStream; +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.FileOutputStream; +import java.io.IOException; +import java.util.ArrayList; +import java.util.Collections; +import java.util.Comparator; +import java.util.HashMap; +import java.util.Map.Entry; +import java.util.zip.ZipEntry; +import java.util.zip.ZipInputStream; +import java.util.zip.ZipOutputStream; + + + +public class Lemmatizer implements Tool, Train { + + public Pipe pipe; + public ParametersFloat params; + private Long2Int li; + + private boolean doUppercase=false; + + private long[] vs= new long[40]; + + + + /** + * Creates a lemmatizer due to the model stored in modelFileName + * @param modelFileName the path and file name to a lemmatizer model + */ + public Lemmatizer(String modelFileName) { + + // tell the lemmatizer the location of the model + try { + Options m_options = new Options(new String[] {"-model", modelFileName}); + li = new Long2Int(m_options.hsize); + + // initialize the lemmatizer + readModel(m_options); + + } catch (IOException e) { + e.printStackTrace(); + } + } + + + + + + public Lemmatizer(boolean doUppercase) {this.doUppercase=doUppercase; } + + + + public static void main (String[] args) throws FileNotFoundException, Exception + { + + Options options = new Options(args); + Lemmatizer lemmatizer = new Lemmatizer(options.upper); + + long start = System.currentTimeMillis(); + + + if (options.train) { + + + lemmatizer.li = new Long2Int(options.hsize); + lemmatizer.pipe = new Pipe (options,lemmatizer.li); + + InstancesTagger is = lemmatizer.pipe.createInstances(options.trainfile); + + DB.println("Features: " + lemmatizer.pipe.mf.size()+" Operations "+lemmatizer.pipe.mf.getFeatureCounter().get(Pipe.OPERATION)); + + ParametersFloat params = new ParametersFloat(lemmatizer.li.size()); + + lemmatizer.train(options,lemmatizer.pipe,params,is); + + lemmatizer.writeModel(options, lemmatizer.pipe, params); + } + + if (options.test) { + + lemmatizer.readModel(options); + + lemmatizer.out(options,lemmatizer.pipe, lemmatizer.params); + } + + System.out.println(); + + if (options.eval) { + System.out.println("\nEVALUATION PERFORMANCE:"); + Evaluator.evaluate(options.goldfile, options.outfile,options.format); + } + long end = System.currentTimeMillis(); + System.out.println("used time "+((float)((end-start)/100)/10)); + } + + /* (non-Javadoc) + * @see is2.tools.Train#writeModel(is2.util.OptionsSuper, is2.tools.IPipe, is2.data.ParametersFloat) + */ + @Override + public void writeModel(OptionsSuper options, IPipe pipe, + ParametersFloat params) { + try { + // store the model + ZipOutputStream zos = new ZipOutputStream(new BufferedOutputStream(new FileOutputStream(options.modelName))); + zos.putNextEntry(new ZipEntry("data")); + DataOutputStream dos = new DataOutputStream(new BufferedOutputStream(zos)); + + this.pipe.mf.writeData(dos); + + dos.flush(); + params.write(dos); + + pipe.write(dos); + + dos.writeBoolean(this.doUppercase); + + dos.flush(); + dos.close(); + } catch(Exception e) { + e.printStackTrace(); + } + } + + + public void readModel(OptionsSuper options) { + + try { + + // load the model + ZipInputStream zis = new ZipInputStream(new BufferedInputStream(new FileInputStream(options.modelName))); + zis.getNextEntry(); + DataInputStream dis = new DataInputStream(new BufferedInputStream(zis)); + + MFO mf = new MFO(); + mf.read(dis); + params = new ParametersFloat(0); + params.read(dis); + li =new Long2Int(params.size()); + pipe = new Pipe(options, li); + pipe.mf =mf; + + pipe.initFeatures(); + pipe.initValues(); + + pipe.readMap(dis); + + for(Entry<String,Integer> e : mf.getFeatureSet().get(Pipe.OPERATION).entrySet()) { + this.pipe.types[e.getValue()] = e.getKey(); + // System.out.println("set pos "+e.getKey()); + } + + + pipe.cl = new Cluster(dis); + + if (dis.available()>0) this.doUppercase = dis.readBoolean(); + + + dis.close(); + DB.println("Loading data finished. "); + + DB.println("number of params "+params.parameters.length); + DB.println("number of classes "+pipe.types.length); + + } catch (Exception e ) { + e.printStackTrace(); + } + + } + + + + /** + * Do the training + * @param instanceLengths + * @param options + * @param pipe + * @param params + * @param li + * @throws IOException + * @throws InterruptedException + * @throws ClassNotFoundException + */ + public void train(OptionsSuper options, IPipe p, ParametersFloat params, Instances ist) { + + InstancesTagger is = (InstancesTagger)ist; + + int i = 0,del=0; + FV g = new FV(), f = new FV(); + + int LC = this.pipe.types.length+1, UC = LC+1; + + String wds[] = MFO.reverse(pipe.mf.getFeatureSet().get(Pipe.WORD)); + + F2SF fs = params.getFV(); + double upd=0; + + for(i = 0; i < options.numIters; i++) { + + System.out.print("Iteration "+i+": "); + + long start = System.currentTimeMillis(); + int numInstances = is.size(); + int correct =0,count=0; + + long last= System.currentTimeMillis(); + int wrongOp=0,correctOp=0, correctUC=0, wrongUC=0; + + HashMap<String,Integer> map = new HashMap<String,Integer>(); + + for(int n = 0; n < numInstances; n++) { + + if((n+1) % 500 == 0) del= Pipe.outValueErr(n+1, (float)(count-correct),(float)correct/(float)count,del,last,upd); + + upd = (double)(options.numIters*numInstances - (numInstances*i+(n+1))+ 1); + + for(int k = 0; k < is.length(n); k++) { + + double best = -1000; + String bestOp=""; + + + + count++; + pipe.addCoreFeatures(is, n, k, 0,wds[is.forms[n][k]], vs); + + String lemma = pipe.opse.get(wds[is.forms[n][k]].toLowerCase()); + + + // predict + if (lemma==null) + for(int t = 0; t < pipe.types.length; t++) { + + fs.clear(); + for(int l=vs.length-1;l>=0;l--) if (vs[l]>0) fs.add(li.l2i(vs[l]+(t*Pipe.s_type))); + + float score = (float) fs.getScore(); + if (score >best) { + bestOp = pipe.types[t]; + best =score; + } + } + + if (doUppercase) { + fs.clear(); + for(int l=vs.length-1;l>=0;l--) if (vs[l]>0) fs.add(li.l2i(vs[l]+(LC*Pipe.s_type))); + + int correctOP =-1, selectedOP =-1; + if (wds[is.glemmas[n][k]].length()>0 && + Character.isUpperCase(wds[is.glemmas[n][k]].charAt(0)) && + fs.score > 0) { + + correctOP = UC; + selectedOP =LC; + } else if (wds[is.glemmas[n][k]].length()>0 + &&Character.isLowerCase(wds[is.glemmas[n][k]].charAt(0)) && + fs.score <= 0) { + + + correctOP = LC; + selectedOP =UC; + } + + if (correctOP!=-1 && wds[is.glemmas[n][k]].length()>0) { + + wrongUC++; + f.clear(); + for(int l=vs.length-1;l>=0;l--) if (vs[l]>0) f.add(li.l2i(vs[l]+(selectedOP*Pipe.s_type))); + + g.clear(); + for(int l=vs.length-1;l>=0;l--) if (vs[l]>0) g.add(li.l2i(vs[l]+(correctOP*Pipe.s_type))); + + double lam_dist = params.getScore(g) - params.getScore(f);//f + double loss = 1 - lam_dist; + + FV dist = g.getDistVector(f); + dist.update(params.parameters, params.total, params.update(dist,loss), upd,false); + + } else { + correctUC++; + } + } + if (lemma!=null) { + correct++; + correctOp++; + continue; + } + + + String op = Pipe.getOperation(is,n, k,wds); + if (op.equals(bestOp) ) { + correct++; + correctOp++; + continue; + } + wrongOp++; + + f.clear(); + int bop =pipe.mf.getValue(Pipe.OPERATION, bestOp); + for(int r=vs.length-1;r>=0;r--) if (vs[r]>0)f.add(li.l2i(vs[r]+(bop*Pipe.s_type))); + + g.clear(); + int gop =pipe.mf.getValue(Pipe.OPERATION, op); + for(int r=vs.length-1;r>=0;r--) if (vs[r]>0)g.add(li.l2i(vs[r]+(gop*Pipe.s_type))); + double lam_dist = params.getScore(g) - params.getScore(f);//f + + double loss = 1 - lam_dist; + + FV dist = g.getDistVector(f); + + dist.update(params.parameters, params.total, params.update(dist,loss), upd,false); //0.05 + + } + + } + ArrayList<Entry<String, Integer>> opsl = new ArrayList<Entry<String, Integer>>(); + for(Entry<String, Integer> e : map.entrySet()) { + if(e.getValue()>1) { + opsl.add(e); + } + } + + Collections.sort(opsl, new Comparator<Entry<String, Integer>>(){ + @Override + public int compare(Entry<String, Integer> o1, + Entry<String, Integer> o2) { + + return o1.getValue()==o2.getValue()?0:o1.getValue()>o2.getValue()?1:-1; + } + }); + + if (opsl.size()>0) System.out.println(); + for(Entry<String, Integer> e : opsl) { + System.out.println(e.getKey()+" "+e.getValue()); + } + map.clear(); + + del= Pipe.outValueErr(numInstances, (float)(count-correct), (float)correct/(float)count,del,last,upd, + "time "+(System.currentTimeMillis()-start)+ + " corr/wrong "+correctOp+" "+wrongOp+" uppercase corr/wrong "+correctUC+" "+wrongUC); + del=0; + System.out.println(); + } + + params.average(i*is.size()); + + } + + + /** + * Do the work + * @param options + * @param pipe + * @param params + * @throws IOException + */ + public void out (OptionsSuper options, IPipe pipe, ParametersFloat params) { + + long start = System.currentTimeMillis(); + + CONLLReader09 depReader = new CONLLReader09(options.testfile, CONLLReader09.NO_NORMALIZE); + depReader.setInputFormat(options.formatTask); + CONLLWriter09 depWriter = new CONLLWriter09(options.outfile); + depWriter.setOutputFormat(options.formatTask); + + System.out.print("Processing Sentence: "); + + int cnt = 0; + int del=0; + + try { + + while(true) { + + InstancesTagger is = new InstancesTagger(); + + is.init(1, new MFO()); + SentenceData09 instance = depReader.getNext(is);//pipe.nextInstance(null, depReader); + + if (instance==null) break; + is.fillChars(instance, 0, Pipe._CEND); + cnt++; + SentenceData09 i09 =lemmatize(is, instance, this.li); + + if(options.normalize) for(int k=0;k<i09.length();k++) { + boolean save = depReader.normalizeOn; + depReader.normalizeOn =true; + i09.plemmas[k] = depReader.normalize(i09.plemmas[k]); + depReader.normalizeOn = save; + } + + if (options.overwritegold) i09.lemmas = i09.plemmas; + + + + depWriter.write(i09); + + if (cnt%100 ==0) del=Pipe.outValue(cnt, del); + + } + depWriter.finishWriting(); + del=Pipe.outValue(cnt, del); + long end = System.currentTimeMillis(); + + System.out.println(PipeGen.getSecondsPerInstnace(cnt,(end-start))); + System.out.println(PipeGen.getUsedTime(end-start)); + } catch(Exception e) { + e.printStackTrace(); + } + } + + + private SentenceData09 lemmatize(InstancesTagger is, SentenceData09 instance, Long2Int li) { + + int LC = pipe.types.length+1; + + is.feats[0] = new short[instance.length()][11]; + + is.fillChars(instance, 0, Pipe._CEND); + + int length = instance.length(); + + F2SF fs = new F2SF(params.parameters); + + + for(int w1 = 0; w1 < length; w1++) { + instance.plemmas[w1]="_"; + pipe.addCoreFeatures(is, 0, w1, 0,instance.forms[w1], vs); + + String f =null; + if (is.forms[0][w1]!=-1) { + f = pipe.opse.get(instance.forms[w1].toLowerCase()); + if (f!=null) { + instance.plemmas[w1]=f; + } + } + double best = -1000.0; + int bestOp=0; + + for(int t = 0; t < pipe.types.length; t++) { + + fs.clear(); + for(int l=vs.length-1;l>=0;l--) if (vs[l]>0) fs.add(li.l2i(vs[l]+(t*Pipe.s_type))); + + if (fs.score >=best) { + best =fs.score; + bestOp=t; + } + } + //instance.ppos[w1]=""+bestOp; + if (f==null) instance.plemmas[w1] = StringEdit.change((doUppercase?instance.forms[w1]:instance.forms[w1].toLowerCase()),pipe.types[bestOp]); + + // check for empty string + if(instance.plemmas[w1].length()==0) instance.plemmas[w1] = "_"; + + if(doUppercase){ + fs.clear(); + for(int l=vs.length-1;l>=0;l--) if (vs[l]>0) fs.add(li.l2i(vs[l]+(LC*Pipe.s_type))); + + + try { + + if (fs.score<=0 && instance.plemmas[w1].length()>1) { + instance.plemmas[w1] = Character.toUpperCase(instance.plemmas[w1].charAt(0))+instance.plemmas[w1].substring(1); + } else if (fs.score<=0 && instance.plemmas[w1].length()>0) { + instance.plemmas[w1] = String.valueOf(Character.toUpperCase(instance.plemmas[w1].charAt(0))); + } else if (fs.score>0) { + instance.plemmas[w1] = instance.plemmas[w1].toLowerCase(); + } + + } catch(Exception e){ + e.printStackTrace(); + // System.out.println("error "+pipe.types[bestOp]+" "+instance.forms[w1]); + } + } + } + + + SentenceData09 i09 = new SentenceData09(instance); + i09.createSemantic(instance); + return i09; + } + + + /* (non-Javadoc) + * @see is2.tools.Tool#apply(is2.data.SentenceData09) + */ + @Override + public SentenceData09 apply(SentenceData09 snt) { + InstancesTagger is = new InstancesTagger(); + + // be robust + if (snt.length()== 0) return snt; + + SentenceData09 it = new SentenceData09(); + it.createWithRoot(snt); + + + is.init(1, new MFO()); + is.createInstance09(it.length()); + is.fillChars(it, 0, Pipe._CEND); + + for(int j = 0; j < it.length(); j++) is.setForm(0, j, it.forms[j]); + + return lemmatize(is, it,li); + } + + + +} diff --git a/dependencyParser/basic/mate-tools/src/is2/lemmatizer/MFO.java b/dependencyParser/basic/mate-tools/src/is2/lemmatizer/MFO.java new file mode 100755 index 0000000..249ca42 --- /dev/null +++ b/dependencyParser/basic/mate-tools/src/is2/lemmatizer/MFO.java @@ -0,0 +1,257 @@ +package is2.lemmatizer; + + +import is2.data.IEncoder; +import is2.data.IEncoderPlus; +import is2.data.IFV; +import is2.data.Long2IntInterface; +import is2.util.DB; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; +import java.util.HashMap; +import java.util.Map.Entry; + +/** + * Map Features, do not map long to integer + * + * @author Bernd Bohnet, 20.09.2009 + */ + +final public class MFO implements IEncoderPlus { + + /** The features and its values */ + static private final HashMap<String,HashMap<String,Integer>> m_featureSets = new HashMap<String,HashMap<String,Integer>>(); + + /** The feature class and the number of values */ + static private final HashMap<String,Integer> m_featureCounters = new HashMap<String,Integer>(); + + /** The number of bits needed to encode a feature */ + static final HashMap<String,Integer> m_featureBits = new HashMap<String,Integer>(); + + /** Integer counter for long2int */ + static private int count=0; + + /** Stop growing */ + public boolean stop=false; + + final public static String NONE="<None>"; + + + + + + + + public MFO () {} + + + public int size() {return count;} + + + + /** + * Register an attribute class, if it not exists and add a possible value + * @param type + * @param type2 + */ + final public int register(String a, String v) { + + HashMap<String,Integer> fs = getFeatureSet().get(a); + if (fs==null) { + fs = new HashMap<String,Integer>(); + getFeatureSet().put(a, fs); + fs.put(NONE, 0); + getFeatureCounter().put(a, 1); + } + Integer c = getFeatureCounter().get(a); + + Integer i = fs.get(v); + if (i==null) { + fs.put(v, c); + c++; + getFeatureCounter().put(a,c); + return c-1; + } else return i; + } + + /** + * Calculates the number of bits needed to encode a feature + */ + public void calculateBits() { + + int total=0; + for(Entry<String,Integer> e : getFeatureCounter().entrySet() ){ + int bits =(int)Math.ceil((Math.log(e.getValue()+1)/Math.log(2))); + m_featureBits.put(e.getKey(), bits); + total+=bits; + // System.out.println(" "+e.getKey()+" bits "+bits+" number "+(e.getValue()+1)); + } + +// System.out.println("total number of needed bits "+total); + } + + + + public String toString() { + + StringBuffer content = new StringBuffer(); + for(Entry<String,Integer> e : getFeatureCounter().entrySet() ){ + content.append(e.getKey()+" "+e.getValue()); + content.append(':'); + // HashMap<String,Integer> vs = getFeatureSet().get(e.getKey()); + content.append(getFeatureBits(e.getKey())); + + /*if (vs.size()<120) + for(Entry<String,Integer> e2 : vs.entrySet()) { + content.append(e2.getKey()+" ("+e2.getValue()+") "); + }*/ + content.append('\n'); + + } + return content.toString(); + } + + + + static final public short getFeatureBits(String a) { + if(m_featureBits.get(a)==null) return 0; + return (short)m_featureBits.get(a).intValue(); + } + + + + /** + * Get the integer place holder of the string value v of the type a + * + * @param t the type + * @param v the value + * @return the integer place holder of v + */ + final public int getValue(String t, String v) { + + if (m_featureSets.get(t)==null) return -1; + Integer vi = m_featureSets.get(t).get(v); + if (vi==null) return -1; //stop && + return vi.intValue(); + } + + /** + * Static version of getValue + * @see getValue + */ + static final public int getValueS(String a, String v) { + + if (m_featureSets.get(a)==null) return -1; + Integer vi = m_featureSets.get(a).get(v); + if (vi==null) return -1; //stop && + return vi.intValue(); + } + + public int hasValue(String a, String v) { + + Integer vi = m_featureSets.get(a).get(v); + if (vi==null) return -1; + return vi.intValue(); + } + + + public static String printBits(int k) { + StringBuffer s = new StringBuffer(); + for(int i =0;i<31;i++) { + s.append((k&0x00000001)==1?'1':'0'); + k=k>>1; + + } + s.reverse(); + return s.toString(); + } + + + + + + + + /** + * Maps a long to a integer value. This is very useful to save memory for sparse data long values + * @param l + * @return the integer + */ + static public int misses = 0; + static public int good = 0; + + + + + /** + * Write the data + * @param dos + * @throws IOException + */ + static public void writeData(DataOutputStream dos) throws IOException { + dos.writeInt(getFeatureSet().size()); + // DB.println("write"+getFeatureSet().size()); + for(Entry<String, HashMap<String,Integer>> e : getFeatureSet().entrySet()) { + dos.writeUTF(e.getKey()); + dos.writeInt(e.getValue().size()); + + for(Entry<String,Integer> e2 : e.getValue().entrySet()) { + + if(e2.getKey()==null) DB.println("key "+e2.getKey()+" value "+e2.getValue()+" e -key "+e.getKey()); + dos.writeUTF(e2.getKey()); + dos.writeInt(e2.getValue()); + + } + + } + } + public void read(DataInputStream din) throws IOException { + + int size = din.readInt(); + for(int i=0; i<size;i++) { + String k = din.readUTF(); + int size2 = din.readInt(); + + HashMap<String,Integer> h = new HashMap<String,Integer>(); + getFeatureSet().put(k,h); + for(int j = 0;j<size2;j++) { + h.put(din.readUTF(), din.readInt()); + } + getFeatureCounter().put(k, size2); + } + + count =size; + // stop(); + calculateBits(); + } + + + /** + * Clear the data + */ + static public void clearData() { + getFeatureSet().clear(); + m_featureBits.clear(); + getFeatureSet().clear(); + } + + public HashMap<String,Integer> getFeatureCounter() { + return m_featureCounters; + } + + static public HashMap<String,HashMap<String,Integer>> getFeatureSet() { + return m_featureSets; + } + + static public String[] reverse(HashMap<String,Integer> v){ + String[] set = new String[v.size()]; + for(Entry<String,Integer> e : v.entrySet()) { + set[e.getValue()]=e.getKey(); + } + return set; + } + + +} diff --git a/dependencyParser/basic/mate-tools/src/is2/lemmatizer/Options.java b/dependencyParser/basic/mate-tools/src/is2/lemmatizer/Options.java new file mode 100755 index 0000000..a4b9e69 --- /dev/null +++ b/dependencyParser/basic/mate-tools/src/is2/lemmatizer/Options.java @@ -0,0 +1,67 @@ +package is2.lemmatizer; + +import java.io.File; +import java.io.IOException; + +import is2.util.OptionsSuper; + + +public final class Options extends OptionsSuper { + + + public Options (String[] args) throws IOException { + + + + for(int i = 0; i < args.length; i++) { + + if (args[i].equals("--help")) explain(); + + if (args[i].equals("-normalize")) { + normalize=Boolean.parseBoolean(args[++i]); + } else if (args[i].equals("-features")) { + features= args[i+1]; i++; + } else if (args[i].equals("-hsize")) { + hsize= Integer.parseInt(args[i+1]); i++; + } else if (args[i].equals("-len")) { + maxLen= Integer.parseInt(args[i+1]); i++; + } else if (args[i].equals("-tmp")) { + tmp = args[i+1]; i++; + } else if (args[i].equals("-uc")) { + upper=true; + System.out.println("set uppercase "+upper); + + } else super.addOption(args, i); + + } + + if (trainfile!=null) { + + + if (tmp!=null) trainforest = File.createTempFile("train", ".tmp", new File(tmp)); + else trainforest = File.createTempFile("train", ".tmp"); //,new File("F:\\") + trainforest.deleteOnExit(); + } + + + + + } + + private void explain() { + System.out.println("Usage: "); + System.out.println("java -class mate.jar is2.lemmatizer.Lemmatizer [Options]"); + System.out.println(); + System.out.println("Options:"); + System.out.println(""); + System.out.println(" -train <file> the corpus a model is trained on; default "+this.trainfile); + System.out.println(" -test <file> the input corpus for testing; default "+this.testfile); + System.out.println(" -out <file> the output corpus (result) of a test run; default "+this.outfile); + System.out.println(" -model <file> the parsing model for traing the model is stored in the files"); + System.out.println(" and for parsing the model is load from this file; default "+this.modelName); + System.out.println(" -i <number> the number of training iterations; good numbers are 10 for smaller corpora and 6 for bigger; default "+this.numIters); + System.out.println(" -count <number> the n first sentences of the corpus are take for the training default "+this.count); + + System.exit(0); + } +} diff --git a/dependencyParser/basic/mate-tools/src/is2/lemmatizer/Pipe.java b/dependencyParser/basic/mate-tools/src/is2/lemmatizer/Pipe.java new file mode 100755 index 0000000..37647ee --- /dev/null +++ b/dependencyParser/basic/mate-tools/src/is2/lemmatizer/Pipe.java @@ -0,0 +1,585 @@ +package is2.lemmatizer; + +import is2.data.Cluster; +import is2.data.D4; +import is2.data.Instances; +import is2.data.InstancesTagger; +import is2.data.PipeGen; +import is2.data.SentenceData09; +import is2.io.CONLLReader09; +import is2.tools.IPipe; +import is2.util.DB; +import is2.util.OptionsSuper; +import is2.data.Long2Int; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +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.Map.Entry; + + + + +final public class Pipe extends PipeGen implements IPipe { + + + private static final int _MIN_WORDS_MAPPED_BY_SCRIPT = 1; + private static final int _MIN_OCCURENT_FOR_SCRIPT_USE = 4; + + private static final String _F0 = "F0"; + private static final String _F1 = "F1",_F2 = "F2",_F3 = "F3",_F4 = "F4",_F5 = "F5",_F6= "F6",_F7= "F7",_F8= "F8",_F9="F9",_F10 = "F10"; + private static final String _F11="F11",_F12="F12",_F13= "F13",_F14="F14",_F15="F15",_F16="F16",_F17="F17",_F18="F18",_F19="F19",_F20="F20"; + private static final String _F21="F21",_F22="F22",_F23= "F23",_F24="F24",_F25="F25",_F26="F26",_F27="F27",_F28="F28",_F29="F29",_F30="F30"; + private static final String _F31="F31",_F32="F32",_F33= "F33",_F34="F34",_F35="F35",_F36="F36",_F37="F37",_F38="F38",_F39="F39",_F40="F40"; + private static final String _F41="F41"; + + private static int _f0,_f1,_f2,_f3,_f4,_f5,_f6,_f7,_f8,_f9,_f10,_f11,_f12,_f13,_f14,_f15,_f16,_f17,_f18,_f19,_f20; + private static int _f21,_f22,_f23,_f24,_f25,_f26,_f27,_f28,_f29,_f30,_f31,_f32,_f33,_f34,_f35,_f36,_f37,_f38,_f39,_f41; + public static int _CEND,_swrd,_ewrd; + + public static final String MID = "MID", END = "END",STR = "STR",OPERATION = "OP"; + + private CONLLReader09 depReader; + + + public HashMap<String,String> opse = new HashMap<String, String> (); + + public String[] types; + + + public MFO mf =new MFO(); + private D4 z, x; + + + Cluster cl; + OptionsSuper options; + Long2Int li; + + public Pipe (OptionsSuper options2, Long2Int l) { + + options=options2; + li=l; + } + + + public InstancesTagger createInstances(String file) { + + InstancesTagger is = new InstancesTagger(); + + depReader = new CONLLReader09(CONLLReader09.NO_NORMALIZE); + + depReader.startReading(file); + mf.register(REL,"<root-type>"); + mf.register(POS,"<root-POS>"); + + + System.out.print("Registering feature parts "); + HashMap<String,Integer> ops = new HashMap<String, Integer> (); + HashMap<String,HashSet<String>> op2form = new HashMap<String, HashSet<String>> (); + int ic=0; + int del=0; + HashSet<String> rm = new HashSet<String> (); + + while(true) { + SentenceData09 instance1 = depReader.getNext(); + if (instance1== null) break; + ic++; + if (ic % 100 ==0) {del = outValue(ic, del);} + + + String[] labs1 = instance1.labels; + for(int i1 = 0; i1 < labs1.length; i1++) { + //typeAlphabet.lookupIndex(labs1[i1]); + mf.register(REL, labs1[i1]); + } + + String[] w = instance1.forms; + for(int i1 = 0; i1 < w.length; i1++) { + // saw the first time? + if (mf.getValue(WORD, w[i1].toLowerCase())==-1) + opse.put(instance1.forms[i1].toLowerCase(), instance1.lemmas[i1]); + + mf.register(WORD, w[i1].toLowerCase()); + } + for(int i1 = 0; i1 < w.length; i1++) mf.register(WORD, w[i1]); + + w = instance1.lemmas; + for(int i1 = 0; i1 < w.length; i1++) mf.register(WORD, w[i1]); + for(int i1 = 0; i1 < w.length; i1++) mf.register(WORD, w[i1].toLowerCase()); + + w = instance1.plemmas; + for(int i1 = 0; i1 < w.length; i1++) mf.register(WORD, w[i1]); + for(int i1 = 0; i1 < w.length; i1++) mf.register(WORD, w[i1].toLowerCase()); + + + for(int i1 = 0; i1 < w.length; i1++) registerChars(CHAR, w[i1]); + + w = instance1.ppos; + for(int i1 = 0; i1 < w.length; i1++) mf.register(POS, w[i1]); + + w = instance1.gpos; + for(int i1 = 0; i1 < w.length; i1++) mf.register(POS, w[i1]); + + + for(int i1 = 1; i1 < w.length; i1++) { + String op = getOperation(instance1, i1); + if (ops.get(op)==null) ops.put(op, 1); + else { + ops.put(op, (ops.get(op)+1)); + if (ops.get(op)>4) rm.add(instance1.forms[i1].toLowerCase()); + } + + + HashSet<String> forms = op2form.get(op); + if (forms==null) { + forms = new HashSet<String>(); + op2form.put(op, forms); + } + forms.add(instance1.forms[i1].toLowerCase()); + + } + + } + + int countFreqSingleMappings =0; + + int sc=0; + ArrayList<Entry<String, Integer>> opsl = new ArrayList<Entry<String, Integer>>(); + for(Entry<String, Integer> e : ops.entrySet()) { + + // do not use scripts for infrequent cases or frequent single mappings (der -> die) + if(e.getValue()>_MIN_OCCURENT_FOR_SCRIPT_USE && op2form.get(e.getKey()).size()>_MIN_WORDS_MAPPED_BY_SCRIPT) { + mf.register(OPERATION, e.getKey()); + sc++; + opsl.add(e); + } else { + // do not remove the infrequent cases + rm.removeAll(op2form.get(e.getKey())); + + if (op2form.get(e.getKey()).size()<=1) countFreqSingleMappings+=op2form.get(e.getKey()).size(); + } + } + for(String k : rm) { + opse.remove(k); + } + + Collections.sort(opsl, new Comparator<Entry<String, Integer>>(){ + + @Override + public int compare(Entry<String, Integer> o1, Entry<String, Integer> o2) { + + return o1.getValue()==o2.getValue()?0:o1.getValue()>o2.getValue()?1:-1; + } + }); + + + + for(Entry<String, Integer> e : opsl) { + // System.out.println(e.getKey()+" "+e.getValue()); + } + + + if (options.clusterFile==null)cl = new Cluster(); + else cl= new Cluster(options.clusterFile, mf,6); + + + System.out.println("\nfound scripts "+ops.size()+" used scripts "+sc); + System.out.println("found mappings of single words "+countFreqSingleMappings); + System.out.println("use word maps instead of scripts "+this.opse.size()); + // System.out.println(" "+opse); + System.out.println(""+mf.toString()); + + initFeatures(); + + mf.calculateBits(); + initValues(); + + depReader.startReading(options.trainfile); + + int i = 0; + long start1 = System.currentTimeMillis(); + + System.out.print("Creating Features: "); + is.init(ic, mf) ; + del=0; + while(true) { + try { + if (i % 100 ==0) {del = outValue(i, del);} + SentenceData09 instance1 = depReader.getNext(is); + if (instance1== null) break; + + is.fillChars(instance1, i, _CEND); + + if (i>options.count) break; + + i++; + } catch(Exception e) { + DB.println("error in sentnence "+i); + e.printStackTrace(); + } + } + long end1 = System.currentTimeMillis(); + System.gc(); + long mem2 = Runtime.getRuntime().totalMemory() - Runtime.getRuntime().freeMemory(); + System.out.print(" time "+(end1-start1)+" mem "+(mem2/1024)+" kb"); + + types = new String[mf.getFeatureCounter().get(OPERATION)]; + + for(Entry<String,Integer> e : mf.getFeatureSet().get(OPERATION).entrySet()) { + types[e.getValue()] = e.getKey(); + // System.out.println("set pos "+e.getKey()); + } + + System.out.println("Num Features: " + mf.size()); + + + + return is; + + } + + + /** + * @param is + * @param n + * @param k + * @param wds + * @return + */ + public static String getOperation(Instances is, int n, int k, String[] wds) { + + + String form = wds[is.forms[n][k]]; + String olemma = wds[is.glemmas[n][k]]; + + String s = new StringBuffer(form.toLowerCase()).reverse().toString(); + String t = new StringBuffer(olemma.toLowerCase()).reverse().toString(); + + + + return getOperation2(s, t); + } + + + + public static String getOperation(SentenceData09 instance1, int i1) { + String s = new StringBuffer(instance1.forms[i1].toLowerCase()).reverse().toString(); + String t = new StringBuffer(instance1.lemmas[i1].toLowerCase()).reverse().toString(); + + + + return getOperation2(s, t); + } + + public static String getOperation(String si, String ti) { + String s = new StringBuffer(si.toLowerCase()).reverse().toString(); + String t = new StringBuffer(ti.toLowerCase()).reverse().toString(); + + + + return getOperation2(s, t); + } + + + private static String getOperation2(String s, String t) { + StringBuffer po = new StringBuffer(); + String op; + if (!s.equals(t)) { + + + int[][] d =StringEdit.LD(s, t); + StringEdit.searchPath(s,t,d, po, false); + op = po.toString(); + + } else op ="0"; // do nothing + return op; + } + + + + private void registerChars(String type, String word) { + for(int i=0;i<word.length();i++) mf.register(type, Character.toString(word.charAt(i))); + } + + + + public void initValues() { + + z = new D4(li); + + x = new D4(li); + x.a0=s_type; + + s_pos = mf.getFeatureCounter().get(POS).intValue();//mf.getFeatureBits(POS); + s_word = mf.getFeatureCounter().get(WORD); + s_type = mf.getFeatureCounter().get(TYPE).intValue();//mf.getFeatureBits(TYPE); + s_char = mf.getFeatureCounter().get(CHAR).intValue();//mf.getFeatureBits(CHAR); + s_oper = mf.getFeatureCounter().get(OPERATION).intValue();//mf.getFeatureBits(OPERATION); + + types = new String[mf.getFeatureCounter().get(Pipe.OPERATION)]; + for(Entry<String,Integer> e : mf.getFeatureSet().get(Pipe.OPERATION).entrySet()) types[e.getValue()] = e.getKey(); + + //wds = new String[mf.getFeatureCounter().get(Pipe.WORD)]; + //for(Entry<String,Integer> e : mf.getFeatureSet().get(Pipe.WORD).entrySet()) wds[e.getValue()] = e.getKey(); + + + z.a0 = s_type;z.a1 = s_oper; z.a2 = s_char; z.a3 = s_char; z.a4 = s_char;z.a5 = s_char;z.a6 = s_char;z.a7 = s_char; + x.a0 = s_type; x.a1 = s_oper;x.a2 = s_word; x.a3 = s_word; x.a4 = s_word;x.a5 = s_char;x.a6 = s_char;x.a7 = s_char; + + } + + public static int s_pos,s_word,s_type,s_dir,s_dist, s_char, s_oper; + + + + /** + * Initialize the features. + * @param maxFeatures + */ + public void initFeatures() { + + + + for(int k=0;k<50;k++) { + mf.register(TYPE, "F"+k); + } + + _f0 = mf.register(TYPE, _F0); + _f1 = mf.register(TYPE, _F1); + _f2 = mf.register(TYPE, _F2); + _f3 = mf.register(TYPE, _F3); + _f4 = mf.register(TYPE, _F4); + _f5 = mf.register(TYPE, _F5); + _f6 = mf.register(TYPE, _F6); + _f7 = mf.register(TYPE, _F7); + _f8 = mf.register(TYPE, _F8); + _f9 = mf.register(TYPE, _F9); + _f10 = mf.register(TYPE, _F10); + _f11 = mf.register(TYPE, _F11); + _f12 = mf.register(TYPE, _F12); + _f13 = mf.register(TYPE, _F13); + _f14 = mf.register(TYPE, _F14); + _f15 = mf.register(TYPE, _F15); + _f16 = mf.register(TYPE, _F16); + _f17 = mf.register(TYPE, _F17); + _f18 = mf.register(TYPE, _F18); + _f19 = mf.register(TYPE, _F19); + _f20 = mf.register(TYPE, _F20); + _f21 = mf.register(TYPE, _F21); + _f22 = mf.register(TYPE, _F22); + _f23 = mf.register(TYPE, _F23); + _f24 = mf.register(TYPE, _F24); + _f25 = mf.register(TYPE, _F25); + _f26 = mf.register(TYPE, _F26); + _f27 = mf.register(TYPE, _F27); + _f28 = mf.register(TYPE, _F28); + _f29 = mf.register(TYPE, _F29); + _f30 = mf.register(TYPE, _F30); + + _f31 = mf.register(TYPE, _F31); + _f32 = mf.register(TYPE, _F32); + _f33 = mf.register(TYPE, _F33); + _f34 = mf.register(TYPE, _F34); + + _f35 = mf.register(TYPE, _F35); + _f36 = mf.register(TYPE, _F36); + _f37 = mf.register(TYPE, _F37); + _f38 = mf.register(TYPE, _F38); + + + mf.register(POS, MID); + mf.register(POS, STR); + mf.register(POS, END); + mf.register(TYPE, CHAR); + + _swrd = mf.register(WORD, STR); + _ewrd = mf.register(WORD, END); + + + _CEND = mf.register(CHAR, END); + + + } + + + + final public void addCoreFeatures(InstancesTagger is, int ic, int i, int oper, String form, long[] f) { + + for(int l=f.length-1;l>=0;l--) f[l]=0; + + int formi =is.forms[ic][i]; + int wl =is.chars[ic][i][11];//.forms[i].length(); + + int position = 1+(i<3?i:3); + + int c0= is.chars[ic][i][0], c1=is.chars[ic][i][1], c2=is.chars[ic][i][2], c3=is.chars[ic][i][3], c4=is.chars[ic][i][4],c5=is.chars[ic][i][5]; + int e0 =is.chars[ic][i][6], e1 =is.chars[ic][i][7],e2 =is.chars[ic][i][8],e3 =is.chars[ic][i][9],e4 =is.chars[ic][i][10]; + + int len = is.length(ic); + + + + x.v1=oper; x.v0 = _f0; x.v2 = formi; x.cz3(); f[0]=x.getVal(); f[1]=x.csa(3, position); + x.v0 = _f1; x.v2 = formi; x.v3 =i+1>=len?x.v3=_ewrd:is.forms[ic][i+1];x.cz4(); f[2]=x.getVal(); + + // contains upper case include again!!! + + short upper =0; + short number = 1; + for(int k1=0;k1<wl;k1++){ + char c =form.charAt(k1); + if (Character.isUpperCase(c)) { + if (k1==0) upper=1; + else { + // first char + another + if (upper==1)upper=3; + // another uppercase in the word + else if (upper==0) upper=2; + } + } + + if (Character.isDigit(c) && k1==0) number =2 ; + else if (Character.isDigit(c) && number==1) number = 3 ; + + } + + // contains a number + z.v0= _f21; z.v2=number; z.cz3();f[3]=z.getVal(); + + z.v0 = _f4; z.v1 = oper; z.v2=c0; z.cz3();f[4]=z.getVal(); + z.v0 = _f5; z.v2 = e0;z.cz3();f[5]=z.getVal(); + + z.v2=c0; z.v3=c1; z.v4=c2; z.v5=c3; z.v6=c4; + z.v0=_f6; z.cz4(); f[6]=z.getVal(); + z.v0=_f7; z.cz5(); f[7]=z.getVal(); + z.v0=_f8; z.cz6(); f[8]=z.getVal(); + z.v0=_f9; z.cz7(); f[9]=z.getVal(); + + int c=10; + z.v2=e0; z.v3=e1; z.v4=e2; z.v5=e3; z.v6=e4; + z.v0 =_f10; z.cz4();f[c++]=z.getVal(); f[c++]= z.csa(3, upper); + z.v0 =_f11; z.cz5();f[c++]=z.getVal(); f[c++]= z.csa(3, upper); + z.v0 =_f12; z.cz6();f[c++]=z.getVal(); f[c++]= z.csa(3, upper); + z.v0 =_f13; z.cz7();f[c++]=z.getVal(); f[c++]= z.csa(3, upper); + + if (len>i+1) { + + z.v0 = _f14; z.v2 = is.chars[ic][i+1][0]; + z.cz3();f[c++]=z.getVal(); + + z.v0 = _f15; z.v2 = is.chars[ic][i+1][5];z.cz3();f[c++]=z.getVal(); + + if (is.chars[ic][i+1][11]>1 ) { + z.v0 = _f16; z.v2 = is.chars[ic][i+1][0]; + z.v3 = is.chars[ic][i+1][2];z.cz4();f[c++]=z.getVal(); + + z.v0 = _f17; z.v2 = is.chars[ic][i+1][1]; + z.v3 = is.chars[ic][i+1][6]; + z.cz4();f[c++]=z.getVal();//fv.add(li.l2i(mf.calc4(b))); + } + + + x.v0 = _f18; + x.v2 = is.forms[ic][i+1]; + x.cz3();f[c++]=x.getVal(); + + if (len>i+2) { + x.v0 = _f32; + x.v2 = is.forms[ic][i+2]; x.v3 = is.forms[ic][i+1]; x.cz4();f[c++]=x.getVal(); + x.cz3();f[c++]=x.getVal();//fv.add(li.l2i(mf.calc3(b))); + + } + + if (len>i+3) { + x.v0 = _f33; x.v2 = is.forms[ic][i+3]; x.v3 = is.forms[ic][i+2];x.cz4();f[c++]=x.getVal();//fv.add(li.l2i(mf.calc4(b))); + x.cz3();f[27]=x.getVal();//fv.add(li.l2i(mf.calc3(b))); + } + } + + // length + + z.v0= _f19; z.v1=oper; z.v2=wl;z.cz3();f[c++]=z.getVal();//fv.add(li.l2i(mf.calc3(dl1))); + + if (i<1) return ; + + x.v0 = _f27; x.v1=oper; + x.v2 = is.forms[ic][i-1];x.cz3();f[c++]=x.getVal();//fv.add(li.l2i(mf.calc3(b))); + + + if (i<2) return ; + + //added this before it was 99.46 + x.v0 = _f28; x.v2 = is.forms[ic][i-2];x.cz3();f[c++]=x.getVal();//fv.add(li.l2i(mf.calc3(b))); + + // result 99.484 + if (i<3) return ; + + x.v0 = _f31; x.v1=oper; x.v2 = is.forms[ic][i-3]; x.v3 = is.forms[ic][i-2]; x.cz4();f[c++]=x.getVal();//fv.add(li.l2i(mf.calc4(b))); + + } + + + +// public String[] wds; + + /** + * Write the lemma that are not mapped by operations + * @param dos + */ + private void writeMap(DataOutputStream dos) { + + try { + dos.writeInt(opse.size()); + for(Entry<String, String> e : opse.entrySet()) { + dos.writeUTF(e.getKey()); + dos.writeUTF(e.getValue()); + } + } catch (IOException e1) { + e1.printStackTrace(); + } + } + + + + /** + * Read the form-lemma mapping not read by operations + * @param dis + */ + public void readMap(DataInputStream dis) { + try { + int size = dis.readInt(); + for(int i =0; i<size;i++) { + opse.put(dis.readUTF(), dis.readUTF()); + } + } catch (IOException e1) { + e1.printStackTrace(); + } + } + + + + + + + /* (non-Javadoc) + * @see is2.tools.IPipe#write(java.io.DataOutputStream) + */ + @Override + public void write(DataOutputStream dos) { + this.writeMap(dos); + try { + cl.write(dos); + } catch (IOException e) { + e.printStackTrace(); + } + + } + + + +} diff --git a/dependencyParser/basic/mate-tools/src/is2/lemmatizer/StringEdit.java b/dependencyParser/basic/mate-tools/src/is2/lemmatizer/StringEdit.java new file mode 100755 index 0000000..8a4080e --- /dev/null +++ b/dependencyParser/basic/mate-tools/src/is2/lemmatizer/StringEdit.java @@ -0,0 +1,318 @@ +package is2.lemmatizer; + +import is2.util.DB; + +import java.util.ArrayList; + +public class StringEdit { + + + public static void main(String args[]) { + + + + String s = new StringBuffer(args[0]).reverse().toString(); + String t = new StringBuffer(args[1]).reverse().toString(); + + int d[][] = LD(s, t); + + + + StringBuffer opersations = new StringBuffer(); + searchPath(s,t,d, opersations, false); + System.out.println("resuylt "+" "+opersations); + + } + + + + + + //**************************** + // Get minimum of three values + //**************************** + + static private int Minimum (int a, int b, int c) { + int mi; + + mi = a; + if (b < mi) mi = b; + if (c < mi) mi = c; + + return mi; + + } + + //***************************** + // Compute Levenshtein distance + //***************************** + + static public int[][] LD (String s, String t) { + + int n = s.length (); + int m = t.length ();; // length of t + // char s_i; // ith character of s + // char t_j; // jth character of t + int cost; // cost + + // Step 1 + + + int[][] d = new int[n+1][m+1]; + + if (n == 0) return d; + if (m == 0) return d; + + // Step 2 + + for (int i = 0; i <= n; i++) d[i][0] = i; + for (int j = 0; j <= m; j++) d[0][j] = j; + + + // Step 3 + + for (int i = 1; i <= n; i++) { + + int s_i = s.charAt (i - 1); + + // Step 4 + + for (int j = 1; j <= m; j++) { + +// t_j = t.charAt (j - 1); + + // Step 5 + + if (s_i == t.charAt (j - 1)) cost = 0; + else cost = 1; + + + // Step 6 + + d[i][j] = Minimum (d[i-1][j]+1, d[i][j-1]+1, d[i-1][j-1] + cost); + + } + + } + + // Step 7 + + + + return d; + + } + + + + + + static String searchPath(String s, String t, int[][] d, StringBuffer operations, boolean debug) { + + StringBuffer result = new StringBuffer(s); + + int n = d.length; + int m = d[0].length; + + int x=n-1; + int y=m-1; + boolean changed =false; + while(true) { + if (debug && changed )System.out.println("result "+new StringBuffer(result) .reverse()); + + if (d[x][y]==0)break; + if (y>0&&x>0&& d[x-1][y-1]<d[x][y]) { + if (debug) System.out.println("min d[x-1][y-1] "+d[x-1][y-1]+" d[x][y] "+d[x][y]+" rep "+s.charAt(x-1)+" with "+t.charAt(y-1)+" at "+(x-1)); + + operations.append('R').append(Character.toString((char)((int)x-1))).append(s.charAt(x-1)).append(t.charAt(y-1)); + if (debug) result.setCharAt(x-1, t.charAt(y-1)); + y--; + x--; + changed =true; + continue; + } + if (y>0&& d[x][y-1]<d[x][y]) { + if (debug) System.out.println("min d[x][y-1] "+d[x][y-1]+" d[x][y] "+d[x][y]+" ins "+t.charAt(y-1)+" at "+(x)); + operations.append('I').append(Character.toString((char)((int)x))).append(t.charAt(y-1)); + if (debug)result.insert(x, t.charAt(y-1)); + y--; + changed =true; + continue; + } + if (x>0&& d[x-1][y]<d[x][y]) { + if (debug)System.out.println("min d[x-1][y] "+d[x-1][y]+" d[x][y] "+d[x][y]+" del "+s.charAt(x-1)+" at "+(x-1)); + operations.append('D').append(Character.toString((char)((int)x-1))).append(s.charAt(x-1)); + if (debug)result.deleteCharAt(x-1); + x--; + changed =true; + continue; + } + changed =false; + if (x>0&& y>0 && d[x-1][y-1]==d[x][y]) { + x--; y--; + continue ; + } + if (x>0&& d[x-1][y]==d[x][y]) { + x--; + continue; + } + if (y>0 && d[x][y-1]==d[x][y]) { + y--; + continue; + } + + } + if (debug) return result.reverse().toString(); + else return null; + } + + public static String change(String s, String operations) { + + StringBuffer result = new StringBuffer(s).reverse(); + + int pc =0; + while(true) { + if (operations.length()<=pc) break; + char nextOperation = operations.charAt(pc); + pc++; + if (nextOperation == 'R') { + //pc++; + int xm1 = (char)operations.charAt(pc); + pc++; + char replace = operations.charAt(pc); + pc++; + char with = operations.charAt(pc); + //operations.append('R').append((char)x-1).append(s.charAt(x-1)).append(t.charAt(y-1)); + // System.out.println(""+result+" xm1 "+xm1+" op "+operations); + + + if (result.length()<=xm1) return s; + + if (result.charAt(xm1)==replace) result.setCharAt(xm1, with); + //if (debug) result.setCharAt(x-1, t.charAt(y-1)); + pc++; + + }else if (nextOperation == 'I') { + // if (debug) System.out.println("min d[x][y-1] "+d[x][y-1]+" d[x][y] "+d[x][y]+" ins "+t.charAt(y-1)+" at "+(x)); + //operations.append('I').append((char)x).append(t.charAt(y-1)); + + //if (debug)result.insert(x, t.charAt(y-1)); + //y--; + //changed =true; + //pc++; + int x = operations.charAt(pc); + pc++; + char in = operations.charAt(pc); + + if (result.length()<x) return s; + + result.insert(x, in); + pc++; + } else if (nextOperation == 'D' ) { + //pc++; + int xm1 = operations.charAt(pc); + + + if (result.length()<=xm1) return s; + + result.deleteCharAt(xm1); + pc++; + // delete with + pc++; + // operations.append('D').append((char)x-1).append(s.charAt(x-1)); + // if (debug)result.deleteCharAt(x-1); + } + + } + return result.reverse().toString(); + //else return null; + } + + + + + + + + + + + + + + + + + + /** + * @param opers + * @param postion + * @return + */ + public static String get(ArrayList<String> opers, int position) { + for(String s : opers) { + int p = (int)s.charAt(1); + if (p==position) { + return s; + } + } + return "0"; + } + + + + + + /** + * @param form + * @param string + * @param c + * @return + */ + public static String changeSimple(String form, String operation, int c) { + + if (operation.equals("0")) return form; + + if (operation.charAt(0)=='I') { + StringBuffer f = new StringBuffer(form); + if (f.length()<=c) { + // DB.println("fail insert "); + return form; + } + f.insert(c+1, operation.charAt(1)); + return f.toString(); + } + if (operation.charAt(0)=='R') { + StringBuffer f = new StringBuffer(form); + // if (f.length()<=c) f.append(' '); + if (f.length()<=c) { + // DB.println("fail replace "); + return form; + } + f.setCharAt(c, operation.charAt(2)); + return f.toString(); + } + + if (operation.charAt(0)=='D') { + StringBuffer f = new StringBuffer(form); + f.delete(c, c+1);//.append(' '); + return f.toString(); + } + return form; + } + + + + + + /** + * @param string + * @return + */ + public static String simple(String o) { + StringBuffer s = new StringBuffer(o); + s.delete(1, 2); + return s.toString(); + } + +} diff --git a/dependencyParser/basic/mate-tools/src/is2/mtag/Convert.java b/dependencyParser/basic/mate-tools/src/is2/mtag/Convert.java new file mode 100755 index 0000000..e262269 --- /dev/null +++ b/dependencyParser/basic/mate-tools/src/is2/mtag/Convert.java @@ -0,0 +1,98 @@ +/** + * + */ +package is2.mtag; + + + +import java.io.BufferedReader; +import java.io.BufferedWriter; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStreamReader; +import java.io.OutputStreamWriter; +import java.util.ArrayList; + +/** + * @author Dr. Bernd Bohnet, 20.01.2010 + * + * + */ +public class Convert { + + public static void main (String[] args) throws IOException { + + Options options = new Options(args); + + split(options.trainfile); + + } + + /** + * @param trainfile + * @throws IOException + */ + private static void split(String trainfile) throws IOException { + + String dir = "split"; + boolean success = (new File("split")).mkdir(); + if (success) System.out.println("Directory: " + dir + " created"); + + + ArrayList<String> corpus = new ArrayList<String>(); + + BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(trainfile),"UTF-8"),32768); + String l =null; + int sentences = 0; + try { + while( (l = reader.readLine())!=null) { + + corpus.add(l); + if (l.length()<8) sentences++; + + } + } catch (IOException e) { + e.printStackTrace(); + } + System.out.println("Corpus has "+sentences+" sentences."); + + int partSize = sentences / 20; + System.out.println("Prepare corpus for cross annotations with 20 parts with part size "+partSize+" number of lines "+corpus.size()); + + + + for(int k=0;k<20;k++) { + BufferedWriter br = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("split/p-"+k),"UTF-8")); + BufferedWriter rest = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("split/r-"+k),"UTF-8")); + int skip=k*partSize; + + int countSentences=0; + int countSentencesWrote=0; + System.out.println("skip from "+skip+" to "+(skip+partSize-1)); + for(String x : corpus) { + if (countSentences>=skip && (countSentences<(skip+partSize)||k==19)){ + rest.write(x); + rest.newLine(); + if (x.length()<8) countSentencesWrote++; + } else { + br.write(x); + br.newLine(); + } + + if (x.length()<8) countSentences++; + } + System.out.println("wrote for this part "+countSentencesWrote); + br.flush(); + br.close(); + rest.flush(); + rest.close(); + + } + + + } + + +} diff --git a/dependencyParser/basic/mate-tools/src/is2/mtag/Evaluator.java b/dependencyParser/basic/mate-tools/src/is2/mtag/Evaluator.java new file mode 100755 index 0000000..09d1455 --- /dev/null +++ b/dependencyParser/basic/mate-tools/src/is2/mtag/Evaluator.java @@ -0,0 +1,148 @@ +package is2.mtag; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.Comparator; +import java.util.Hashtable; +import java.util.Map.Entry; + +import is2.data.SentenceData09; +import is2.io.CONLLReader09; + + +public class Evaluator { + + public static void evaluate (String act_file, String pred_file, String format) throws Exception { + + CONLLReader09 goldReader = new CONLLReader09(act_file);//DependencyReader.createDependencyReader(); + // boolean labeled = goldReader.startReading(act_file); + + CONLLReader09 predictedReader = new CONLLReader09(); + predictedReader.startReading(pred_file); + +// if (labeled != predLabeled) +// System.out.println("Gold file and predicted file appear to differ on whether or not they are labeled. Expect problems!!!"); + + + int total = 0, totalP=0,corr = 0, corrL = 0, corrT=0,totalX=0; + int totalD=0, corrD=0,err=0; + int numsent = 0, corrsent = 0, corrsentL = 0; + SentenceData09 goldInstance = goldReader.getNext(); + SentenceData09 predInstance = predictedReader.getNext(); + + Hashtable<String,Integer> errors = new Hashtable<String,Integer>(); + Hashtable<String,StringBuffer> words = new Hashtable<String,StringBuffer>(); + + + while(goldInstance != null) { + + int instanceLength = goldInstance.length(); + + if (instanceLength != predInstance.length()) + System.out.println("Lengths do not match on sentence "+numsent); + + + String gold[] = goldInstance.ofeats; + String pred[] = predInstance.pfeats; + + boolean whole = true; + boolean wholeL = true; + + // NOTE: the first item is the root info added during nextInstance(), so we skip it. + + for (int i = 1; i < instanceLength; i++) { + if (gold[i].equals(pred[i])||(gold[i].equals("_")&&pred[i]==null)) corrT++; + else { + // System.out.println("gold:"+goldFeats[i]+" pred:"+predFeats[i]+" "+goldInstance.forms[i]+" snt "+numsent+" i:"+i); + //for (int k = 1; k < instanceLength; k++) { + + // System.out.print(goldInstance.forms[k]+":"+goldInstance.gpos[k]); + // if (k==i) System.out.print(":"+predInstance.gpos[k]); + // System.out.print(" "); + + // } + //System.out.println(); + String key = "gold: '"+gold[i]+"' pred: '"+pred[i]+"'"; + Integer cnt = errors.get(key); + StringBuffer errWrd = words.get(key); + if (cnt==null) { + errors.put(key,1); + words.put(key, new StringBuffer().append(goldInstance.forms[i])); + } + else { + errors.put(key,cnt+1); + errWrd.append(" "+goldInstance.forms[i]); + } + err++; + + } + String[] gf = gold[i].split("|"); + int eq=0; + + if (pred[i]!=null) { + String[] pf = pred[i].split("|"); + totalP +=pf.length; + + if (pf.length>gf.length) totalX +=pf.length; + else totalX+=gf.length; + + for(String g : gf) { + for(String p : pf) { + if (g.equals(p)) {eq++;break;} + } + } + } else totalX+=gf.length; + totalD +=gf.length; + corrD +=eq; + } + total += instanceLength - 1; // Subtract one to not score fake root token + + if(whole) corrsent++; + if(wholeL) corrsentL++; + numsent++; + + goldInstance = goldReader.getNext(); + predInstance = predictedReader.getNext(); + } + + ArrayList<Entry<String, Integer>> opsl = new ArrayList<Entry<String, Integer>>(); + for(Entry<String, Integer> e : errors.entrySet()) { + opsl.add(e); + } + + Collections.sort(opsl, new Comparator<Entry<String, Integer>>(){ + + @Override + public int compare(Entry<String, Integer> o1, + Entry<String, Integer> o2) { + + return o1.getValue()==o2.getValue()?0:o1.getValue()>o2.getValue()?-1:1; + } + + + }); + + + int cnt=0; + System.out.println("10 top most errors:"); + for(Entry<String, Integer> e : opsl) { + cnt++; + // System.out.println(e.getKey()+" "+e.getValue()+" context: "+words.get(e.getKey())); + } + + + System.out.println("Tokens: " + total+" Correct: " + corrT+" "+(float)corrT/total+" R "+((float)corrD/totalD)+" tP "+totalP+" tG "+totalD+" P "+(float)corrD/totalP); + System.out.println("err: " + err+" total "+total+" corr "+corrT); +// System.out.println("Unlabeled Complete Correct: " + ((double)corrsent/numsent)); + + } + + public static void main (String[] args) throws Exception { + String format = "CONLL"; + if (args.length > 2) + format = args[2]; + + evaluate(args[0], args[1], format); + } + +} diff --git a/dependencyParser/basic/mate-tools/src/is2/mtag/ExtractorM.java b/dependencyParser/basic/mate-tools/src/is2/mtag/ExtractorM.java new file mode 100644 index 0000000..864b977 --- /dev/null +++ b/dependencyParser/basic/mate-tools/src/is2/mtag/ExtractorM.java @@ -0,0 +1,514 @@ +package is2.mtag; + + +import is2.data.Cluster; +import is2.data.F2SF; +import is2.data.Instances; +import is2.data.InstancesTagger; +import is2.data.Long2Int; +import is2.data.Long2IntInterface; +import is2.data.ParametersFloat; +import is2.data.PipeGen; +import is2.data.SentenceData09; +import is2.io.CONLLReader09; +import is2.tools.IPipe; +import is2.util.OptionsSuper; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Map.Entry; + + +final public class ExtractorM extends PipeGen implements IPipe { + + public static int _CEND; + + + private static final String STWRD = "STWRD",STPOS = "STPOS",END = "END",STR = "STR"; + + public String[] types; + + Cluster cl; + + final public MFO mf =new MFO(); + public Long2IntInterface li; + + + + final MFO.Data4 d1 = new MFO.Data4(),d2 = new MFO.Data4(),d3 = new MFO.Data4(),dw = new MFO.Data4(); + final MFO.Data4 dwp = new MFO.Data4(),dp = new MFO.Data4(); + + + private OptionsSuper options; + private int _ewrd; + static private int _mid, _strp,_endp; + + public ExtractorM (Options options, Long2Int long2Int) throws IOException { + this.options = options; + + li =long2Int; + } + + public ExtractorM (OptionsSuper options) { + this.options = options; + } + + + public HashMap<Integer,Integer> form2morph = new HashMap<Integer, Integer> (); + + + public Instances createInstances(String file) { + + CONLLReader09 depReader = new CONLLReader09(CONLLReader09.NO_NORMALIZE); + + depReader.startReading(file); + mf.register(POS,"<root-POS>"); + + mf.register(FFEATS, CONLLReader09.NO_TYPE); + mf.register(FFEATS, ""); + + InstancesTagger is = new InstancesTagger(); + + System.out.println("Registering feature parts "); + + HashMap<String,HashSet<String>> op2form = new HashMap<String, HashSet<String>> (); + HashMap<String,Integer> freq = new HashMap<String, Integer> (); + + + int ic=0; + while(true) { + SentenceData09 instance1 = depReader.getNext(); + if (instance1== null) break; + ic++; + + + String[] w = instance1.forms; + for(int i1 = 0; i1 < w.length; i1++) mf.register(WORD, w[i1]); + for(int i1 = 0; i1 < w.length; i1++) registerChars(CHAR, w[i1]); + + for(int i1 = 0; i1 < w.length; i1++) { + mf.register(WORD, w[i1].toLowerCase()); + Integer f = freq.get(w[i1].toLowerCase()); + + if (f==null) freq.put(w[i1].toLowerCase(), 1); + else freq.put(w[i1].toLowerCase(), f+1); + + HashSet<String> forms = op2form.get(w[i1].toLowerCase()); + if (forms==null) { + forms = new HashSet<String>(); + op2form.put(w[i1].toLowerCase(), forms); + } + forms.add(instance1.ofeats[i1]==null?"_":instance1.ofeats[i1]); + } + for(int i1 = 0; i1 < w.length; i1++) registerChars(CHAR, w[i1].toLowerCase()); + + w = instance1.plemmas; + for(int i1 = 0; i1 < w.length; i1++) mf.register(WORD, w[i1]); + for(int i1 = 0; i1 < w.length; i1++) registerChars(CHAR, w[i1]); + + w = instance1.ppos; + for(int i1 = 0; i1 < w.length; i1++) mf.register(POS, w[i1]); + + w = instance1.gpos; + for(int i1 = 0; i1 < w.length; i1++) mf.register(POS, w[i1]); + + w = instance1.ofeats; + for(int i1 = 0; i1 < w.length; i1++) if (w[i1]!=null) mf.register(FEAT, w[i1]); + for(int i1 = 0; i1 < w.length; i1++) if (w[i1]!=null) mf.register(FFEATS, w[i1]); + + // w = instance1.pfeats; + //for(int i1 = 0; i1 < w.length; i1++) if (w[i1]!=null) mf.register(FEAT, w[i1]); + } + + + for(Entry<String,HashSet<String>> e : op2form.entrySet()) { + if (e.getValue().size()==1 &&freq.get(e.getKey())>10) { + // System.out.println("found map "+e.getKey()+" "+e.getValue()+" "+freq.get(e.getKey())); + form2morph.put(mf.getValue(ExtractorM.WORD, e.getKey()), mf.getValue(FFEATS, (String)e.getValue().toArray()[0])); + } + } + + initFeatures(); + + mf.calculateBits(); + initValues(); + + System.out.println(""+mf.toString()); + + depReader.startReading(file); + + int num1 = 0; + long start1 = System.currentTimeMillis(); + + System.out.print("Creating Features: "); + is.init(ic, mf) ; + int del=0; + + while(true) { + if (num1 % 100 ==0) {del = outValue(num1, del);} + SentenceData09 instance1 = depReader.getNext(is); + if (instance1== null) break; + + if (num1>options.count) break; + + num1++; + } + long end1 = System.currentTimeMillis(); + System.gc(); + long mem2 = Runtime.getRuntime().totalMemory() - Runtime.getRuntime().freeMemory(); + System.out.print(" time "+(end1-start1)+" mem "+(mem2/1024)+" kb"); + + types = new String[mf.getFeatureCounter().get(FFEATS)]; + + for(Entry<String,Integer> e : mf.getFeatureSet().get(FFEATS).entrySet()) { + types[e.getValue()] = e.getKey(); + } + + + if (options.clusterFile==null)cl = new Cluster(); + else cl= new Cluster(options.clusterFile, mf,6); + + + System.out.println("Num Features: " + types.length); + + + + depReader.startReading(file); + + + + int num11=0; + + while(true) { + + SentenceData09 instance = depReader.getNext(); + if (instance==null) break; + + is.fillChars(instance, num11, _CEND); + + + if (num11>options.count) break; + + num11++; + } + + return is;//.toNativeArray(); + + } + + private void registerChars(String type, String word) { + for(int i=0;i<word.length();i++) mf.register(type, Character.toString(word.charAt(i))); + } + + + + public void initValues() { + s_feat = mf.getFeatureBits(FFEATS); + s_word = mf.getFeatureBits(WORD); + s_type = mf.getFeatureBits(TYPE); + s_char = mf.getFeatureBits(CHAR); + s_pos =mf.getFeatureBits(POS); + // dl1.a[0] = s_type; dl1.a[1] = s_pos; + // for (int k = 2; k < 7; k++) dl1.a[k] = s_pos; + + d1.a0 = s_type; d1.a1 = s_feat; d1.a2= s_word; + d2.a0 = s_type; d2.a1 = s_feat; d2.a2= s_feat; d2.a3= s_feat; d2.a4= s_feat; d2.a5= s_feat; d2.a6= s_feat; + d3.a0 = s_type; d3.a1 = s_feat; d3.a2= s_char; d3.a3= s_char; d3.a4= s_char; d3.a5= s_char; d3.a6= s_char; d3.a7= s_char; + dp.a0 = s_type; dp.a1 = s_feat; dp.a2= s_pos; dp.a3= s_pos; dp.a4= s_feat;// dp.a5= s_char; dp.a6= s_char; dp.a7= s_char; + dw.a0 = s_type; dw.a1 = s_feat;dw.a2= s_word; dw.a3= s_word; dw.a4= s_word; dw.a5= s_word; dw.a6= s_word; dw.a7= s_word; + dwp.a0 = s_type; dwp.a1 = s_feat;dwp.a2= s_word ; dwp.a3= s_feat; dwp.a4= s_word; + + } + + public static short s_feat,s_word,s_type,s_dir,s_dist,s_char,s_pos; + + + + /** + * Initialize the features types. + */ + public void initFeatures() { + + for(int t=0;t<62;t++) { + mf.register(TYPE,"F"+t); + } + + +// _mid = mf.register(POS, MID); + _strp = mf.register(POS, STR); + _endp= mf.register(POS, END); + + mf.register(WORD, STR); + _ewrd = mf.register(WORD, END); + + + _CEND = mf.register(CHAR, END); + + + + + // optional features + mf.register(WORD,STWRD); + mf.register(POS,STPOS); + + + } + + + final public void addCF(InstancesTagger is, int ic, String fs,int i, short pfeat[],short ppos[], int[] forms, int[] lemmas, long[] vs) { + + int c0= is.chars[ic][i][0], c1=is.chars[ic][i][1], c2=is.chars[ic][i][2], c3=is.chars[ic][i][3], c4=is.chars[ic][i][4],c5=is.chars[ic][i][5]; + int e0 =is.chars[ic][i][6], e1 =is.chars[ic][i][7],e2 =is.chars[ic][i][8],e3 =is.chars[ic][i][9],e4 =is.chars[ic][i][10]; + + int f=1,n=0; + short upper =0, number = 1; + for(int k1=0;k1<fs.length();k1++){ + char c = fs.charAt(k1); + if (Character.isUpperCase(c)) { + if (k1==0) upper=1; + else { + // first char + another + if (upper==1) upper=3; + // another uppercase in the word + else if (upper==0) upper=2; + } + } + + if (Character.isDigit(c) && k1==0) number =2 ; + else if (Character.isDigit(c) && number==1) number = 3; + } + + int form = forms[i]; + + int len = forms.length; + long l; + d1.v0 = f++; d1.v2=form; l=mf.calc3(d1); vs[n++]=mf.calc3(d1); + + d1.v0 = f++; d1.v2=is.formlc[ic][i]; vs[n++]=mf.calc3(d1); + + d3.v2=c0; d3.v3=c1; d3.v4=c2; d3.v5=c3; d3.v6=c4; + d3.v0=f++; vs[n++]=mf.calc3(d3); + d3.v0=f++; vs[n++]=mf.calc4(d3); + d3.v0=f++; vs[n++]=mf.calc5(d3); + d3.v0=f++; vs[n++]=mf.calc6(d3); + d3.v0=f++; vs[n++]=mf.calc7(d3); + + if (form!=-1) { + d3.v2=c2; d3.v3=c3; d3.v4=c4; d3.v5=c5; d3.v6=cl.getLP(form); + d3.v0=f; vs[n++]=mf.calc6(d3); d3.v0=f+1; vs[n++]=mf.calc7(d3); + } + f+=2; + + if (form>0) { + d3.v0=f; d3.v5=cl.getLP(form); vs[n++]=mf.calc6(d3); + d3.v0=f+1; d3.v4=cl.getLP(form); vs[n++]=mf.calc5(d3); + d3.v0=f+2; d3.v3=cl.getLP(form); vs[n++]=mf.calc4(d3); + } + f+=3; + + d3.v2=e0; d3.v3=e1; d3.v4=e2; d3.v5=e3; d3.v6=e4; + d3.v0 =f++; vs[n++]=mf.calc3(d3); + d3.v0 =f++; vs[n++]=l=mf.calc4(d3); vs[n++]=d3.calcs(3, upper, l); + d3.v0 =f++; vs[n++]=l=mf.calc5(d3); vs[n++]=d3.calcs(3, upper, l); + d3.v0 =f++; vs[n++]=l=mf.calc6(d3); vs[n++]=d3.calcs(3, upper, l); + d3.v0 =f++; vs[n++]=l=mf.calc7(d3); vs[n++]=d3.calcs(3, upper, l); + + if (form>0) { + d3.v0=f; d3.v5=cl.getLP(form); vs[n++]=mf.calc6(d3); + d3.v0=f+1; d3.v4=cl.getLP(form); vs[n++]=mf.calc5(d3); + d3.v0=f+2; d3.v3=cl.getLP(form); vs[n++]=mf.calc4(d3); + } + f+=3; + + + dw.v0=f++; dw.v2=i+1<len?forms[i+1]:_ewrd;dw.v3= forms[i];vs[n++]=mf.calc4(dw); + + if (len>i+1) { + + dw.v0=f; dw.v2= forms[i+1]; vs[n++]=mf.calc3(dw); + d3.v0=f+1; d3.v2 =is.chars[ic][i+1][0];vs[n++]=mf.calc3(d3); + d3.v0=f+2; d3.v2 =is.chars[ic][i+1][6];vs[n++]=mf.calc3(d3); + + d3.v2=e0; d3.v3=e1; + + d3.v0 =f+3; d3.v4 =is.chars[ic][i+1][0];vs[n++]=mf.calc5(d3); + d3.v0 =f+4; d3.v4 =is.chars[ic][i+1][6];vs[n++]=mf.calc5(d3); + + + + if (is.chars[ic][i+1][11]>1 ) { // instance.forms[i+1].length() + + d3.v0=f+5; d3.v2=is.chars[ic][i+1][0]; d3.v3=is.chars[ic][i+1][1]; vs[n++]=mf.calc4(d3); + d3.v0=f+6; d3.v2=is.chars[ic][i+1][6]; d3.v3=is.chars[ic][i+1][7]; vs[n++]=mf.calc4(d3); + + d3.v2=e0; d3.v3=e1; + + d3.v0=f+7; d3.v4 = is.chars[ic][i+1][0]; d3.v5 =is.chars[ic][i+1][1]; vs[n++]=mf.calc6(d3); + d3.v0=f+8; d3.v4 = is.chars[ic][i+1][6]; d3.v5=is.chars[ic][i+1][7]; vs[n++]=mf.calc6(d3); + + if (forms[i+1]>0) { + d3.v0=f+9; d3.v2=is.chars[ic][i+1][0]; d3.v3=is.chars[ic][i+1][1]; d3.v4 =cl.getLP(forms[i+1]); vs[n++]=mf.calc5(d3); + d3.v0=f+10; d3.v2=is.chars[ic][i+1][6]; d3.v3=is.chars[ic][i+1][7]; d3.v4 =cl.getLP(forms[i+1]); vs[n++]=mf.calc5(d3); + } + } + + if (forms[i+1]>0) { + dw.v0=f+11; dw.v2= cl.getLP(forms[i+1]); dw.v3= forms[i];vs[n++]=mf.calc4(dw); + } + + if (len>i+2) { + dw.v0=f+12; dw.v2= forms[i+2]; dw.v3 = forms[i+1];vs[n++]=mf.calc4(dw);vs[n++]=mf.calc3(dw); +// d2.v0=f+13; d2.v2=pfeat[i+1]; d2.v3= pfeat[i+2]; vs[n++]=mf.calc4(d2); + // dp.v0= f+14; dp.v2=ppos[i+1]; dp.v3=ppos[i+2]; vs[n++]=mf.calc4(dp); + + } + + if (len>i+3) { + dw.v0=f+14; dw.v2= forms[i+3]; dw.v3 = forms[i+2]; vs[n++]=mf.calc4(dw); vs[n++]=mf.calc3(dw); + + } + } + f+=16; + + // length + d2.v0=f++; d2.v2=is.chars[ic][i][11];vs[n++]=mf.calc3(d2); + + + // contains a number + d2.v0=f++; d2.v2=number; vs[n++]=mf.calc3(d2); + d1.v0=f++; d1.v2=lemmas[i]; vs[n++]=mf.calc3(d1); + + if (i!=0 &&len>i+1) { + dw.v0=f; dw.v2=lemmas[i-1];dw.v3=lemmas[i+1];vs[n++]=mf.calc4(dw); + d2.v0=f+1; d2.v2=pfeat[i-1]; d2.v3=pfeat[i+1];vs[n++]=mf.calc4(d2); + } + f+=2; + + d2.v0= f++; d2.v2=i>=1? pfeat[i-1]:_strp; vs[n++]=mf.calc3(d2); + dp.v0= f++; dp.v2=ppos[i]; vs[n++]=mf.calc3(dp); + + if (i>0) { + dw.v0 = f++; dw.v2 =i>=1? forms[i-1]:_strp; vs[n++]=mf.calc3(dw); + dw.v0 = f++; dw.v2 = i>=1? lemmas[i-1]:_strp; vs[n++]=mf.calc3(dw); + + if (len>i+1) { +// d2.v0=f; d2.v2= pfeat[i-1];d2.v3= pfeat[i+1]; vs[n++]=mf.calc4(d2); + // dp.v0= f+1; dp.v2=ppos[i-1]; dp.v3=ppos[i+1]; vs[n++]=mf.calc4(dp); + + } + f++; + dp.v0= f++; dp.v2=ppos[i]; dp.v3=ppos[i-1]; vs[n++]=mf.calc4(dp); + + if (i>1) { + d2.v0=f++; d2.v2=i<2?_strp: pfeat[i-2]; vs[n++]=mf.calc3(d2); + d2.v0=f++; d2.v2= pfeat[i-1]; d2.v3= pfeat[i-2]; vs[n++]=mf.calc4(d2); + + dw.v0=f++; dw.v2= forms[i-2]; vs[n++]=mf.calc3(dw); + dwp.v0=f++; dwp.v2 = forms[i-1]; dwp.v3 = pfeat[i-2];vs[n++]=mf.calc4(dwp); + dwp.v0=f++; dwp.v2 = forms[i-2]; dwp.v3 = pfeat[i-1];vs[n++]=mf.calc4(dwp); + + if (i>2) { + d2.v0=f++; d2.v2=pfeat[i-3]; vs[n++]=mf.calc3(d2); + d2.v0=f++; d2.v2=pfeat[i-2]; d2.v3= pfeat[i-3]; vs[n++]=mf.calc4(d2); + dw.v0=f++; dw.v2 = forms[i-3]; dw.v3 = forms[i-2]; vs[n++]=mf.calc4(dw); + // dp.v0= f++; dp.v2=ppos[i-3]; dp.v3=ppos[i-2]; vs[n++]=mf.calc4(dp); + } + } + } + vs[n] = Integer.MIN_VALUE; + } + + + + + + + + public int fillFeatureVectorsOne(ParametersFloat params, int w1, String form, Instances is, int n, short[] features, long[] vs) { + double best = -1; + int bestType=-1; + + F2SF f = new F2SF(params.parameters); + //is.gfeats[n] + addCF((InstancesTagger)is, n, form, w1, features,is.pposs[n], is.forms[n], is.plemmas[n], vs); + + for(int t = 0; t < types.length; t++) { + + f.clear(); + int p = t<<ExtractorM.s_type; + for(int k=0;k<vs.length;k++) { + if (vs[k]==Integer.MIN_VALUE) break; + if (vs[k]>=0) f.add(li.l2i(vs[k]+p)); + } + if (f.score >best) { + bestType=t; + best =f.score; + } + + } + return bestType; + + } + + + + //static ArrayList<T> todo = new ArrayList<T>(); + static SentenceData09 instance; + + + public static int _FC =200; + + + /** + * Write the lemma that are not mapped by operations + * @param dos + */ + public void writeMap(DataOutputStream dos) { + + try { + dos.writeInt(this.form2morph.size()); + for(Entry<Integer, Integer> e : form2morph.entrySet()) { + dos.writeInt(e.getKey()); + dos.writeInt(e.getValue()); + } + } catch (IOException e1) { + e1.printStackTrace(); + } + } + + + + /** + * Read the form-lemma mapping not read by operations + * @param dis + */ + public void readMap(DataInputStream dis) { + try { + int size = dis.readInt(); + for(int i =0; i<size;i++) { + form2morph.put(dis.readInt(), dis.readInt()); + } + } catch (IOException e1) { + e1.printStackTrace(); + } + } + + + /* (non-Javadoc) + * @see is2.tools.IPipe#write(java.io.DataOutputStream) + */ + @Override + public void write(DataOutputStream dos) { + try { + cl.write(dos); + writeMap(dos); + } catch (IOException e) { + e.printStackTrace(); + } + } + + +} diff --git a/dependencyParser/basic/mate-tools/src/is2/mtag/MFO.java b/dependencyParser/basic/mate-tools/src/is2/mtag/MFO.java new file mode 100755 index 0000000..d91991e --- /dev/null +++ b/dependencyParser/basic/mate-tools/src/is2/mtag/MFO.java @@ -0,0 +1,540 @@ +package is2.mtag; + + +import is2.data.IEncoderPlus; +import is2.util.DB; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; +import java.util.HashMap; +import java.util.Map.Entry; + +/** + * Map Features, do not map long to integer + * + * @author Bernd Bohnet, 20.09.2009 + */ + +final public class MFO implements IEncoderPlus { + + /** The features and its values */ + static private final HashMap<String,HashMap<String,Integer>> m_featureSets = new HashMap<String,HashMap<String,Integer>>(); + + /** The feature class and the number of values */ + static private final HashMap<String,Integer> m_featureCounters = new HashMap<String,Integer>(); + + /** The number of bits needed to encode a feature */ + static final HashMap<String,Integer> m_featureBits = new HashMap<String,Integer>(); + + /** Integer counter for long2int */ + //private int count=0; + + /** Stop growing */ + public boolean stop=false; + + final public static String NONE="<None>"; + + public static class Data { + public final String[] a = new String[8]; + public final String[] v = new String[8]; + final short[] s = new short[9]; + public void clear(int i) { + v[i]=null; + } + } + + + + final public static class Data4 { + public int shift; + public short a0,a1,a2,a3,a4,a5,a6,a7,a8,a9; + public int v0,v1,v2,v3,v4,v5,v6,v7,v8,v9; + + final public long calcs(int b, long v, long l) { + if (l<0) return l; + l |= v<<shift; + shift +=b; + return l; + } + + + final public long calc2() { + + if (v0<0||v1<0) return -1; + + long l = v0; + shift =a0; + l |= (long)v1<<shift; + shift +=a1; + + return l; + } + + + + final public long calc3() { + + if (v0<0||v1<0||v2<0) return -1; + // if (v1<0||v2<0) return -1; + + long l = v0; + shift =a0; + l |= (long)v1<<shift; + shift +=a1; + l |= (long)v2<<shift; + shift=(short) (shift + a2); + + //shift=; + return l; + } + + + final public long calc4() { + if (v0<0||v1<0||v2<0||v3<0) return -1; + + long l = v0; + shift =a0; + l |= (long)v1<<shift; + shift +=a1; + l |= (long)v2<<shift; + shift +=a2; + l |= (long)v3<<shift; + shift= shift +a3; + + return l; + } + + + + final public long calc5() { + + if (v0<0||v1<0||v2<0||v3<0||v4<0) return -1; + + long l = v0; + shift =a0; + l |= (long)v1<<shift; + shift +=a1; + l |= (long)v2<<shift; + shift +=a2; + l |= (long)v3<<shift; + shift +=a3; + l |= (long)v4<<shift; + shift =shift+a4; + + return l; + } + + + final public long calc6() { + + if (v0<0||v1<0||v2<0||v3<0||v4<0||v5<0) return -1; + + long l = v0; + shift =a0; + l |= (long)v1<<shift; + shift +=a1; + l |= (long)v2<<shift; + shift +=a2; + l |= (long)v3<<shift; + shift +=a3; + l |= (long)v4<<shift; + shift +=a4; + l |= (long)v5<<shift; + shift =shift+a5; + + return l; + } + + final public long calc7() { + + if (v0<0||v1<0||v2<0||v3<0||v4<0||v5<0||v6<0) return -1; + + long l = v0; + shift =a0; + l |= (long)v1<<shift; + shift +=a1; + l |= (long)v2<<shift; + shift +=a2; + l |= (long)v3<<shift; + shift +=a3; + l |= (long)v4<<shift; + shift +=a4; + l |= (long)v5<<shift; + shift +=a5; + l |= (long)v6<<shift; + shift =shift+a6; + + return l; + } + + + final public long calc8() { + + if (v0<0||v1<0||v2<0||v3<0||v4<0||v5<0||v6<0||v7<0) return -1; + + long l = v0; + shift =a0; + l |= (long)v1<<shift; + shift +=a1; + l |= (long)v2<<shift; + shift +=a2; + l |= (long)v3<<shift; + shift +=a3; + l |= (long)v4<<shift; + shift +=a4; + l |= (long)v5<<shift; + shift +=a5; + l |= (long)v6<<shift; + shift +=a6; + l |= (long)v7<<shift; + shift =shift+a7; + + return l; + } + + } + + public MFO () {} + + + // public int size() {return count;} + + + + + /** + * Register an attribute class, if it not exists and add a possible value + * @param type + * @param type2 + */ + final public int register(String a, String v) { + + HashMap<String,Integer> fs = getFeatureSet().get(a); + if (fs==null) { + fs = new HashMap<String,Integer>(); + getFeatureSet().put(a, fs); + fs.put(NONE, 0); + getFeatureCounter().put(a, 1); + } + Integer c = getFeatureCounter().get(a); + + Integer i = fs.get(v); + if (i==null) { + fs.put(v, c); + c++; + getFeatureCounter().put(a,c); + return c-1; + } else return i; + } + + /** + * Calculates the number of bits needed to encode a feature + */ + public void calculateBits() { + + int total=0; + for(Entry<String,Integer> e : getFeatureCounter().entrySet() ){ + int bits =(int)Math.ceil((Math.log(e.getValue()+1)/Math.log(2))); + m_featureBits.put(e.getKey(), bits); + total+=bits; + // System.out.println(" "+e.getKey()+" bits "+bits+" number "+(e.getValue()+1)); + } + + // System.out.println("total number of needed bits "+total); + } + + + + @Override + public String toString() { + + StringBuffer content = new StringBuffer(); + for(Entry<String,Integer> e : getFeatureCounter().entrySet() ){ + content.append(e.getKey()+" "+e.getValue()); + content.append(':'); + // HashMap<String,Integer> vs = getFeatureSet().get(e.getKey()); + content.append(getFeatureBits(e.getKey())); + + /*if (vs.size()<120) + for(Entry<String,Integer> e2 : vs.entrySet()) { + content.append(e2.getKey()+" ("+e2.getValue()+") "); + }*/ + content.append('\n'); + + } + return content.toString(); + } + + + static final public long calcs(Data4 d,int b, long v, long l) { + if (l<0) return l; + l |= v<<d.shift; + d.shift +=b; + return l; + } + + + static final public short getFeatureBits(String a) { + return (short)m_featureBits.get(a).intValue(); + } + + + + /** + * Get the integer place holder of the string value v of the type a + * + * @param t the type + * @param v the value + * @return the integer place holder of v + */ + final public int getValue(String t, String v) { + + if (m_featureSets.get(t)==null) return -1; + Integer vi = m_featureSets.get(t).get(v); + if (vi==null) return -1; //stop && + return vi.intValue(); + } + + /** + * Static version of getValue + * @see getValue + */ + static final public int getValueS(String a, String v) { + + if (m_featureSets.get(a)==null) return -1; + Integer vi = m_featureSets.get(a).get(v); + if (vi==null) return -1; //stop && + return vi.intValue(); + } + + public int hasValue(String a, String v) { + + Integer vi = m_featureSets.get(a).get(v); + if (vi==null) return -1; + return vi.intValue(); + } + + + + + final public long calc2(Data4 d) { + + if (d.v0<0||d.v1<0) return -1; + // if (d.v1<0||d.v2<0) return -1; + + long l = d.v0; + short shift =d.a0; + l |= (long)d.v1<<shift; + shift +=d.a1; + // l |= (long)d.v2<<shift; + d.shift=shift; + + //d.shift=; + return l; + } + + + + final public long calc3(Data4 d) { + + if (d.v0<0||d.v1<0||d.v2<0) return -1; + // if (d.v1<0||d.v2<0) return -1; + + long l = d.v0; + short shift =d.a0; + l |= (long)d.v1<<shift; + shift +=d.a1; + l |= (long)d.v2<<shift; + d.shift=shift + d.a2; + + //d.shift=; + return l; + } + + + final public long calc4(Data4 d) { + if (d.v0<0||d.v1<0||d.v2<0||d.v3<0) return -1; + + long l = d.v0; + int shift =d.a0; + l |= (long)d.v1<<shift; + shift +=d.a1; + l |= (long)d.v2<<shift; + shift +=d.a2; + l |= (long)d.v3<<shift; + d.shift= shift +d.a3; + + return l; + } + + + + final public long calc5(Data4 d) { + + if (d.v0<0||d.v1<0||d.v2<0||d.v3<0||d.v4<0) return -1; + + long l = d.v0; + int shift =d.a0; + l |= (long)d.v1<<shift; + shift +=d.a1; + l |= (long)d.v2<<shift; + shift +=d.a2; + l |= (long)d.v3<<shift; + shift +=d.a3; + l |= (long)d.v4<<shift; + d.shift =shift+d.a4; + + return l; + } + + + final public long calc6(Data4 d) { + + if (d.v0<0||d.v1<0||d.v2<0||d.v3<0||d.v4<0||d.v5<0) return -1; + + long l = d.v0; + int shift =d.a0; + l |= (long)d.v1<<shift; + shift +=d.a1; + l |= (long)d.v2<<shift; + shift +=d.a2; + l |= (long)d.v3<<shift; + shift +=d.a3; + l |= (long)d.v4<<shift; + shift +=d.a4; + l |= (long)d.v5<<shift; + d.shift =shift+d.a5; + + return l; + } + + final public long calc7(Data4 d) { + + if (d.v0<0||d.v1<0||d.v2<0||d.v3<0||d.v4<0||d.v5<0||d.v6<0) return -1; + + long l = d.v0; + int shift =d.a0; + l |= (long)d.v1<<shift; + shift +=d.a1; + l |= (long)d.v2<<shift; + shift +=d.a2; + l |= (long)d.v3<<shift; + shift +=d.a3; + l |= (long)d.v4<<shift; + shift +=d.a4; + l |= (long)d.v5<<shift; + shift +=d.a5; + l |= (long)d.v6<<shift; + d.shift =shift+d.a6; + + return l; + } + + + final public long calc8(Data4 d) { + + if (d.v0<0||d.v1<0||d.v2<0||d.v3<0||d.v4<0||d.v5<0||d.v6<0||d.v7<0) return -1; + + long l = d.v0; + int shift =d.a0; + l |= (long)d.v1<<shift; + shift +=d.a1; + l |= (long)d.v2<<shift; + shift +=d.a2; + l |= (long)d.v3<<shift; + shift +=d.a3; + l |= (long)d.v4<<shift; + shift +=d.a4; + l |= (long)d.v5<<shift; + shift +=d.a5; + l |= (long)d.v6<<shift; + shift +=d.a6; + l |= (long)d.v7<<shift; + d.shift =shift+d.a7; + + return l; + } + + + + + + + + /** + * Maps a long to a integer value. This is very useful to save memory for sparse data long values + * @param node + * @return the integer + */ + static public int misses = 0; + static public int good = 0; + + + + + /** + * Write the data + * @param dos + * @throws IOException + */ + static public void writeData(DataOutputStream dos) throws IOException { + + dos.writeInt(getFeatureSet().size()); + for(Entry<String, HashMap<String,Integer>> e : getFeatureSet().entrySet()) { + dos.writeUTF(e.getKey()); + dos.writeInt(e.getValue().size()); + + for(Entry<String,Integer> e2 : e.getValue().entrySet()) { + + if(e2.getKey()==null) DB.println("key "+e2.getKey()+" value "+e2.getValue()+" e -key "+e.getKey()); + dos.writeUTF(e2.getKey()); + dos.writeInt(e2.getValue()); + } + } + } + public void read(DataInputStream din) throws IOException { + + int size = din.readInt(); + for(int i=0; i<size;i++) { + String k = din.readUTF(); + int size2 = din.readInt(); + + HashMap<String,Integer> h = new HashMap<String,Integer>(); + getFeatureSet().put(k,h); + for(int j = 0;j<size2;j++) { + h.put(din.readUTF(), din.readInt()); + } + getFeatureCounter().put(k, size2); + } + + calculateBits(); + } + + + /** + * Clear the data + */ + static public void clearData() { + getFeatureSet().clear(); + m_featureBits.clear(); + getFeatureSet().clear(); + } + + public HashMap<String,Integer> getFeatureCounter() { + return m_featureCounters; + } + + static public HashMap<String,HashMap<String,Integer>> getFeatureSet() { + return m_featureSets; + } + + static public String[] reverse(HashMap<String,Integer> v){ + String[] set = new String[v.size()]; + for(Entry<String,Integer> e : v.entrySet()) { + set[e.getValue()]=e.getKey(); + } + return set; + } + +} diff --git a/dependencyParser/basic/mate-tools/src/is2/mtag/Options.java b/dependencyParser/basic/mate-tools/src/is2/mtag/Options.java new file mode 100755 index 0000000..6b9d806 --- /dev/null +++ b/dependencyParser/basic/mate-tools/src/is2/mtag/Options.java @@ -0,0 +1,45 @@ +package is2.mtag; + +import is2.util.OptionsSuper; + +public final class Options extends OptionsSuper { + + + public Options (String[] args) { + + for(int i = 0; i < args.length; i++) { + + if (args[i].equals("--help")) explain(); + + if (args[i].equals("-nonormalize")) { + normalize=false; + } else if (args[i].equals("-features")) { + features= args[i+1]; i++; + } else if (args[i].equals("-hsize")) { + hsize= Integer.parseInt(args[i+1]); i++; + } else if (args[i].equals("-len")) { + maxLen= Integer.parseInt(args[i+1]); i++; + } else super.addOption(args, i); + } + } + + private void explain() { + System.out.println("Usage: "); + System.out.println("java -cp anna.jar is2.mtag.Tagger [Options]"); + System.out.println(); + System.out.println("Example: "); + System.out.println(" java -cp mate.jar is2.mtag.Tagger -model eps3.model -train corpora/conll08st/train/train.closed -test corpora/conll08st/devel/devel.closed -out b3.test -eval corpora/conll08st/devel/devel.closed -count 2000 -i 6"); + System.out.println(""); + System.out.println("Options:"); + System.out.println(""); + System.out.println(" -train <file> the corpus a model is trained on; default "+this.trainfile); + System.out.println(" -test <file> the input corpus for testing; default "+this.testfile); + System.out.println(" -out <file> the output corpus (result) of a test run; default "+this.outfile); + System.out.println(" -model <file> the parsing model for traing the model is stored in the files"); + System.out.println(" and for parsing the model is load from this file; default "+this.modelName); + System.out.println(" -i <number> the number of training iterations; good numbers are 10 for smaller corpora and 6 for bigger; default "+this.numIters); + System.out.println(" -count <number> the n first sentences of the corpus are take for the training default "+this.count); + + System.exit(0); + } +} diff --git a/dependencyParser/basic/mate-tools/src/is2/mtag/Pipe.java b/dependencyParser/basic/mate-tools/src/is2/mtag/Pipe.java new file mode 100755 index 0000000..b25b953 --- /dev/null +++ b/dependencyParser/basic/mate-tools/src/is2/mtag/Pipe.java @@ -0,0 +1,508 @@ +package is2.mtag; + + +import is2.data.Cluster; +import is2.data.F2SF; +import is2.data.Instances; +import is2.data.InstancesTagger; +import is2.data.Long2Int; +import is2.data.Long2IntInterface; +import is2.data.ParametersFloat; +import is2.data.PipeGen; +import is2.data.SentenceData09; +import is2.io.CONLLReader09; +import is2.tools.IPipe; +import is2.util.OptionsSuper; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Map.Entry; + + +final public class Pipe extends PipeGen implements IPipe { + + public static int _CEND; + + + private static final String STWRD = "STWRD",STPOS = "STPOS",END = "END",STR = "STR"; + + public String[] types; + + Cluster cl; + + final public MFO mf =new MFO(); + public Long2IntInterface li; + + + + final MFO.Data4 d1 = new MFO.Data4(),d2 = new MFO.Data4(),d3 = new MFO.Data4(),dw = new MFO.Data4(); + final MFO.Data4 dwp = new MFO.Data4(),dp = new MFO.Data4(); + + + private OptionsSuper options; + private int _ewrd; + static private int _mid, _strp,_endp; + + public Pipe (Options options, Long2Int long2Int) throws IOException { + this.options = options; + + li =long2Int; + } + + public Pipe (OptionsSuper options) { + this.options = options; + } + + + public HashMap<Integer,Integer> form2morph = new HashMap<Integer, Integer> (); + + + public Instances createInstances(String file) { + + CONLLReader09 depReader = new CONLLReader09(CONLLReader09.NO_NORMALIZE); + + depReader.startReading(file); + mf.register(POS,"<root-POS>"); + + mf.register(FEAT, CONLLReader09.NO_TYPE); + mf.register(FEAT, ""); + + InstancesTagger is = new InstancesTagger(); + + System.out.println("Registering feature parts "); + + HashMap<String,HashSet<String>> op2form = new HashMap<String, HashSet<String>> (); + HashMap<String,Integer> freq = new HashMap<String, Integer> (); + + + int ic=0; + while(true) { + SentenceData09 instance1 = depReader.getNext(); + if (instance1== null) break; + ic++; + + + String[] w = instance1.forms; + for(int i1 = 0; i1 < w.length; i1++) mf.register(WORD, w[i1]); + for(int i1 = 0; i1 < w.length; i1++) registerChars(CHAR, w[i1]); + for(int i1 = 0; i1 < w.length; i1++) { + mf.register(WORD, w[i1].toLowerCase()); + Integer f = freq.get(w[i1].toLowerCase()); + if (f==null) freq.put(w[i1].toLowerCase(), 1); + else freq.put(w[i1].toLowerCase(), f+1); + + HashSet<String> forms = op2form.get(w[i1].toLowerCase()); + if (forms==null) { + forms = new HashSet<String>(); + op2form.put(w[i1].toLowerCase(), forms); + } + forms.add(instance1.ofeats[i1]==null?"_":instance1.ofeats[i1]); + } + for(int i1 = 0; i1 < w.length; i1++) registerChars(CHAR, w[i1].toLowerCase()); + + w = instance1.plemmas; + for(int i1 = 0; i1 < w.length; i1++) mf.register(WORD, w[i1]); + for(int i1 = 0; i1 < w.length; i1++) registerChars(CHAR, w[i1]); + + w = instance1.ppos; + for(int i1 = 0; i1 < w.length; i1++) mf.register(POS, w[i1]); + + w = instance1.gpos; + for(int i1 = 0; i1 < w.length; i1++) mf.register(POS, w[i1]); + + w = instance1.ofeats; + for(int i1 = 0; i1 < w.length; i1++) if (w[i1]!=null) mf.register(FEAT, w[i1]); + + // w = instance1.pfeats; + //for(int i1 = 0; i1 < w.length; i1++) if (w[i1]!=null) mf.register(FEAT, w[i1]); + } + + + for(Entry<String,HashSet<String>> e : op2form.entrySet()) { + if (e.getValue().size()==1 &&freq.get(e.getKey())>10) { + // System.out.println("found map "+e.getKey()+" "+e.getValue()+" "+freq.get(e.getKey())); + form2morph.put(mf.getValue(Pipe.WORD, e.getKey()), mf.getValue(FEAT, (String)e.getValue().toArray()[0])); + } + } + + initFeatures(); + + mf.calculateBits(); + initValues(); + + System.out.println(""+mf.toString()); + + depReader.startReading(file); + + int num1 = 0; + long start1 = System.currentTimeMillis(); + + System.out.print("Creating Features: "); + is.init(ic, mf) ; + int del=0; + + while(true) { + if (num1 % 100 ==0) {del = outValue(num1, del);} + SentenceData09 instance1 = depReader.getNext(is); + if (instance1== null) break; + + if (num1>options.count) break; + + num1++; + } + long end1 = System.currentTimeMillis(); + System.gc(); + long mem2 = Runtime.getRuntime().totalMemory() - Runtime.getRuntime().freeMemory(); + System.out.print(" time "+(end1-start1)+" mem "+(mem2/1024)+" kb"); + + types = new String[mf.getFeatureCounter().get(FEAT)]; + + for(Entry<String,Integer> e : mf.getFeatureSet().get(FEAT).entrySet()) { + types[e.getValue()] = e.getKey(); + } + + + if (options.clusterFile==null)cl = new Cluster(); + else cl= new Cluster(options.clusterFile, mf,6); + + + System.out.println("Num Features: " + types.length); + + + + depReader.startReading(file); + + + + int num11=0; + + while(true) { + + SentenceData09 instance = depReader.getNext(); + if (instance==null) break; + + is.fillChars(instance, num11, _CEND); + + + if (num11>options.count) break; + + num11++; + } + + return is;//.toNativeArray(); + + } + + private void registerChars(String type, String word) { + for(int i=0;i<word.length();i++) mf.register(type, Character.toString(word.charAt(i))); + } + + + + public void initValues() { + s_feat = mf.getFeatureBits(FEAT); + s_word = mf.getFeatureBits(WORD); + s_type = mf.getFeatureBits(TYPE); + s_char = mf.getFeatureBits(CHAR); + s_pos =mf.getFeatureBits(POS); + // dl1.a[0] = s_type; dl1.a[1] = s_pos; + // for (int k = 2; k < 7; k++) dl1.a[k] = s_pos; + + d1.a0 = s_type; d1.a1 = s_feat; d1.a2= s_word; + d2.a0 = s_type; d2.a1 = s_feat; d2.a2= s_feat; d2.a3= s_feat; d2.a4= s_feat; d2.a5= s_feat; d2.a6= s_feat; + d3.a0 = s_type; d3.a1 = s_feat; d3.a2= s_char; d3.a3= s_char; d3.a4= s_char; d3.a5= s_char; d3.a6= s_char; d3.a7= s_char; + dp.a0 = s_type; dp.a1 = s_feat; dp.a2= s_pos; dp.a3= s_pos; dp.a4= s_feat;// dp.a5= s_char; dp.a6= s_char; dp.a7= s_char; + dw.a0 = s_type; dw.a1 = s_feat;dw.a2= s_word; dw.a3= s_word; dw.a4= s_word; dw.a5= s_word; dw.a6= s_word; dw.a7= s_word; + dwp.a0 = s_type; dwp.a1 = s_feat;dwp.a2= s_word ; dwp.a3= s_feat; dwp.a4= s_word; + + } + + public static short s_feat,s_word,s_type,s_dir,s_dist,s_char,s_pos; + + + + /** + * Initialize the features types. + */ + public void initFeatures() { + + for(int t=0;t<62;t++) { + mf.register(TYPE,"F"+t); + } + + +// _mid = mf.register(POS, MID); + _strp = mf.register(POS, STR); + _endp= mf.register(POS, END); + + mf.register(WORD, STR); + _ewrd = mf.register(WORD, END); + + + _CEND = mf.register(CHAR, END); + + + + + // optional features + mf.register(WORD,STWRD); + mf.register(POS,STPOS); + + + } + + + final public void addCF(InstancesTagger is, int ic, String fs,int i, int pfeat[],short ppos[], int[] forms, int[] lemmas, long[] vs) { + + int c0= is.chars[ic][i][0], c1=is.chars[ic][i][1], c2=is.chars[ic][i][2], c3=is.chars[ic][i][3], c4=is.chars[ic][i][4],c5=is.chars[ic][i][5]; + int e0 =is.chars[ic][i][6], e1 =is.chars[ic][i][7],e2 =is.chars[ic][i][8],e3 =is.chars[ic][i][9],e4 =is.chars[ic][i][10]; + + int f=1,n=0; + short upper =0, number = 1; + for(int k1=0;k1<fs.length();k1++){ + char c = fs.charAt(k1); + if (Character.isUpperCase(c)) { + if (k1==0) upper=1; + else { + // first char + another + if (upper==1) upper=3; + // another uppercase in the word + else if (upper==0) upper=2; + } + } + + if (Character.isDigit(c) && k1==0) number =2 ; + else if (Character.isDigit(c) && number==1) number = 3; + } + + int form = forms[i]; + + int len = forms.length; + long l; + d1.v0 = f++; d1.v2=form; l=mf.calc3(d1); vs[n++]=mf.calc3(d1); + + d1.v0 = f++; d1.v2=is.formlc[ic][i]; vs[n++]=mf.calc3(d1); + + d3.v2=c0; d3.v3=c1; d3.v4=c2; d3.v5=c3; d3.v6=c4; + d3.v0=f++; vs[n++]=mf.calc3(d3); + d3.v0=f++; vs[n++]=mf.calc4(d3); + d3.v0=f++; vs[n++]=mf.calc5(d3); + d3.v0=f++; vs[n++]=mf.calc6(d3); + d3.v0=f++; vs[n++]=mf.calc7(d3); + + if (form!=-1) { + d3.v2=c2; d3.v3=c3; d3.v4=c4; d3.v5=c5; d3.v6=cl.getLP(form); + d3.v0=f; vs[n++]=mf.calc6(d3); d3.v0=f+1; vs[n++]=mf.calc7(d3); + } + f+=2; + + if (form>0) { + d3.v0=f; d3.v5=cl.getLP(form); vs[n++]=mf.calc6(d3); + d3.v0=f+1; d3.v4=cl.getLP(form); vs[n++]=mf.calc5(d3); + d3.v0=f+2; d3.v3=cl.getLP(form); vs[n++]=mf.calc4(d3); + } + f+=3; + + d3.v2=e0; d3.v3=e1; d3.v4=e2; d3.v5=e3; d3.v6=e4; + d3.v0 =f++; vs[n++]=mf.calc3(d3); + d3.v0 =f++; vs[n++]=l=mf.calc4(d3); vs[n++]=d3.calcs(3, upper, l); + d3.v0 =f++; vs[n++]=l=mf.calc5(d3); vs[n++]=d3.calcs(3, upper, l); + d3.v0 =f++; vs[n++]=l=mf.calc6(d3); vs[n++]=d3.calcs(3, upper, l); + d3.v0 =f++; vs[n++]=l=mf.calc7(d3); vs[n++]=d3.calcs(3, upper, l); + + if (form>0) { + d3.v0=f; d3.v5=cl.getLP(form); vs[n++]=mf.calc6(d3); + d3.v0=f+1; d3.v4=cl.getLP(form); vs[n++]=mf.calc5(d3); + d3.v0=f+2; d3.v3=cl.getLP(form); vs[n++]=mf.calc4(d3); + } + f+=3; + + + dw.v0=f++; dw.v2=i+1<len?forms[i+1]:_ewrd;dw.v3= forms[i];vs[n++]=mf.calc4(dw); + + if (len>i+1) { + + dw.v0=f; dw.v2= forms[i+1]; vs[n++]=mf.calc3(dw); + d3.v0=f+1; d3.v2 =is.chars[ic][i+1][0];vs[n++]=mf.calc3(d3); + d3.v0=f+2; d3.v2 =is.chars[ic][i+1][6];vs[n++]=mf.calc3(d3); + + d3.v2=e0; d3.v3=e1; + + d3.v0 =f+3; d3.v4 =is.chars[ic][i+1][0];vs[n++]=mf.calc5(d3); + d3.v0 =f+4; d3.v4 =is.chars[ic][i+1][6];vs[n++]=mf.calc5(d3); + + + + if (is.chars[ic][i+1][11]>1 ) { // instance.forms[i+1].length() + + d3.v0=f+5; d3.v2=is.chars[ic][i+1][0]; d3.v3=is.chars[ic][i+1][1]; vs[n++]=mf.calc4(d3); + d3.v0=f+6; d3.v2=is.chars[ic][i+1][6]; d3.v3=is.chars[ic][i+1][7]; vs[n++]=mf.calc4(d3); + + d3.v2=e0; d3.v3=e1; + + d3.v0=f+7; d3.v4 = is.chars[ic][i+1][0]; d3.v5 =is.chars[ic][i+1][1]; vs[n++]=mf.calc6(d3); + d3.v0=f+8; d3.v4 = is.chars[ic][i+1][6]; d3.v5=is.chars[ic][i+1][7]; vs[n++]=mf.calc6(d3); + + if (forms[i+1]>0) { + d3.v0=f+9; d3.v2=is.chars[ic][i+1][0]; d3.v3=is.chars[ic][i+1][1]; d3.v4 =cl.getLP(forms[i+1]); vs[n++]=mf.calc5(d3); + d3.v0=f+10; d3.v2=is.chars[ic][i+1][6]; d3.v3=is.chars[ic][i+1][7]; d3.v4 =cl.getLP(forms[i+1]); vs[n++]=mf.calc5(d3); + } + } + + if (forms[i+1]>0) { + dw.v0=f+11; dw.v2= cl.getLP(forms[i+1]); dw.v3= forms[i];vs[n++]=mf.calc4(dw); + } + + if (len>i+2) { + dw.v0=f+12; dw.v2= forms[i+2]; dw.v3 = forms[i+1];vs[n++]=mf.calc4(dw);vs[n++]=mf.calc3(dw); +// d2.v0=f+13; d2.v2=pfeat[i+1]; d2.v3= pfeat[i+2]; vs[n++]=mf.calc4(d2); + // dp.v0= f+14; dp.v2=ppos[i+1]; dp.v3=ppos[i+2]; vs[n++]=mf.calc4(dp); + + } + + if (len>i+3) { + dw.v0=f+14; dw.v2= forms[i+3]; dw.v3 = forms[i+2]; vs[n++]=mf.calc4(dw); vs[n++]=mf.calc3(dw); + + } + } + f+=16; + + // length + d2.v0=f++; d2.v2=is.chars[ic][i][11];vs[n++]=mf.calc3(d2); + + + // contains a number + d2.v0=f++; d2.v2=number; vs[n++]=mf.calc3(d2); + d1.v0=f++; d1.v2=lemmas[i]; vs[n++]=mf.calc3(d1); + + if (i!=0 &&len>i+1) { + dw.v0=f; dw.v2=lemmas[i-1];dw.v3=lemmas[i+1];vs[n++]=mf.calc4(dw); + d2.v0=f+1; d2.v2=pfeat[i-1]; d2.v3=pfeat[i+1];vs[n++]=mf.calc4(d2); + } + f+=2; + + d2.v0= f++; d2.v2=i>=1? pfeat[i-1]:_strp; vs[n++]=mf.calc3(d2); + dp.v0= f++; dp.v2=ppos[i]; vs[n++]=mf.calc3(dp); + + if (i>0) { + dw.v0 = f++; dw.v2 =i>=1? forms[i-1]:_strp; vs[n++]=mf.calc3(dw); + dw.v0 = f++; dw.v2 = i>=1? lemmas[i-1]:_strp; vs[n++]=mf.calc3(dw); + + if (len>i+1) { +// d2.v0=f; d2.v2= pfeat[i-1];d2.v3= pfeat[i+1]; vs[n++]=mf.calc4(d2); + // dp.v0= f+1; dp.v2=ppos[i-1]; dp.v3=ppos[i+1]; vs[n++]=mf.calc4(dp); + + } + f++; + dp.v0= f++; dp.v2=ppos[i]; dp.v3=ppos[i-1]; vs[n++]=mf.calc4(dp); + + if (i>1) { + d2.v0=f++; d2.v2=i<2?_strp: pfeat[i-2]; vs[n++]=mf.calc3(d2); + d2.v0=f++; d2.v2= pfeat[i-1]; d2.v3= pfeat[i-2]; vs[n++]=mf.calc4(d2); + + dw.v0=f++; dw.v2= forms[i-2]; vs[n++]=mf.calc3(dw); + dwp.v0=f++; dwp.v2 = forms[i-1]; dwp.v3 = pfeat[i-2];vs[n++]=mf.calc4(dwp); + dwp.v0=f++; dwp.v2 = forms[i-2]; dwp.v3 = pfeat[i-1];vs[n++]=mf.calc4(dwp); + + if (i>2) { + d2.v0=f++; d2.v2=pfeat[i-3]; vs[n++]=mf.calc3(d2); + d2.v0=f++; d2.v2=pfeat[i-2]; d2.v3= pfeat[i-3]; vs[n++]=mf.calc4(d2); + dw.v0=f++; dw.v2 = forms[i-3]; dw.v3 = forms[i-2]; vs[n++]=mf.calc4(dw); + // dp.v0= f++; dp.v2=ppos[i-3]; dp.v3=ppos[i-2]; vs[n++]=mf.calc4(dp); + } + } + } + vs[n] = Integer.MIN_VALUE; + } + + + + + + + + public int fillFeatureVectorsOne(ParametersFloat params, int w1, String form, Instances is, int n, int[] features, long[] vs) { + double best = -1; + int bestType=-1; + + F2SF f = new F2SF(params.parameters); + //is.gfeats[n] + addCF((InstancesTagger)is, n, form, w1, features,is.pposs[n], is.forms[n], is.plemmas[n], vs); + + for(int t = 0; t < types.length; t++) { + + f.clear(); + int p = t<<Pipe.s_type; + for(int k=vs.length-1;k>=0;k--) if (vs[k]>=0) f.add(li.l2i(vs[k]+p)); + if (f.score >best) { + bestType=t; + best =f.score; + } + + } + return bestType; + + } + + + + //static ArrayList<T> todo = new ArrayList<T>(); + static SentenceData09 instance; + + + public static int _FC =200; + + + /** + * Write the lemma that are not mapped by operations + * @param dos + */ + public void writeMap(DataOutputStream dos) { + + try { + dos.writeInt(this.form2morph.size()); + for(Entry<Integer, Integer> e : form2morph.entrySet()) { + dos.writeInt(e.getKey()); + dos.writeInt(e.getValue()); + } + } catch (IOException e1) { + e1.printStackTrace(); + } + } + + + + /** + * Read the form-lemma mapping not read by operations + * @param dis + */ + public void readMap(DataInputStream dis) { + try { + int size = dis.readInt(); + for(int i =0; i<size;i++) { + form2morph.put(dis.readInt(), dis.readInt()); + } + } catch (IOException e1) { + e1.printStackTrace(); + } + } + + + /* (non-Javadoc) + * @see is2.tools.IPipe#write(java.io.DataOutputStream) + */ + @Override + public void write(DataOutputStream dos) { + try { + cl.write(dos); + writeMap(dos); + } catch (IOException e) { + e.printStackTrace(); + } + } + + +} diff --git a/dependencyParser/basic/mate-tools/src/is2/mtag/Tagger.java b/dependencyParser/basic/mate-tools/src/is2/mtag/Tagger.java new file mode 100644 index 0000000..da31a5b --- /dev/null +++ b/dependencyParser/basic/mate-tools/src/is2/mtag/Tagger.java @@ -0,0 +1,371 @@ +package is2.mtag; + + +import is2.data.Cluster; +import is2.data.FV; +import is2.data.Instances; +import is2.data.InstancesTagger; +import is2.data.Long2Int; +import is2.data.ParametersFloat; +import is2.data.PipeGen; +import is2.data.SentenceData09; +import is2.io.CONLLReader09; +import is2.io.CONLLWriter09; +import is2.tools.IPipe; +import is2.tools.Train; +import is2.tools.Tool; +import is2.util.DB; +import is2.util.OptionsSuper; + +import java.io.BufferedInputStream; +import java.io.BufferedOutputStream; +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.FileOutputStream; +import java.io.IOException; +import java.util.Map.Entry; +import java.util.zip.ZipEntry; +import java.util.zip.ZipInputStream; +import java.util.zip.ZipOutputStream; + + +public class Tagger implements Tool, Train { + + ExtractorM pipe; + ParametersFloat params; + + + /** + * Initialize + * @param options + */ + public Tagger (Options options) { + + // load the model + try { + readModel(options); + } catch (Exception e) { + e.printStackTrace(); + } + + } + + /** + * @param string + * @throws IOException + */ + public Tagger(String modelFileName) { + this(new Options(new String[] {"-model",modelFileName})); + } + + public Tagger() { } + + public static void main (String[] args) throws FileNotFoundException, Exception + { + + Options options = new Options(args); + + Tagger tagger = new Tagger(); + + if (options.train) { + + Long2Int li = new Long2Int(options.hsize); + tagger.pipe = new ExtractorM (options,li); + InstancesTagger is = (InstancesTagger)tagger.pipe.createInstances(options.trainfile); + ParametersFloat params = new ParametersFloat(li.size()); + + tagger.train(options, tagger.pipe,params,is); + tagger.writeModel(options, tagger.pipe, params); + } + + if (options.test) { + + tagger.readModel(options); + tagger.out(options,tagger.pipe, tagger.params); + } + + if (options.eval) { + + System.out.println("\nEvaluate:"); + Evaluator.evaluate(options.goldfile, options.outfile,options.format); + } + } + + /* (non-Javadoc) + * @see is2.mtag2.Learn#writeModel(is2.mtag2.Options, is2.mtag2.Pipe, is2.data.ParametersFloat) + */ + public void writeModel(OptionsSuper options, IPipe pipe,ParametersFloat params) { + + try { + ZipOutputStream zos = new ZipOutputStream(new BufferedOutputStream(new FileOutputStream(options.modelName))); + zos.putNextEntry(new ZipEntry("data")); + DataOutputStream dos = new DataOutputStream(new BufferedOutputStream(zos)); + + MFO.writeData(dos); + + MFO.clearData(); + + DB.println("number of parameters "+params.parameters.length); + dos.flush(); + params.write(dos); + pipe.write(dos); + dos.flush(); + dos.close(); + } catch (Exception e){ + e.printStackTrace(); + } + } + + /* (non-Javadoc) + * @see is2.mtag2.Learn#readModel(is2.mtag2.Options) + */ + public void readModel(OptionsSuper options) { + + try { + pipe = new ExtractorM(options); + params = new ParametersFloat(0); + + // load the model + ZipInputStream zis = new ZipInputStream(new BufferedInputStream(new FileInputStream(options.modelName))); + zis.getNextEntry(); + DataInputStream dis = new DataInputStream(new BufferedInputStream(zis)); + pipe.mf.read(dis); + pipe.initValues(); + pipe.initFeatures(); + + params.read(dis); + pipe.li = new Long2Int(params.parameters.length); + pipe.cl = new Cluster(dis); + pipe.readMap(dis); + dis.close(); + + this.pipe.types = new String[pipe.mf.getFeatureCounter().get(ExtractorM.FFEATS)]; + for(Entry<String,Integer> e :pipe.mf.getFeatureSet().get(ExtractorM.FFEATS).entrySet()) + this.pipe.types[e.getValue()] = e.getKey(); + + + DB.println("Loading data finished. "); + + DB.println("number of parameter "+params.parameters.length); + DB.println("number of classes "+this.pipe.types.length); + } catch(Exception e) { + e.printStackTrace(); + } + } + + /* (non-Javadoc) + * @see is2.mtag2.Learn#train(is2.mtag2.Options, is2.mtag2.Pipe, is2.data.ParametersFloat, is2.data.InstancesTagger) + */ + public void train(OptionsSuper options, IPipe pipe, ParametersFloat params, Instances is) { + + int i = 0; + int del=0; + + String[] wds = this.pipe.mf.reverse(this.pipe.mf.getFeatureSet().get(ExtractorM.WORD)); + int numInstances = is.size(); + + float upd = (options.numIters*numInstances + 1); + + + for(i = 0; i < options.numIters; i++) { + + long start = System.currentTimeMillis(); + + + long last= System.currentTimeMillis(); + + FV pred = new FV(), gold = new FV(); + int correct =0,count=0; + + for(int n = 0; n < numInstances; n++) { + + upd--; + + if((n+1) % 500 == 0) del= PipeGen.outValueErr(n+1, (count-correct),(float)correct/(float)count,del,last,upd); + + int length = is.length(n); + + int feats[] = new int[length]; + long[] vs = new long[ExtractorM._FC]; + + + for(int w1 = 0; w1 < length; w1++) { + + + count++; + + if (this.pipe.form2morph.get(is.forms[n][w1])!=null){ + correct++; + continue; + } + + int bestType = this.pipe.fillFeatureVectorsOne(params, w1, wds[is.forms[n][w1]],is, n, is.gfeats[n],vs); + feats[w1]=bestType; + + + if (bestType == is.gfeats[n][w1] ) { + correct++; + continue; + } + + pred.clear(); + int p = bestType << ExtractorM.s_type; + // System.out.println("test type "+bestType+" ex type "+ExtractorM.s_type); + for(int k=0;k<vs.length;k++) { + if (vs[k]==Integer.MIN_VALUE) break; + if (vs[k]>=0) pred.add(this.pipe.li.l2i(vs[k]+p)); + } + + gold.clear(); + p = is.gfeats[n][w1] << ExtractorM.s_type; + for(int k=0;k<vs.length;k++) { + if (vs[k]==Integer.MIN_VALUE) break; + if (vs[k]>=0) gold.add(this.pipe.li.l2i(vs[k]+p)); + } + params.update(pred,gold, (float)upd, 1.0f); + } + + } + + long end = System.currentTimeMillis(); + String info = "time "+(end-start); + del= PipeGen.outValueErr(numInstances, (count-correct),(float)correct/(float)count,del,last,0,info); + + System.out.println(); + } + + params.average(i*is.size()); + + } + + + public void out (OptionsSuper options, IPipe pipe, ParametersFloat params) { + + + try { + long start = System.currentTimeMillis(); + + CONLLReader09 depReader = new CONLLReader09(options.testfile, options.formatTask); + CONLLWriter09 depWriter = new CONLLWriter09(options.outfile, options.formatTask); + + depReader.normalizeOn=false; + + System.out.print("Processing Sentence: "); + pipe.initValues(); + + int cnt = 0; + int del=0; + while(true) { + + InstancesTagger is = new InstancesTagger(); + is.init(1, this.pipe.mf); + cnt++; + + SentenceData09 instance = depReader.getNext(is); + if (instance == null || instance.forms == null) break; + is.fillChars(instance, 0, ExtractorM._CEND); + + instance = exec(instance, this.pipe, params,(InstancesTagger)is); + + SentenceData09 i09 = new SentenceData09(instance); + i09.createSemantic(instance); + + if (options.overwritegold) i09.ofeats = i09.pfeats; + + depWriter.write(i09); + + if (cnt%100==0) del=PipeGen.outValue(cnt, del); + + } + depWriter.finishWriting(); + + del=PipeGen.outValue(cnt, del); + + long end = System.currentTimeMillis(); + System.out.println(PipeGen.getSecondsPerInstnace(cnt,(end-start))); + System.out.println(PipeGen.getUsedTime((end-start))); + } catch(Exception e){ + e.printStackTrace(); + } + } + + + private SentenceData09 exec(SentenceData09 instance, ExtractorM pipe, ParametersFloat params, InstancesTagger is) { + + int length = instance.ppos.length; + + short[] feats = new short[instance.gpos.length]; + + long vs[] = new long[ExtractorM._FC]; + + String[] forms = instance.forms; + + instance.pfeats = new String[instance.gpos.length]; + + + for(int j = 0; j < length; j++) { + if (pipe.form2morph.get(is.forms[0][j])!=null) { + feats[j] = (short)pipe.form2morph.get(is.forms[0][j]).intValue(); + instance.pfeats[j] = this.pipe.types[feats[j]]; + } else { + + int bestType = pipe.fillFeatureVectorsOne(params,j, forms[j], is, 0,feats,vs); + feats[j] = (short)bestType; + instance.pfeats[j]= this.pipe.types[bestType]; + } + } + for(int j = 0; j < length; j++) { + if (pipe.form2morph.get(is.forms[0][j])!=null) { + feats[j] =(short)pipe.form2morph.get(is.forms[0][j]).intValue(); + instance.pfeats[j] = this.pipe.types[feats[j]]; + } else { + + int bestType = pipe.fillFeatureVectorsOne(params,j, forms[j], is, 0,feats,vs); + feats[j] = (short)bestType; + instance.pfeats[j]= this.pipe.types[bestType]; + } + } + return instance; + } + + + + /* (non-Javadoc) + * @see is2.tools.Tool#apply(is2.data.SentenceData09) + */ + @Override + public SentenceData09 apply(SentenceData09 snt) { + + try { + SentenceData09 it = new SentenceData09(); + it.createWithRoot(snt); + + InstancesTagger is = new InstancesTagger(); + is.init(1, pipe.mf); + is.createInstance09(it.forms.length); + + String[] forms = it.forms; + + + int length = forms.length; + + // is.setForm(0, 0, CONLLReader09.ROOT); + for(int i=0;i<length;i++) is.setForm(0, i, forms[i]); + for(int i=0;i<length;i++) is.setLemma(0, i, it.plemmas[i]); + for(int i=0;i<length;i++) is.setPPoss(0, i, it.ppos[i]); + + is.fillChars(it, 0, ExtractorM._CEND); + + exec(it,pipe,params,is); + SentenceData09 i09 = new SentenceData09(it); + i09.createSemantic(it); + return i09; + } catch(Exception e) { + e.printStackTrace(); + } + + return null; + } +} diff --git a/dependencyParser/basic/mate-tools/src/is2/parser/Closed.java b/dependencyParser/basic/mate-tools/src/is2/parser/Closed.java new file mode 100755 index 0000000..ed61657 --- /dev/null +++ b/dependencyParser/basic/mate-tools/src/is2/parser/Closed.java @@ -0,0 +1,32 @@ +package is2.parser; + +import is2.data.Parse; + + +final public class Closed { + + public float p; +// short b,e,m; + byte dir; + + Closed d; + Open u; + + public Closed(short s, short t, int m, int dir,Open u, Closed d, float score) { + // this.b = s; + // this.e = t; + // this.m = (short)m; + this.dir = (byte)dir; + this.u=u; + this.d =d; + p=score; + } + + + public void create(Parse parse) { + if (u != null) u.create(parse); + if (d != null) d.create(parse); + } +} + + diff --git a/dependencyParser/basic/mate-tools/src/is2/parser/D5.java b/dependencyParser/basic/mate-tools/src/is2/parser/D5.java new file mode 100644 index 0000000..58adc0a --- /dev/null +++ b/dependencyParser/basic/mate-tools/src/is2/parser/D5.java @@ -0,0 +1,254 @@ +/** + * + */ +package is2.parser; + +import is2.data.DX; + +import is2.data.IFV; +import is2.data.Long2IntInterface; + +/** + * @author Dr. Bernd Bohnet, 30.10.2010 + * + * + */ +final public class D5 extends DX { + + + + + public long shift; + private long h; + + + + + /* (non-Javadoc) + * @see is2.parser52L.DX#cz2() + */ + final public void cz2() { + + if (v0<0||v1<0) { + shift=0; + h=-1; + return ; + } + + h = v0 | v1<<(shift=a0); + shift +=a1; + + } + + + + /* (non-Javadoc) + * @see is2.parser52L.DX#cz3() + */ + final public void cz3() { + + if (v0<0||v1<0||v2<0) { + shift=0; + h=-1; + return ; + + } + + h = v0 | v1<<(shift=a0) | v2<<(shift +=a1); + shift= shift + a2; + + } + + + /* (non-Javadoc) + * @see is2.parser52L.DX#cz4() + */ + final public void cz4() { + if (v0<0||v1<0||v2<0||v3<0) { + shift=0; + h=-1; + return ; + } + + h = v0 | v1<<(shift=a0) | v2<<(shift +=a1) | v3<<(shift +=a2); + shift= shift +a3; + + } + + + + /* (non-Javadoc) + * @see is2.parser52L.DX#cz5() + */ + final public void cz5() { + + if (v0<0||v1<0||v2<0||v3<0||v4<0) { + shift=0; + h=-1; + return ; + } + + h = v0 | v1<<(shift=a0) | v2<<(shift +=a1) | v3<<(shift +=a2) | v4<<(shift +=a3); + shift =shift+a4; + + + } + + + /* (non-Javadoc) + * @see is2.parser52L.DX#cz6() + */ + final public void cz6() { + + if (v0<0||v1<0||v2<0||v3<0||v4<0||v5<0) { + shift=0; + h=-1; + return ; + } + + h = v0 | v1<<(shift=a0) | v2<<(shift +=a1) | v3<<(shift +=a2) | v4<<(shift +=a3) | v5<<(shift +=a4); + shift =shift+a5; + + } + + /* (non-Javadoc) + * @see is2.parser52L.DX#cz7() + */ + final public void cz7() { + + if (v0<0||v1<0||v2<0||v3<0||v4<0||v5<0||v6<0) { + shift=0; + h=-1; + return ; + } + + h = v0 | v1<<(shift=a0) | v2<<(shift +=a1) | v3<<(shift +=a2) | v4<<(shift +=a3) | v5<<(shift +=a4) | v6<<(shift +=a5); + shift =shift+a6; + + } + + + /* (non-Javadoc) + * @see is2.parser52L.DX#cz8() + */ + final public void cz8() { + + if (v0<0||v1<0||v2<0||v3<0||v4<0||v5<0||v6<0||v7<0) { + h=-1; + shift=0; + return ; + } + + h = v0 | v1<<(shift=a0) | v2<<(shift +=a1) | v3<<(shift +=a2) | v4<<(shift +=a3) | v5<<(shift +=a4) | v6<<(shift +=a5) | v7<<(shift +=a6); + shift =shift+a7; + + + } + + + + + + + /* (non-Javadoc) + * @see is2.parser52L.DX#clean() + */ + final public void clean() { + v0=0;v1=0;v2=0;v3=0;v4=0;v5=0;v6=0;v7=0;v8=0; + shift=0;h =0; + } + + public final Long2IntInterface _li; + public D5(Long2IntInterface li) { + _li=li; + } + + /* (non-Javadoc) + * @see is2.parser52L.DX#cs(int, int) + */ + final public long cs(int b, int v) { + if (h<0) { + h=-1; shift=0; + return -1; + } + + h |= (long)v<<shift; + shift +=b; + if (shift>64) { + System.out.println("shift too large "+shift); + new Exception().printStackTrace(); + } + + return h; + + } + /* (non-Javadoc) + * @see is2.parser52L.DX#csa(int, int) + */ + final public long csa(int b, int v) { + if (h<0) { + h=-1; shift=0; return -1; + } + + h |= (long)v<<shift; + shift +=b; + if (shift>64) { + System.out.println("shift too large "+shift); + new Exception().printStackTrace(); + } + + return h; + + } + + /* (non-Javadoc) + * @see is2.parser52L.DX#csa(int, int, is2.data.IFV) + */ + final public void csa(int b, int v, IFV f ) { + if (h<0) { + h=-1; shift=0; return; + } + + h |= (long)v<<shift; + shift +=b; + if (shift>64) { + System.out.println("shift too large "+shift); + new Exception().printStackTrace(); + } + + f.add((int)_li.l2i(h)); + } + + /* (non-Javadoc) + * @see is2.parser52L.DX#getVal() + */ + public long getVal() { + if (h<0) { + h=-1; shift=0; return h; + } + return h; + } + + /* (non-Javadoc) + * @see is2.parser52L.DX#map(is2.data.IFV, long) + */ + public void map(IFV f, long l) { + if (l>0) f.add(_li.l2i(l)); + } + + + + /* (non-Javadoc) + * @see is2.data.DX#computeLabeValue(short, short) + */ + @Override + public int computeLabeValue(int label, int shift) { + return label<<shift; + } + + public void fix() { + + } + + +} \ No newline at end of file diff --git a/dependencyParser/basic/mate-tools/src/is2/parser/Decoder.java b/dependencyParser/basic/mate-tools/src/is2/parser/Decoder.java new file mode 100755 index 0000000..9fe833a --- /dev/null +++ b/dependencyParser/basic/mate-tools/src/is2/parser/Decoder.java @@ -0,0 +1,161 @@ +package is2.parser; + +import java.util.ArrayList; +import java.util.concurrent.ExecutorService; + + +import is2.data.DataFES; +import is2.data.Parse; +import is2.util.DB; + + +/** + * @author Bernd Bohnet, 01.09.2009 + * + * This methods do the actual work and they build the dependency trees. + */ +final public class Decoder { + + public static final boolean TRAINING = true; + public static long timeDecotder; + public static long timeRearrange; + + /** + * Threshold for rearrange edges non-projective + */ + public static float NON_PROJECTIVITY_THRESHOLD = 0.3F; + + + static ExecutorService executerService =java.util.concurrent.Executors.newFixedThreadPool(Parser.THREADS); + + // do not initialize + private Decoder() {}; + + + /** + * Build a dependency tree based on the data + * @param pos part-of-speech tags + * @param x the data + * @param projective projective or non-projective + * @param edges the edges + * @return a parse tree + * @throws InterruptedException + */ + public static Parse decode(short[] pos, DataFES x, boolean projective, boolean training) throws InterruptedException { + + long ts = System.nanoTime(); + + if (executerService.isShutdown()) executerService = java.util.concurrent.Executors.newCachedThreadPool(); + final int n = pos.length; + + final Open O[][][][] = new Open[n][n][2][]; + final Closed C[][][][] = new Closed[n][n][2][]; + + ArrayList<ParallelDecoder> pe = new ArrayList<ParallelDecoder>(); + + for(int i=0;i<Parser.THREADS ;i++) pe.add(new ParallelDecoder(pos, x, O, C, n)); + + for (short k = 1; k < n; k++) { + + // provide the threads the data + for (short s = 0; s < n; s++) { + short t = (short) (s + k); + if (t >= n) break; + + ParallelDecoder.add(s,t); + } + + executerService.invokeAll(pe); + } + + float bestSpanScore = (-1.0F / 0.0F); + Closed bestSpan = null; + for (int m = 1; m < n; m++) + if (C[0][n - 1][1][m].p > bestSpanScore) { + bestSpanScore = C[0][n - 1][1][m].p; + bestSpan = C[0][n - 1][1][m]; + } + + // build the dependency tree from the chart + Parse out= new Parse(pos.length); + + bestSpan.create(out); + + out.heads[0]=-1; + out.labels[0]=0; + + timeDecotder += (System.nanoTime()-ts); + + ts = System.nanoTime(); + + if (!projective) rearrange(pos, out.heads, out.labels,x,training); + + timeRearrange += (System.nanoTime()-ts); + + return out; + } + + + /** + * This is the parallel non-projective edge re-arranger + * + * @param pos part-of-speech tags + * @param heads parent child relation + * @param labs edge labels + * @param x the data + * @param edges the existing edges defined by part-of-speech tags + * @throws InterruptedException + */ + public static void rearrange(short[] pos, short[] heads, short[] labs, DataFES x, boolean training) throws InterruptedException { + + int threads =(pos.length>Parser.THREADS)? Parser.THREADS: pos.length; + + + + // wh what to change, nPar - new parent, nType - new type + short wh = -1, nPar = -1,nType = -1; + ArrayList<ParallelRearrange> pe = new ArrayList<ParallelRearrange>(); + + while(true) { + boolean[][] isChild = new boolean[heads.length][heads.length]; + for(int i = 1, l1=1; i < heads.length; i++,l1=i) + while((l1= heads[l1]) != -1) isChild[l1][i] = true; + + float max = Float.NEGATIVE_INFINITY; + float p = Extractor.encode3(pos, heads, labs, x); + + pe.clear(); + for(int i=0;i<threads;i++) pe.add(new ParallelRearrange( isChild, pos,x,heads,labs)); + + for(int ch = 1; ch < heads.length; ch++) { + + for(short pa = 0; pa < heads.length; pa++) { + if(ch == pa || pa == heads[ch] || isChild[ch][pa]) continue; + + ParallelRearrange.add(p,(short) ch, pa); + } + } + executerService.invokeAll(pe); + + for(ParallelRearrange.PA rp :ParallelRearrange.order) + if(max < rp.max ) { + max = rp.max; wh = rp.wh; + nPar = rp.nPar; nType = rp.nType ; + } + ParallelRearrange.order.clear(); + + if(max <= NON_PROJECTIVITY_THRESHOLD) break; // bb: changed from 0.0 + + heads[wh] = nPar; + labs[wh] = nType; + + } + } + + public static String getInfo() { + + return "Decoder non-projectivity threshold: "+NON_PROJECTIVITY_THRESHOLD; + } + + +} diff --git a/dependencyParser/basic/mate-tools/src/is2/parser/Edges.java b/dependencyParser/basic/mate-tools/src/is2/parser/Edges.java new file mode 100644 index 0000000..5ad892b --- /dev/null +++ b/dependencyParser/basic/mate-tools/src/is2/parser/Edges.java @@ -0,0 +1,206 @@ +/** + * + */ +package is2.parser; + +import is2.data.PipeGen; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; +import java.util.Comparator; +import java.util.HashMap; +import java.util.Map.Entry; + +/** + * @author Dr. Bernd Bohnet, 13.05.2009; + * + * + */ +public final class Edges { + + + private static short[][][] edges; + private static HashMap<Short,Integer> labelCount = new HashMap<Short,Integer>(); + + private static HashMap<String,Integer> slabelCount = new HashMap<String,Integer>(); + + + static short[] def = new short[1]; + + private Edges () {} + + /** + * @param length + */ + public static void init(int length) { + edges = new short[length][length][]; + } + + + public static void findDefault(){ + + int best =0; + + + + for(Entry<Short,Integer> e : labelCount.entrySet()) { + + + if (best<e.getValue()) { + best = e.getValue(); + def[0]=e.getKey(); + } + } + + + // labelCount=null; + // String[] types = new String[mf.getFeatureCounter().get(PipeGen.REL)]; + // for (Entry<String, Integer> e : MFO.getFeatureSet().get(PipeGen.REL).entrySet()) types[e.getValue()] = e.getKey(); + + is2.util.DB.println("set default label to "+def[0]+" " ); + + // System.out.println("found default "+def[0]); + + } + + + final static public void put(int pos1, int pos2, short label) { + putD(pos1, pos2,label); + // putD(pos2, pos1,!dir, label); + } + + + final static public void putD(int pos1, int pos2, short label) { + + Integer lc = labelCount.get(label); + if (lc==null) labelCount.put(label, 1); + else labelCount.put(label, lc+1); + + String key = pos1+"-"+pos2+label; + Integer lcs = slabelCount.get(key); + if (lcs==null) slabelCount.put(key, 1); + else slabelCount.put(key, lcs+1); + + if (edges[pos1][pos2]==null) { + edges[pos1][pos2]=new short[1]; + edges[pos1][pos2][0]=label; + +// edgesh[pos1][pos2][dir?0:1] = new TIntHashSet(2); +// edgesh[pos1][pos2][dir?0:1].add(label); + } else { + short labels[] = edges[pos1][pos2]; + for(short l : labels) { + //contains label already? + if(l==label) return; + } + + short[] nlabels = new short[labels.length+1]; + System.arraycopy(labels, 0, nlabels, 0, labels.length); + nlabels[labels.length]=label; + edges[pos1][pos2]=nlabels; + + // edgesh[pos1][pos2][dir?0:1].add(label); + } + } + + final static public short[] get(int pos1, int pos2) { + + if (pos1<0 || pos2<0 || edges[pos1][pos2]==null) return def; + return edges[pos1][pos2]; + } + + + /** + * @param dis + */ + static public void write(DataOutputStream d) throws IOException { + + int len = edges.length; + d.writeShort(len); + + for(int p1 =0;p1<len;p1++) { + for(int p2 =0;p2<len;p2++) { + if (edges[p1][p2]==null) d.writeShort(0); + else { + d.writeShort(edges[p1][p2].length); + for(int l =0;l<edges[p1][p2].length;l++) { + d.writeShort(edges[p1][p2][l]); + } + + } + } + } + + d.writeShort(def[0]); + + } + + + /** + * @param dis + */ + public static void read(DataInputStream d) throws IOException { + int len = d.readShort(); + + edges = new short[len][len][]; + for(int p1 =0;p1<len;p1++) { + for(int p2 =0;p2<len;p2++) { + int ll = d.readShort(); + if (ll==0) { + edges[p1][p2]=null; + } else { + edges[p1][p2] = new short[ll]; + for(int l =0;l<ll;l++) { + edges[p1][p2][l]=d.readShort(); + } + } + } + } + + def[0]= d.readShort(); + + } + + public static class C implements Comparator<Short> { + + public C() { + super(); + } + + String _key; + + public C(String key) { + super(); + _key=key; + } + + /* (non-Javadoc) + * @see java.util.Comparator#compare(java.lang.Object, java.lang.Object) + */ + @Override + public int compare(Short l1, Short l2) { + + // int c1 = labelCount.get(l1); + // int c2 = labelCount.get(l2); + // if (true) return c1==c2?0:c1>c2?-1:1; + + int x1 = slabelCount.get(_key+l1.shortValue()); + int x2 = slabelCount.get(_key+l2.shortValue()); + // System.out.println(x1+" "+x2); + + + return x1==x2?0:x1>x2?-1:1; + + + + } + + + + + + } + + +} diff --git a/dependencyParser/basic/mate-tools/src/is2/parser/Evaluator.java b/dependencyParser/basic/mate-tools/src/is2/parser/Evaluator.java new file mode 100755 index 0000000..c764cc6 --- /dev/null +++ b/dependencyParser/basic/mate-tools/src/is2/parser/Evaluator.java @@ -0,0 +1,94 @@ +package is2.parser; + +import is2.data.SentenceData09; +import is2.io.CONLLReader09; + + +public class Evaluator { + + + + public static final String PUNCT ="!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~"; + + public static class Results { + + public int total; + public int corr; + public float las; + public float ula; + + } + + public static Results evaluate (String act_file, String pred_file) throws Exception { + + CONLLReader09 goldReader = new CONLLReader09(act_file, -1); + CONLLReader09 predictedReader = new CONLLReader09(pred_file, -1); + + int total = 0, corr = 0, corrL = 0; + int numsent = 0, corrsent = 0, corrsentL = 0; + SentenceData09 goldInstance = goldReader.getNext(); + SentenceData09 predInstance = predictedReader.getNext(); + + while(goldInstance != null) { + + int instanceLength = goldInstance.length(); + + if (instanceLength != predInstance.length()) + System.out.println("Lengths do not match on sentence "+numsent); + + int[] goldHeads = goldInstance.heads; + String[] goldLabels = goldInstance.labels; + int[] predHeads = predInstance.heads; + String[] predLabels = predInstance.labels; + + boolean whole = true; + boolean wholeL = true; + + // NOTE: the first item is the root info added during nextInstance(), so we skip it. + + int punc=0; + for (int i = 1; i < instanceLength; i++) { + if (predHeads[i] == goldHeads[i]) { + corr++; + + if (goldLabels[i].equals(predLabels[i])) corrL++; + else { + // System.out.println(numsent+" error gold "+goldLabels[i]+" "+predLabels[i]+" head "+goldHeads[i]+" child "+i); + wholeL = false; + } + } + else { + // System.out.println(numsent+"error gold "+goldLabels[i]+" "+predLabels[i]+" head "+goldHeads[i]+" child "+i); + whole = false; wholeL = false; + } + } + total += ((instanceLength - 1) - punc); // Subtract one to not score fake root token + + if(whole) corrsent++; + if(wholeL) corrsentL++; + numsent++; + + goldInstance = goldReader.getNext(); + predInstance = predictedReader.getNext(); + } + + Results r = new Results(); + + r.total = total; + r.corr = corr; + r.las =(float)Math.round(((double)corrL/total)*100000)/1000; + r.ula =(float)Math.round(((double)corr /total)*100000)/1000; + System.out.print("Total: " + total+" \tCorrect: " + corr+" "); + System.out.println("LAS: " + (double)Math.round(((double)corrL/total)*100000)/1000+" \tTotal: " + (double)Math.round(((double)corrsentL/numsent)*100000)/1000+ + " \tULA: " + (double)Math.round(((double)corr /total)*100000)/1000+" \tTotal: " + (double)Math.round(((double)corrsent /numsent)*100000)/1000); + + return r; + } + + + public static float round (double v){ + + return Math.round(v*10000F)/10000F; + } + +} diff --git a/dependencyParser/basic/mate-tools/src/is2/parser/Extractor.java b/dependencyParser/basic/mate-tools/src/is2/parser/Extractor.java new file mode 100755 index 0000000..35c90f2 --- /dev/null +++ b/dependencyParser/basic/mate-tools/src/is2/parser/Extractor.java @@ -0,0 +1,973 @@ +package is2.parser; + + + +import java.util.concurrent.atomic.AtomicInteger; + +import is2.data.Cluster; +import is2.data.D4; +import is2.data.D6; +import is2.data.DX; + +import is2.data.DataFES; +import is2.data.F2SF; +import is2.data.FV; +import is2.data.IFV; +import is2.data.Instances; +import is2.data.Long2IntInterface; + + +import is2.util.DB; +import is2.util.OptionsSuper; + + + + +final public class Extractor { + + static final int _SIB = 85; + public static int s_rel,s_word,s_type,s_dir,s_dist,s_feat,s_child,s_spath,s_lpath,s_pos,s_rel1; + public final DX d0 ,dl1,dl2, dwr,dr,dwwp,dw,dwp,dlf,d3lp, d2lp,d2pw,d2pp ; + + public final Long2IntInterface li; + + public boolean s_stack=false; + + public Extractor(Long2IntInterface li, boolean stack, int what) { + + s_stack=stack; + + this.li=li; + + if (what == OptionsSuper.MULTIPLICATIVE) { + d0 = new D6(li);dl1 = new D6(li);dl2 = new D6(li);dwr = new D6(li);dr = new D6(li);dwwp = new D6(li); + dw = new D6(li);dwp = new D6(li);dlf = new D6(li);d3lp = new D6(li); d2lp = new D6(li); d2pw = new D6(li); d2pp = new D6(li); + } else { + d0 = new D5(li);dl1 = new D5(li);dl2 = new D5(li);dwr = new D5(li);dr = new D5(li);dwwp = new D5(li); + dw = new D5(li);dwp = new D5(li);dlf = new D5(li);d3lp = new D5(li); d2lp = new D5(li); d2pw = new D5(li); d2pp = new D5(li); + } + + } + + public static void initStat(int what ) { + MFO mf = new MFO(); + if (what == OptionsSuper.MULTIPLICATIVE) { + + DB.println("mult (d4) "); + + s_rel = mf.getFeatureCounter().get(REL).intValue()*16; + s_rel1 =mf.getFeatureCounter().get(REL).intValue()+1; + s_pos = mf.getFeatureCounter().get(POS).intValue(); + s_word = mf.getFeatureCounter().get(WORD).intValue(); + s_type = mf.getFeatureCounter().get(TYPE).intValue(); + s_dir = (int)(mf.getFeatureCounter().get(DIR)); + la = (mf.getValue(DIR, LA)); + ra = (mf.getValue(DIR, RA)); + s_dist = (int)(mf.getFeatureCounter().get(DIST));//mf.getFeatureBits(DIST); + s_feat = (int)(mf.getFeatureCounter().get(Pipe.FEAT));//mf.getFeatureBits(Pipe.FEAT); + s_spath = (mf.getFeatureCounter().get(Cluster.SPATH)==null?0:mf.getFeatureCounter().get(Cluster.SPATH));//mf.getFeatureBits(Cluster.SPATH); + s_lpath = (mf.getFeatureCounter().get(Cluster.LPATH)==null?0:mf.getFeatureCounter().get(Cluster.LPATH));//mf.getFeatureBits(Cluster.LPATH); + + } else { + + s_rel = mf.getFeatureBits(REL); + s_pos = mf.getFeatureBits(POS); + s_word = mf.getFeatureBits(WORD); + s_type = mf.getFeatureBits(TYPE); + s_dir = mf.getFeatureBits(DIR); + la = mf.getValue(DIR, LA); + ra = mf.getValue(DIR, RA); + s_dist = mf.getFeatureBits(DIST); + s_feat = mf.getFeatureBits(Pipe.FEAT); + s_spath = mf.getFeatureBits(Cluster.SPATH); + s_lpath = mf.getFeatureBits(Cluster.LPATH); + + DB.println("shift init (d5) "); + } + + + + } + + public void init(){ + + + + d0.a0 = s_type;d0.a1 = s_pos;d0.a2 = s_pos;d0.a3 = s_pos;d0.a4 = s_pos;d0.a5 = s_pos;d0.a6 = s_pos;d0.a7 = s_pos; d0.fix(); + dl1.a0 = s_type;dl1.a1 = s_rel; dl1.a2 = s_pos;dl1.a3 = s_pos; dl1.a4 = s_pos; dl1.a5 = s_pos; dl1.a6 = s_pos; dl1.a7 = s_pos; dl1.fix(); + dl2.a0 = s_type;dl2.a1 = s_rel;dl2.a2 = s_word;dl2.a3 = s_pos;dl2.a4 = s_pos;dl2.a5 = s_pos;dl2.a6 = s_pos;dl2.a7 = s_pos; dl2.fix(); + dwp.a0 = s_type; dwp.a1 = s_rel; dwp.a2 = s_word; dwp.a3 = s_pos; dwp.a4 = s_pos; dwp.a5 = s_word;dwp.fix(); + dwwp.a0 = s_type; dwwp.a1 = s_rel; dwwp.a2 = s_word; dwwp.a3 = s_word; dwwp.a4 = s_pos; dwwp.a5 = s_word; dwwp.fix(); + dlf.a0 = s_type;dlf.a1 = s_rel; dlf.a2 = s_pos;dlf.a3 = s_pos; dlf.a4 = s_feat; dlf.a5 = s_feat; dlf.a6 = s_pos; dlf.a7 = s_pos; dlf.fix(); + d3lp.a0 = s_type; d3lp.a1 = s_rel; d3lp.a2 = s_lpath; d3lp.a3 = s_lpath; d3lp.a4 = s_lpath; d3lp.a5 = s_word; d3lp.a6 = s_spath; d3lp.a7 = s_spath;d3lp.fix(); + d2lp.a0 = s_type; d2lp.a1 = s_rel; d2lp.a2 = s_lpath; d2lp.a3 = s_lpath; d2lp.a4 = s_word; d2lp.a5 = s_word; d2lp.fix(); //d3lp.a6 = s_spath; d3lp.a7 = s_spath; + d2pw.a0 = s_type; d2pw.a1 = s_rel; d2pw.a2 = s_lpath; d2pw.a3 = s_lpath; d2pw.a4 = s_word; d2pw.a5 = s_word;d2pw.fix(); //d3lp.a6 = s_spath; d3lp.a7 = s_spath; + d2pp.a0 = s_type; d2pp.a1 = s_rel; d2pp.a2 = s_lpath; d2pp.a3 = s_lpath; d2pp.a4 = s_pos; d2pp.a5 = s_pos; d2pp.fix(); //d3lp.a6 = s_spath; d3lp.a7 = s_spath; + } + + + + + public int basic(short[] pposs, int p, int d, IFV f) + { + + d0.clean(); dl1.clean(); dl2.clean(); dwp.clean(); dwwp.clean(); dlf.clean(); d3lp.clean(); + + d3lp.clean(); d2lp.clean();d2pw.clean(); d2pp.clean(); + + int n=1; + int dir= (p < d)? ra:la; + d0.v0= n++; d0.v1=pposs[p]; d0.v2=pposs[d]; //d0.stop=4; + int end= (p >= d ? p : d); + int start = (p >= d ? d : p) + 1; + + for(int i = start ; i <end ; i++) { + d0.v3=pposs[i]; + d0.cz4(); + d0.csa(s_dir,dir,f); + } + return n; + } + + + public int firstm(Instances is, int i, int prnt, int dpnt, int label, Cluster cluster, long[] f) + { + + + for(int k=0;k<f.length;k++) f[k]=0; + + short[] pposs = is.pposs[i]; + int[] form =is.forms[i]; + short[][] feats = is.feats[i]; + + + int pF = form[prnt],dF = form[dpnt]; + int pL = is.plemmas[i][prnt],dL = is.plemmas[i][dpnt]; + int pP = pposs[prnt],dP = pposs[dpnt]; + + int prntLS = pF==-1?-1:cluster.getLP(pF), chldLS = dF==-1?-1:cluster.getLP(dF); + + // final int dir= (prnt < dpnt)? ra:la; + + if (pF>maxForm) pF=-1; + if (pL>maxForm) pL=-1; + + if (dF>maxForm) dF=-1; + if (dL>maxForm) dL=-1; + + + int n=3,c=0; + + dl2.v1=label; + dl2.v0= n++; dl2.v2=pF; dl2.v3=dP; dl2.cz4(); f[c++]=dl2.getVal(); + dl2.v0= n++; dl2.cz3(); f[c++]=dl2.getVal(); + dl2.v0= n++; dl2.v2=dF; dl2.v3=pP; dl2.cz4(); f[c++]=dl2.getVal(); + dl2.v0= n++; dl2.cz3(); f[c++]=dl2.getVal(); + + + dwwp.v1=label; + dwwp.v0= n++; dwwp.v2=pF; dwwp.v3=dF; dwwp.cz4(); f[c++]=dwwp.getVal(); + + dl1.v1=label; + dl1.v0= n++; dl1.v2=dP; dl1.cz3(); f[c++]=dl1.getVal(); + dl1.v0= n++; dl1.v2=pP; dl1.cz3(); f[c++]=dl1.getVal(); + dl1.v0= n++; dl1.v3=dP; dl1.cz4(); f[c++]=dl1.getVal(); + + int pPm1 = prnt > 0 ? pposs[prnt - 1] : s_str, dPm1 = dpnt > 0 ? pposs[dpnt - 1] : s_str; + int pPp1 = prnt < pposs.length - 1 ? pposs[prnt + 1]:s_end, dPp1 = dpnt < pposs.length - 1 ? pposs[dpnt + 1]:s_end; + + int pPm2 = prnt > 1 ? pposs[prnt - 2] : s_str, dPm2 = dpnt > 1 ? pposs[dpnt - 2] : s_str; + int pPp2 = prnt < pposs.length - 2 ? pposs[prnt + 2]:s_end, dPp2 = dpnt < pposs.length - 2 ? pposs[dpnt + 2]:s_end; + + int pFm1 = prnt > 0 ? form[prnt - 1] : s_stwrd, dFm1 = dpnt > 0 ? form[dpnt - 1] : s_stwrd; + int pFp1 = prnt < form.length - 1 ? form[prnt + 1]:s_stwrd, dFp1 = dpnt < form.length - 1 ? form[dpnt + 1]:s_stwrd; + + + if (prnt-1 == dpnt) pPm1 =-1; + if (prnt == dpnt-1) dPm1 =-1; + + if (prnt+1 == dpnt) pPp1 =-1; + if (prnt == dpnt+1) dPp1 =-1; + + if (prnt-2 == dpnt) pPm2 =-1; + if (prnt == dpnt-2) dPm2 =-1; + + if (prnt+2 == dpnt) pPp2 =-1; + if (prnt == dpnt+2) dPp2 =-1; + + + dl1.v0= n++;dl1.v2=pP; dl1.v3=pPp1; dl1.v4=dP;dl1.v5=dPp1; dl1.v6= (prnt+1==dpnt?4:prnt==dpnt+1?5:6) ; dl1.cz7(); f[c++]=dl1.getVal(); + dl1.v0= n++; dl1.v5=dPm1; dl1.v6= (prnt+1==dpnt?4:prnt==dpnt-1?5:6) ; dl1.cz7(); f[c++]=dl1.getVal(); + dl1.v0= n++; dl1.v3=pPm1; dl1.v6= (prnt-1==dpnt?4:prnt==dpnt-1?5:6) ; dl1.cz7(); f[c++]=dl1.getVal(); + dl1.v0= n++; dl1.v5=dPp1; dl1.v6= (prnt-1==dpnt?4:prnt==dpnt+1?5:6) ; dl1.cz7(); f[c++]=dl1.getVal(); + + + dl1.v0= n++; dl1.v3=pPm1; dl1.v5= (prnt-1==dpnt?4:5) ; dl1.cz6(); f[c++]=dl1.getVal(); + dl1.v0= n++; dl1.v3=dPm1; dl1.v5= (prnt==dpnt-1?4:5) ; dl1.cz6(); f[c++]=dl1.getVal(); + dl1.v0= n++; dl1.v3=dPp1; dl1.v5= (prnt==dpnt+1?4:5) ; dl1.cz6(); f[c++]=dl1.getVal(); + dl1.v0= n++; dl1.v3=pPp1; dl1.v5= (prnt+1==dpnt?4:5) ; dl1.cz6(); f[c++]=dl1.getVal(); + + dl1.v0= n++;dl1.v2=pP; dl1.v3=pPp2; dl1.v4=dP;dl1.v5=dPp2; dl1.v6= (prnt+2==dpnt?4:prnt==dpnt+2?5:6) ; dl1.cz7(); f[c++]=dl1.getVal(); + dl1.v0= n++; dl1.v5=dPm2; dl1.v6= (prnt+2==dpnt?4:prnt==dpnt-2?5:6) ; dl1.cz7(); f[c++]=dl1.getVal(); + dl1.v0= n++; dl1.v3=pPm2; dl1.v6= (prnt-2==dpnt?4:prnt==dpnt-2?5:6) ; dl1.cz7(); f[c++]=dl1.getVal(); + dl1.v0= n++; dl1.v5=dPp2; dl1.v6= (prnt-2==dpnt?4:prnt==dpnt+2?5:6) ; dl1.cz7(); f[c++]=dl1.getVal(); + + + // remove this again + dl1.v0= n++; dl1.v3=pPm2; dl1.v5= (prnt-2==dpnt?4:5); dl1.cz6(); f[c++]=dl1.getVal(); + dl1.v0= n++; dl1.v3=dPm2; dl1.v5= (prnt==dpnt-2?4:5); dl1.cz6(); f[c++]=dl1.getVal(); + dl1.v0= n++; dl1.v3=dPp2; dl1.v5= (prnt==dpnt+2?4:5); dl1.cz6(); f[c++]=dl1.getVal(); + dl1.v0= n++; dl1.v3=pPp2; dl1.v5= (prnt+2==dpnt?4:5); dl1.cz6(); f[c++]=dl1.getVal(); + + + + dl2.v0= n++; dl2.v3=dFm1; dl2.v3=pPp1;dl2.v4=pP; dl2.v5= (prnt+1==dpnt?4:prnt==dpnt-1?5:6) ; dl2.cz6(); f[c++]=dl2.getVal(); + dl2.v0= n++; dl2.v3=dFp1; dl2.v3=pPm1; dl2.v5= (prnt-1==dpnt?4:prnt==dpnt+1?5:6) ; dl2.cz6(); f[c++]=dl2.getVal(); + dl2.v0= n++; dl2.v3=pFm1; dl2.v3=dPp1;dl2.v4=dP; dl2.v5= (prnt-1==dpnt?4:prnt==dpnt+1?5:6) ; dl2.cz6(); f[c++]=dl2.getVal(); + dl2.v0= n++; dl2.v3=pFp1; dl2.v3=dPm1; dl2.v5= (prnt+1==dpnt?4:prnt==dpnt-1?5:6) ; dl2.cz6(); f[c++]=dl2.getVal(); + + + // maybe without dir + dl2.v0= n++; dl2.v3=dFm1; dl2.v3=dPm2;dl2.v4=pP; dl2.v5= (prnt==dpnt-1?4:prnt==dpnt-2?5:6) ; dl2.cz6(); f[c++]=dl2.getVal(); + dl2.v0= n++; dl2.v3=dFp1; dl2.v3=dPp2; dl2.v5= (prnt==dpnt+1?4:prnt==dpnt+2?5:6) ; dl2.cz6(); f[c++]=dl2.getVal(); + dl2.v0= n++; dl2.v3=pFm1; dl2.v3=pPm2;dl2.v4=dP; dl2.v5= (prnt-1==dpnt?4:prnt-2==dpnt?5:6) ; dl2.cz6(); f[c++]=dl2.getVal(); + dl2.v0= n++; dl2.v3=pFp1; dl2.v3=pPp2; dl2.v5= (prnt+1==dpnt?4:prnt+2==dpnt?5:6) ; dl2.cz6(); f[c++]=dl2.getVal(); + + + dwwp.v0= n++; dwwp.v2=pF; dwwp.v3=dF; dwwp.v4=dP; dwwp.cz5(); f[c++]=dwwp.getVal(); + dwwp.v0= n++; dwwp.v2=pF; dwwp.v3=dF; dwwp.v4=pP; dwwp.cz5(); f[c++]=dwwp.getVal(); +// dwwp.v0= n++; dwwp.v2=dF; dwwp.v3=pF; dwwp.v4=pP; dwwp.v4=dP; dwwp.cz6(); f[c++]=dwwp.getVal(); + + + // until here + + + // lemmas + + dl2.v1=label; + dl2.v0= n++; dl2.v2=pL; dl2.v3=dP; dl2.cz4(); f[c++]=dl2.getVal(); + dl2.v0= n++; dl2.cz3(); f[c++]=dl2.getVal(); + dl2.v0= n++; dl2.v2=dL; dl2.v3=pP; dl2.cz4(); f[c++]=dl2.getVal(); + dl2.v0= n++; dl2.cz3(); f[c++]=dl2.getVal(); + + + dwwp.v1=label; + dwwp.v0= n++; dwwp.v2=pL; dwwp.v3=dL; dwwp.cz4(); f[c++]=dwwp.getVal(); + + dwp.v1= label; + dwp.v0=n++;dwp.v2=dL; dwp.v3=pP;dwp.v4=dP;dwp.v5=pL; //dwp.cz6(); f[c++]=dwp.getVal(); + + dwp.v0=n++;dwp.v2=pL; dwp.v3=pP;dwp.v4=dP; dwp.v0=n++;dwp.cz5(); f[c++]=dwp.getVal(); + + + + dwp.v0=n++;dwp.v2=pL; dwp.cz5(); f[c++]=dwp.getVal(); + dwwp.v0= n++; dwwp.v2=pL; dwwp.v3=dL; dwwp.v4=dP; dwwp.cz5(); f[c++]=dwwp.getVal(); + dwwp.v0= n++; dwwp.v4=pP; dwwp.cz5(); f[c++]=dwwp.getVal(); + + + // cluster + if (cluster.size()>10) { + d2pw.v1=label; + d2pw.v0=n++; d2pw.v2=prntLS; d2pw.v3=chldLS; d2pw.cz4(); f[c++]=d2pw.getVal(); + d2pw.v0=n++; d2pw.v4=pF; d2pw.cz5(); f[c++]=d2pw.getVal(); + d2pw.v0=n++; d2pw.v4=dF; d2pw.cz5(); f[c++]=d2pw.getVal(); + // d2pw.v0=n++; d2pw.v5=pF; d2pw.cz6(); f[c++]=d2pw.getVal(); + + + d2pp.v1=label; + d2pp.v0=n++; d2pp.v2=prntLS; d2pp.v3=chldLS; d2pp.cz4(); f[c++]=d2pp.getVal(); + d2pp.v0=n++; d2pp.v4=pP; d2pp.cz5(); f[c++]=d2pp.getVal(); + d2pp.v0=n++; d2pp.v4=dP; d2pp.cz5(); f[c++]=d2pp.getVal(); + d2pp.v0=n++; d2pp.v5=pP; d2pp.cz6(); f[c++]=d2pp.getVal(); + } + + if (s_stack) { + + short[] prel = is.plabels[i]; + short[] phead = is.pheads[i]; + + //take those in for stacking + dl2.v1=label; + dl2.v0= n++;dl2.v2=prel[dpnt];dl2.v3=pP;dl2.v4=dP; dl2.v5=prnt==phead[dpnt]?1:2; dl2.cz6(); f[c++]=dl2.getVal(); + dl2.v0= n++;dl2.v2=pP;dl2.v3=dP; dl2.v4=prnt==phead[dpnt]?1:2; dl2.cz5(); f[c++]=dl2.getVal(); + } + + + + if (feats==null) return c; + + short[] featsP =feats[prnt], featsD =feats[dpnt]; + dlf.v0= n++; dlf.v1=label; dlf.v2=pP; dlf.v3=dP; + c =extractFeat(f, c, featsP, featsD); + + + return c; + } + + + public int second(Instances is , int i,int p, int d, int x, int label, Cluster cluster, long[] f) + { + + //for(int k=0;k<f.length;k++) f[k]=0; + + dl1.clean(); dwp.clean();dlf.clean(); dwwp.clean(); + + short[] pos= is.pposs[i]; + int[] forms=is.forms[i],lemmas=is.plemmas[i]; + + + int pP = pos[p], dP = pos[d]; + int pF = forms[p],dF = forms[d]; + int pL = lemmas[p], cL = lemmas[d]; + + int sP = x!=-1 ? pos[x] : s_str, sF = x!=-1 ? forms[x] : s_stwrd, sL = x!=-1 ? lemmas[x] : s_stwrd; + + int n=_SIB; + if (pF>maxForm) pF=-1; + if (pL>maxForm) pL=-1; + + if (dF>maxForm) dF=-1; + if (cL>maxForm) cL=-1; + + if (sF>maxForm) sF=-1; + if (sL>maxForm) sL=-1; + + int c =0; + + dl1.v1=label;dwwp.v1=label;dwp.v1=label; + + dl1.v0= n++;dl1.v2=pP; dl1.v3=dP;dl1.v4=sP; dl1.cz5(); f[c++]=dl1.getVal() ; // f[c++]=dl1.csa(s_dist,dist); + dl1.v0= n++; dl1.v3=sP; dl1.cz4(); f[c++]=dl1.getVal(); //f[c++]=dl1.csa(s_dist,dist); + dl1.v0= n++; dl1.v2=dP; dl1.cz4(); f[c++]=dl1.getVal(); //f[c++]=dl1.csa(s_dist,dist); + + // sibling only could be tried + + dwwp.v0= n++; dwwp.v2=pF; dwwp.v3=sF; dwwp.cz4(); f[c++]=dwwp.getVal(); //f[c++]=dwwp.csa(s_dist,dist); + dwwp.v0= n++; dwwp.v2=dF; dwwp.cz4(); f[c++]=dwwp.getVal(); //f[c++]=dwwp.csa(s_dist,dist); + + // 154 + dwp.v0= n++; dwp.v2=sF; dwp.v3=pP; dwp.cz4(); f[c++]=dwp.getVal(); //f[c++]=dwp.csa(s_dist,dist); + dwp.v0= n++; /*dwp.v1=label; */dwp.v3=dP; dwp.cz4(); f[c++]=dwp.getVal(); //f[c++]=dwp.csa(s_dist,dist); + dwp.v0= n++; /*dwp.v1=label;*/ dwp.v2=pF; dwp.v3=sP; dwp.cz4(); f[c++]=dwp.getVal(); //f[c++]=dwp.csa(s_dist,dist); + dwp.v0= n++; /*dwp.v1=label;*/ dwp.v2=dF; dwp.cz4(); f[c++]=dwp.getVal();// f[c++]=dwp.csa(s_dist,dist); + + // 158 + //lemmas + + dwwp.v0= n++; dwwp.v2=pL; dwwp.v3=sL; dwwp.cz4(); f[c++]=dwwp.getVal(); + dwwp.v0= n++; dwwp.v2=cL; dwwp.cz4(); f[c++]=dwwp.getVal(); //f[c++]=dwwp.csa(s_dist,dist); + dwp.v0= n++; dwp.v2=sL; dwp.v3=pP; dwp.cz4(); f[c++]=dwp.getVal();// f[c++]=dwp.csa(s_dist,dist); + dwp.v0= n++; dwp.v3=dP; dwp.cz4(); f[c++]=dwp.getVal(); // f[c++]=dwp.csa(s_dist,dist); + + // 162 + dwp.v0= n++; dwp.v2=pL; dwp.v3=sP; dwp.cz4(); f[c++]=dwp.getVal(); //f[c++]=dwp.csa(s_dist,dist); + dwp.v0= n++; dwp.v2=cL; dwp.cz4(); f[c++]=dwp.getVal();// f[c++]=dwp.csa(s_dist,dist); + + // clusters + if (cluster.size()>10) { + + } + + int pPm1 = p!=0 ? pos[p-1] : s_str; + int chldPm1 = d-1>=0 ? pos[d-1] : s_str; + int prntPp1 = p!=pos.length-1 ? pos[p+1] : s_end; + int chldPp1 = d!=pos.length-1 ? pos[d+1] : s_end; + + // sibling part of speech minus and plus 1 + int sPm1 = x>0 ? pos[x-1]:s_str; + int sPp1 = x<pos.length-1 ? pos[x + 1]:s_end; + + if (x+1==x|| x+1==p || x+1==d) sPp1=-1; + if (p+1==x|| p+1==p || p+1==d) prntPp1=-1; + if (d+1==x|| d+1==p || d+1==d) chldPp1=-1; + + if (x-1==x|| x-1==p || x-1==d) sPm1=-1; + if (d-1==x|| d-1==p || d-1==d) chldPm1=-1; + if (p-1==x|| p-1==p || p-1==d) pPm1=-1; + + + dl1.v0=n++; dl1.v2=sP; dl1.v3=sPp1;dl1.v4=pP; dl1.cz5(); f[c++]=dl1.getVal(); + // 165 + dl1.v0=n++; dl1.v2=sP; dl1.v3=sPm1;dl1.v4=pP; dl1.v5= (x-1==p?3:x-1==d?4:5); dl1.cz6(); f[c++]= dl1.getVal(); //dl1.getVal();// f.add(li.l2i(l)); + dl1.v0=n++; dl1.v2=sP; dl1.v3=pP;dl1.v4=prntPp1;dl1.v5= (x==p+1?3:4); dl1.cz6(); f[c++]=dl1.getVal();// f.add(li.l2i(l)); + dl1.v0=n++; dl1.v2=sP; dl1.v3=pP;dl1.v4=pPm1;dl1.v5= (x==p-1?3:4); dl1.cz6(); f[c++]=dl1.getVal();// f.add(li.l2i(l)); + dl1.v0=n++; dl1.v2=sP; dl1.v3=sPp1;dl1.v4=pPm1;dl1.v5=pP;dl1.v6= (x==p-1?3:x==p+1?4:5); dl1.cz7(); f[c++]=dl1.getVal(); + dl1.v0=n++; dl1.v2=sPm1; dl1.v3=sP;dl1.v4=pPm1;dl1.v5=pP;dl1.v6= (x==p-1?3:x-1==p?4:5); dl1.cz7(); f[c++]=dl1.getVal();// f.add(li.l2i(l)); + dl1.v0=n++; dl1.v2=sP; dl1.v3=sPp1;dl1.v4=pP;dl1.v5=prntPp1;dl1.v6= (x+1==p?3:x==p+1?4:5); dl1.cz7(); f[c++]=dl1.getVal();// f.add(li.l2i(l)); + dl1.v0=n++; dl1.v2=sPm1; dl1.v3=sP; dl1.v4=pP;dl1.v5=prntPp1;dl1.v6= (x==p-1?3:x==p+1?4:5); dl1.cz7(); f[c++]=dl1.getVal();// f.add(li.l2i(l)); + + dl1.v0=n++; dl1.v2=sP; dl1.v3=sPp1;dl1.v4=dP; dl1.v5= (x+1==d?3:x+1==p?4:5); dl1.cz6(); f[c++]=dl1.getVal(); + dl1.v0=n++; dl1.v2=sP; dl1.v3=sPm1;dl1.v4=dP; dl1.v5= (x-1==d?3:x-1==p?4:5); dl1.cz6(); f[c++]=dl1.getVal(); + + dl1.v0=n++; dl1.v2=sP; dl1.v3=dP;dl1.v4=chldPp1;dl1.v5= (x==d+1?3:d+1==p?4:5); dl1.cz6(); f[c++]=dl1.getVal(); + dl1.v0=n++; dl1.v2=sP; dl1.v3=dP;dl1.v4=chldPm1; dl1.v5= (x==d-1?3:d-1==p?4:5); dl1.cz6(); f[c++]=dl1.getVal(); + dl1.v0=n++; dl1.v2=sP; dl1.v3=sPp1;dl1.v4=chldPm1;dl1.v5=dP; dl1.v6= (x==d-1?3:x+1==d?4:5); dl1.cz7(); f[c++]=dl1.getVal();// f.add(li.l2i(l)); + dl1.v0=n++; dl1.v2=sPm1; dl1.v3=sP;dl1.v4=chldPm1;dl1.v5=dP; dl1.v6= (x-1==d?3:d-1==x?4:5); dl1.cz7(); f[c++]=dl1.getVal(); + dl1.v0= n++;dl1.v2=sP; dl1.v3=sPp1;dl1.v4=dP;dl1.v5=chldPp1;dl1.v6= (x==d+1?3:x+1==d?4:5); dl1.cz7();f[c++]=dl1.getVal();// f.add(li.l2i(l)); + dl1.v0= n++; dl1.v2=sPm1; dl1.v3=sP;dl1.v4=dP;dl1.v5=chldPp1;dl1.v6= (x-1==d?3:d+1==x?4:5);dl1.cz7(); f[c++]=dl1.getVal(); + + // c=61; + /* + if (cluster.size()>10) { + AtomicInteger N = new AtomicInteger(n); + c = addClusterFeatures(d, p, x, pos, forms, cluster, N, c, f,label); + n = N.get(); + } + */ + // take those in for stacking + + if (s_stack) { + short[] prel = is.plabels[i],phead=is.pheads[i]; + + int g = p==phead[d]?1:2 ; + if (x>=0) g += p==phead[x]?4:8; + + int gr = x==-1?s_relend:prel[x]; + + + dl2.v1 = label; + dl2.v0= n++;dl2.v2=prel[d];dl2.v3=g;dl2.v4=sP;dl2.v5=dP;dl2.cz6();f[c++]=dl2.getVal(); + dl2.v0= n++;dl2.v2=prel[d];dl2.v3=g;dl2.v4=sP;dl2.v5=pP;dl2.cz6();f[c++]=dl2.getVal(); + dl2.v0= n++;dl2.v2=prel[d];dl2.v3=g;dl2.v4=sP;dl2.v5=pP;dl2.v6=dP;dl2.cz7();f[c++]=dl2.getVal(); + + dl2.v0= n++;dl2.v2=gr;dl2.v3=g;dl2.v4=sP;dl2.v5=dP;dl2.cz6();f[c++]=dl2.getVal(); + dl2.v0= n++;dl2.v2=gr;dl2.v3=g;dl2.v4=sP;dl2.v5=pP;dl2.cz6();f[c++]=dl2.getVal(); + dl2.v0= n++;dl2.v2=gr;dl2.v3=g;dl2.v4=sP;dl2.v5=pP;dl2.v6=dP;dl2.cz7();f[c++]=dl2.getVal(); + } + + short[][] feats=is.feats[i]; + + if (feats==null) return c; + + + short[] featsP =feats[d]; + short[] featsSbl =x!=-1?feats[x]:null; + dlf.v1=label; + dlf.v0= n++; dlf.v2=sP; dlf.v3=dP; + c = extractFeat(f, c ,featsP, featsSbl); + + featsP =feats[p]; + + + dlf.v0= n++; dlf.v1=label; dlf.v2=sP; dlf.v3=pP; + c = extractFeat(f, c ,featsP, featsSbl); + + + return c; + } + + + /** + * Separated this method to speed up parsing + * @param d + * @param p + * @param x + * @param pos + * @param forms + * @param cluster + * @param N + * @param c + * @param f + * @return + */ + int addClusterFeatures(Instances is, int i, int d, int p, int x, Cluster cluster, int c, long[] f, int label) { + + // int n= N.get(); + + short[] pos= is.pposs[i]; + int[] forms=is.forms[i]; + + int n=190; + int pP = pos[p], dP = pos[d]; + int sP = x!=-1 ? pos[x] : s_str; + + + int pLSp1 = p != pos.length - 1 ? forms[p + 1]==-1?-1:cluster.getLP(forms[p + 1]): _cend; + int cLSp1 = d != pos.length - 1 ? forms[d + 1] ==-1?-1:cluster.getLP(forms[d + 1]):_cend; + int sLSp1 = x < pos.length -1 ? forms[x + 1] ==-1?-1:cluster.getLP(forms[x + 1]) : _cend; + + int pLSm1 = p!=0 ? forms[p - 1]==-1?-1:cluster.getLP(forms[p - 1]): _cstr; + int cLSm1 = d-1>=0 ? forms[d - 1] ==-1?-1:cluster.getLP(forms[d - 1]):_cstr; + int sLSm1 = x>0 ? forms[x - 1] ==-1?-1:cluster.getLP(forms[x - 1]):_cstr; + + //int c=61; + int pF = forms[p],dF = forms[d], sF = x!=-1 ? forms[x] : s_stwrd; + int prntLS = pF==-1?-1:cluster.getLP(pF), chldLS = dF==-1?-1:cluster.getLP(dF); + + int sblLS = (x != -1)&&(sF!=-1) ? cluster.getLP(sF) : s_stwrd; + + + d2lp.v1=label; + d2lp.v0= n++; d2lp.v2=prntLS; d2lp.v3=sblLS; d2lp.cz4(); f[c++]=d2lp.getVal(); + d2lp.v0= n++; d2lp.v2=chldLS; d2lp.v3=sblLS; d2lp.cz4(); f[c++]=d2lp.getVal();// f[c++]=d2lp.csa(s_dist,dist); + + d3lp.v1= label; + d3lp.v0= n++; d3lp.v2=prntLS; d3lp.v3=chldLS; d3lp.v4=sblLS;d3lp.cz5(); f[c++]=d3lp.getVal(); + + d2lp.v0= n++; d2lp.v2=prntLS; d2lp.v3=chldLS; d2lp.v4=sF; d2lp.cz5(); f[c++]=d2lp.getVal(); //f[c++]=d2lp.csa(s_dist,dist); + d2lp.v0= n++; d2lp.v2=prntLS; d2lp.v3=sblLS; d2lp.v4=dF; d2lp.cz5(); f[c++]=d2lp.getVal(); //f[c++]=d2lp.csa(s_dist,dist); + d2lp.v0= n++; d2lp.v2=chldLS; d2lp.v3=sblLS; d2lp.v4=pF; d2lp.cz5(); f[c++]=d2lp.getVal(); //f[c++]=d2lp.csa(s_dist,dist); + + d2pp.v1=label; + d2pp.v0= n++; d2pp.v2=prntLS; d2pp.v3=chldLS; d2pp.v4=sP; d2pp.cz5(); f[c++]=d2pp.getVal(); //f[c++]=d2pp.csa(s_dist,dist); + d2pp.v0= n++; d2pp.v2=prntLS; d2pp.v3=sblLS; d2pp.v4=dP; d2pp.cz5(); f[c++]=d2pp.getVal(); //f[c++]=d2pp.csa(s_dist,dist); + d2pp.v0= n++; d2pp.v2=chldLS; d2pp.v3=sblLS; d2pp.v4=pP; d2pp.cz5(); f[c++]=d2pp.getVal(); //f[c++]=d2pp.csa(s_dist,dist); + + + if (x+1==x|| x+1==p || x+1==d) sLSp1=-1; + if (p+1==x|| p+1==p || p+1==d) pLSp1=-1; + if (d+1==x|| d+1==p || d+1==d) cLSp1=-1; + + if (x-1==x|| x-1==p || x-1==d) sLSm1=-1; + if (d-1==x|| d-1==p || d-1==d) cLSm1=-1; + if (p-1==x|| p-1==p || p-1==d) pLSm1=-1; + + dl1.v0=n++; dl1.v2=sP; dl1.v3=sLSp1;dl1.v4=pP; dl1.cz5(); f[c++]=dl1.getVal(); + dl1.v0=n++; dl1.v2=sP; dl1.v3=sLSm1;dl1.v4=pP; dl1.cz5(); f[c++]=dl1.getVal(); + dl1.v0=n++; dl1.v2=sP; dl1.v3=pP;dl1.v4=pLSp1;dl1.cz5(); f[c++]=dl1.getVal(); + dl1.v0=n++; dl1.v2=sP; dl1.v3=pP;dl1.v4=pLSm1; dl1.cz5(); f[c++]=dl1.getVal(); + dl1.v0=n++; dl1.v2=sP; dl1.v3=sLSp1;dl1.v4=pLSm1;dl1.v5=pP; dl1.cz6(); f[c++]=dl1.getVal(); + dl1.v0=n++; dl1.v2=sLSm1; dl1.v3=sP;dl1.v4=pLSm1;dl1.v5=pP; dl1.cz6(); f[c++]=dl1.getVal(); + dl1.v0=n++; dl1.v2=sP; dl1.v3=sLSp1;dl1.v4=pP;dl1.v5=pLSp1; dl1.cz6(); f[c++]=dl1.getVal(); + dl1.v0=n++; dl1.v2=sLSm1; dl1.v3=sP; dl1.v4=pP;dl1.v5=pLSp1; dl1.cz6(); f[c++]=dl1.getVal(); + dl1.v0=n++; dl1.v2=sP; dl1.v3=sLSp1;dl1.v4=dP; dl1.cz5(); f[c++]=dl1.getVal(); + dl1.v0=n++; dl1.v2=sP; dl1.v3=sLSm1;dl1.v4=dP; dl1.cz5(); f[c++]=dl1.getVal(); + dl1.v0=n++; dl1.v2=sP; dl1.v3=dP;dl1.v4=cLSp1; dl1.cz5(); f[c++]=dl1.getVal(); + dl1.v0=n++;dl1.v2=sP; dl1.v3=dP;dl1.v4=cLSm1; dl1.cz5(); f[c++]=dl1.getVal(); + dl1.v0=n++; dl1.v2=sP; dl1.v3=sLSm1;dl1.v4=cLSm1;dl1.v5=dP; dl1.cz6(); f[c++]=dl1.getVal(); + dl1.v0=n++; dl1.v2=sLSm1; dl1.v3=sP;dl1.v4=cLSm1;dl1.v5=dP;dl1.cz6(); f[c++]=dl1.getVal(); + dl1.v0=n++;dl1.v2=sP; dl1.v3=sLSp1;dl1.v4=dP;dl1.v5=cLSp1;dl1.cz6();f[c++]=dl1.getVal(); + dl1.v0=n++; dl1.v2=sLSm1; dl1.v3=sP;dl1.v4=dP;dl1.v5=cLSp1; dl1.cz6(); f[c++]=dl1.getVal(); + + + + dl1.v0=n++; dl1.v2=sP; dl1.v3=sLSp1;dl1.v4=pP; dl1.cz5(); f[c++]=dl1.getVal(); + dl1.v0=n++; dl1.v2=sP; dl1.v3=sLSm1;dl1.v4=pP; dl1.cz5(); f[c++]=dl1.getVal(); + dl1.v0=n++; dl1.v2=sP; dl1.v3=pP;dl1.v4=pLSp1;dl1.cz5(); f[c++]=dl1.getVal(); + dl1.v0=n++; dl1.v2=sP; dl1.v3=pP;dl1.v4=pLSm1; dl1.cz5(); f[c++]=dl1.getVal(); + dl1.v0=n++; dl1.v2=sP; dl1.v3=sLSp1;dl1.v4=pLSm1;dl1.v5=pP; dl1.cz6(); f[c++]=dl1.getVal(); + dl1.v0=n++; dl1.v2=sLSm1; dl1.v3=sP;dl1.v4=pLSm1;dl1.v5=pP; dl1.cz6(); f[c++]=dl1.getVal(); + dl1.v0=n++; dl1.v2=sP; dl1.v3=sLSp1;dl1.v4=pP;dl1.v5=pLSp1; dl1.cz6(); f[c++]=dl1.getVal(); + dl1.v0=n++; dl1.v2=sLSm1; dl1.v3=sP; dl1.v4=pP;dl1.v5=pLSp1; dl1.cz6(); f[c++]=dl1.getVal(); + dl1.v0=n++; dl1.v2=sP; dl1.v3=sLSp1;dl1.v4=dP; dl1.cz5(); f[c++]=dl1.getVal(); + dl1.v0=n++; dl1.v2=sP; dl1.v3=sLSm1;dl1.v4=dP; dl1.cz5(); f[c++]=dl1.getVal(); + dl1.v0=n++; dl1.v2=sP; dl1.v3=dP;dl1.v4=cLSp1; dl1.cz5(); f[c++]=dl1.getVal(); + dl1.v0=n++;dl1.v2=sP; dl1.v3=dP;dl1.v4=cLSm1; dl1.cz5(); f[c++]=dl1.getVal(); + dl1.v0=n++; dl1.v2=sP; dl1.v3=sLSm1;dl1.v4=cLSm1;dl1.v5=dP; dl1.cz6(); f[c++]=dl1.getVal(); + dl1.v0=n++; dl1.v2=sLSm1; dl1.v3=sP;dl1.v4=cLSm1;dl1.v5=dP;dl1.cz6(); f[c++]=dl1.getVal(); + dl1.v0= n++;dl1.v2=sP; dl1.v3=sLSp1;dl1.v4=dP;dl1.v5=cLSp1;dl1.cz6();f[c++]=dl1.getVal(); + dl1.v0= n++; dl1.v2=sLSm1; dl1.v3=sP;dl1.v4=dP;dl1.v5=cLSp1; dl1.cz6(); f[c++]=dl1.getVal(); + + + return c; + } + + private int extractFeat(long[] f, int cnt, short[] featsP, short[] featsD) { + if (featsP!=null && featsD!=null) { + for(short i1=0;i1<featsP.length;i1++) { + for(short i2=0;i2<featsD.length;i2++) { + dlf.v4=featsP[i1]; dlf.v5=featsD[i2]; + dlf.cz6(); f[cnt++]=dlf.getVal(); + } + } + } else if (featsP==null && featsD!=null) { + + for(short i2=0;i2<featsD.length;i2++) { + dlf.v4=nofeat; dlf.v5=featsD[i2]; + dlf.cz6(); f[cnt++]=dlf.getVal(); + + } + } else if (featsP!=null && featsD==null) { + + for(short i1=0;i1<featsP.length;i1++) { + dlf.v4=featsP[i1]; dlf.v5=nofeat; + dlf.cz6(); f[cnt++]=dlf.getVal(); + + } + } + return cnt; + } + + + + public FV encodeCat(Instances is, int ic, short pposs[], int forms[], int[] lemmas, short[] heads, short[] types, short feats[][], Cluster cluster, FV f) { + + + long[] svs = new long[250]; + + for (int i = 1; i < heads.length; i++) { + + + basic(pposs, heads[i], i, f); + + int w1 = heads[i]<i?heads[i]:i; + int w2 = heads[i]<i?i:heads[i]; + + int dir =heads[i]<i?0:s_rel1; + int label = types[i] + dir; + + int c = firstm(is, ic, w1, w2, label, cluster,svs); + for(int k=0;k<c;k++) dl1.map(f,svs[k]); + + int ch,cmi,cmo; + if (heads[i] < i) { + ch = rightmostRight(heads, heads[i], i); + cmi = leftmostLeft(heads, i, heads[i]); + cmo = rightmostRight(heads, i, heads.length); + + } else { + ch = leftmostLeft(heads, heads[i], i); + cmi = rightmostRight(heads, i, heads[i]); + cmo = leftmostLeft(heads, i, 0); + } + + int lx =types[i] + s_rel1*((heads[i]<i?0:1) +8); + c =second(is,ic,w1, w2,ch, lx, cluster, svs); + for(int k=0;k<c;k++) dl1.map(f,svs[k]); + c = addClusterFeatures(is,ic, w1, w2, ch, cluster, c, svs,lx); + for(int k=0;k<c;k++) dl1.map(f,svs[k]); + + lx =types[i]+s_rel1*((heads[i]<i?0:1) + ((cmi < i)?0:2) ); + c =second(is, ic,w1,w2,cmi, lx, cluster, svs); + for(int k=0;k<c;k++) dl1.map(f,svs[k]); + + c = addClusterFeatures(is,ic, w1, w2, cmi, cluster, c, svs,lx); + for(int k=0;k<c;k++) dl1.map(f,svs[k]); + + lx =types[i]+s_rel1*((heads[i]<i?0:1) + ((cmo < i)?0:2) ); + c =second(is, ic, w1,w2,cmo, lx, cluster, svs); + for(int k=0;k<c;k++) dl1.map(f,svs[k]); + + c = addClusterFeatures(is,ic, w1, w2, cmo, cluster, c, svs,lx); + for(int k=0;k<c;k++) dl1.map(f,svs[k]); + } + + return f; + } + + public void compare(Instances is, int ic, short pos[], short[] heads, short[] types, Cluster cluster, F2SF f, DataFES x) { + + + long[] svs = new long[250]; + + float fx =0.0F; + + + for (int i = 1; i < heads.length; i++) { + + f.clear(); + basic(pos, heads[i], i, f); + + if (x.pl[heads[i]][i] != f.getScore()) { + DB.println("basic diff "+x.pl[heads[i]][i] +" fg "+f.getScore()); + } + + int w1 = heads[i]<i?heads[i]:i; + int w2 = heads[i]<i?i:heads[i]; + + int dir =heads[i]<i?0:s_rel1; + int label = types[i] + dir; + f.clear(); + int c = firstm(is, ic, w1, w2, label, cluster,svs); + for(int k=0;k<c;k++) dl1.map(f,svs[k]); + + if (x.lab[heads[i]][i][types[i]] != f.getScore()) { + DB.println("first diff "+x.lab[heads[i]][i][types[i]] +" fg "+f.getScore()); + } + + short[] labels = Edges.get(pos[heads[i]], pos[i]); + int lid=-1; + for(int k=0;k<labels.length;k++) if (types[i]== labels[k]) {lid= k;break;} + + + + int ch,cmi,cmo; + if (heads[i] < i) { + ch = rightmostRight(heads, heads[i], i); + cmi = leftmostLeft(heads, i, heads[i]); + cmo = rightmostRight(heads, i, heads.length); + + } else { + ch = leftmostLeft(heads, heads[i], i); + cmi = rightmostRight(heads, i, heads[i]); + cmo = leftmostLeft(heads, i, 0); + } + + f.clear(); + + + int lx =types[i] + s_rel1*((heads[i]<i?0:1) +8); + c =second(is,ic,w1, w2,ch, lx, cluster, svs); + for(int k=0;k<c;k++) dl1.map(f,svs[k]); + + if (x.sib[heads[i]][i][ch==-1?heads[i]:ch][lid] != f.getScore()) { + DB.println("sib diff "+x.sib[heads[i]][i][ch==-1?i:ch][lid] +" fg "+f.getScore()); + } + + f.clear(); + + + lx =types[i]+s_rel1*((heads[i]<i?0:1) + ((cmi < i)?0:2) ); + c =second(is, ic,w1,w2,cmi, lx, cluster, svs); + for(int k=0;k<c;k++) dl1.map(f,svs[k]); + + if (x.gra[heads[i]][i][cmi==-1?i:cmi][lid] != f.getScore() ) { + DB.println("gcm diff "+x.gra[heads[i]][i][cmi==-1?i:cmi][lid] +" fg "+f.getScore()+" cmi "+cmi+" i "+i+ + " head "+heads[i]+" w1 "+w1+" w2 "+w2+" label "+lx+" "+((heads[i]<i?0:1) + ((cmi < i)?0:2) ) ); + + System.out.println("w1 "+w1+" w2 "+w2+" cmi "+cmi+" label "+label+" "); + + for (long k : svs) System.out.print(k+" "); + System.out.println(); + + } + f.clear(); + lx =types[i]+s_rel1*((heads[i]<i?0:1) + ((cmo < i)?0:2) ); + c =second(is, ic, w1,w2,cmo, lx, cluster, svs); + for(int k=0;k<c;k++) dl1.map(f,svs[k]); + + if (x.gra[heads[i]][i][cmo==-1?i:cmo][lid] != f.getScore() ) { + DB.println("gcm diff "+x.gra[heads[i]][i][cmo==-1?i:cmo][lid] +" fg "+f.getScore()+" cmo "+cmo+" i "+i+ + " head "+heads[i]+" w1 "+w1+" w2 "+w2+" label "+lx+" "+((heads[i]<i?0:1) + ((cmi < i)?0:2) ) ); + + System.out.println("w1 "+w1+" w2 "+w2+" cmi "+cmi+" label "+label+" "); + + for (long k : svs) System.out.print(k+" "); + System.out.println(); + + } + } + + + } + + + public short[] searchLabel(Instances is, int ic, short pposs[], int forms[], int[] lemmas, short[] heads, short[] types, short feats[][], Cluster cluster, IFV f) { + + + long[] svs = new long[250]; + + short[] newLabels = new short[types.length]; + + for (int i = 1; i < heads.length; i++) { + + + // int n =basic(pposs, forms, heads[i], i, cluster, f); + + int ch,cmi,cmo; + if (heads[i] < i) { + ch = rightmostRight(heads, heads[i], i); + cmi = leftmostLeft(heads, i, heads[i]); + cmo = rightmostRight(heads, i, heads.length); + + } else { + ch = leftmostLeft(heads, heads[i], i); + cmi = rightmostRight(heads, i, heads[i]); + cmo = leftmostLeft(heads, i, 0); + } + + + short labels[] = Edges.get(pposs[is.heads[ic][i]],pposs[i]); + + float best = -1000; + short bestL = 0; + for(int j=0; j< labels.length;j++) { + + f.clear(); + firstm(is, ic, heads[i], i, labels[j], cluster,svs); + for(int k=0;k<svs.length;k++) dl1.map(f,svs[k]); + + second(is,ic,heads[i], i,ch, labels[j], cluster, svs); + for(int k=0;k<svs.length;k++) dl1.map(f,svs[k]); + + second(is, ic,heads[i],i,cmi, labels[j], cluster, svs); + for(int k=0;k<svs.length;k++) dl1.map(f,svs[k]); + + second(is, ic, heads[i],i,cmo, labels[j], cluster, svs); + for(int k=0;k<svs.length;k++) dl1.map(f,svs[k]); + + if (best < f.getScore()) { + best= (float)f.getScore(); + bestL= labels[j]; + newLabels[i]=bestL; + } + + + } + } + return newLabels; + + //return f; + } + + + public static float encode3(short[] pos, short heads[] , short[] types, DataFES d2) { + + + float v = 0F; + for (int i = 1; i < heads.length; i++) { + + // int dir= (heads[i] < i)? 0:1; + + v += d2.pl[heads[i]][i]; + v += d2.lab[heads[i]][i][types[i]]; + + // boolean left = i<heads[i]; + short[] labels = Edges.get(pos[heads[i]], pos[i]); + int lid=-1; + for(int k=0;k<labels.length;k++) if (types[i]== labels[k]) {lid= k;break;} + + int ch,cmi,cmo; + if (heads[i] < i) { + ch = rightmostRight(heads, heads[i], i); + cmi = leftmostLeft(heads, i, heads[i]); + cmo = rightmostRight(heads, i, heads.length); + + if (ch==-1) ch=heads[i]; + if (cmi==-1) cmi=heads[i]; + if (cmo==-1) cmo=heads[i]; + + } else { + ch = leftmostLeft(heads, heads[i], i); + cmi = rightmostRight(heads, i, heads[i]); + cmo = leftmostLeft(heads, i, 0); + + if (ch==-1) ch=i; + if (cmi==-1) cmi=i; + if (cmo==-1) cmo=i; + } + v += d2.sib[heads[i]][i][ch][lid]; + v += d2.gra[heads[i]][i][cmi][lid]; + v += d2.gra[heads[i]][i][cmo][lid]; + } + return v; + } + + public static float encode3(short[] pos, short heads[] , short[] types, DataFES d2, float[] scores) { + + float v = 0F; + for (int i = 1; i < heads.length; i++) { + + + scores[i]= d2.pl[heads[i]][i]; + scores[i] += d2.lab[heads[i]][i][types[i]]; + + short[] labels = Edges.get(pos[heads[i]], pos[i]); + int lid=-1; + for(int k=0;k<labels.length;k++) if (types[i]== labels[k]) {lid= k;break;} + + int ch,cmi,cmo; + if (heads[i] < i) { + ch = rightmostRight(heads, heads[i], i); + cmi = leftmostLeft(heads, i, heads[i]); + cmo = rightmostRight(heads, i, heads.length); + + if (ch==-1) ch=heads[i]; + if (cmi==-1) cmi=heads[i]; + if (cmo==-1) cmo=heads[i]; + + } else { + ch = leftmostLeft(heads, heads[i], i); + cmi = rightmostRight(heads, i, heads[i]); + cmo = leftmostLeft(heads, i, 0); + + if (ch==-1) ch=i; + if (cmi==-1) cmi=i; + if (cmo==-1) cmo=i; + } + scores[i] += d2.sib[heads[i]][i][ch][lid]; + scores[i] += d2.gra[heads[i]][i][cmi][lid]; + scores[i] += d2.gra[heads[i]][i][cmo][lid]; + } + return v; + } + + + public static int rightmostRight(short[] heads, int head, int max) { + int rightmost = -1; + for (int i = head + 1; i < max; i++) if (heads[i] == head) rightmost = i; + + return rightmost; + } + + public static int leftmostLeft(short[] heads, int head, int min) { + int leftmost = -1; + for (int i = head - 1; i > min; i--) if (heads[i] == head) leftmost = i; + return leftmost; + } + + public static final String REL = "REL",END = "END",STR = "STR",LA = "LA",RA = "RA"; + + private static int ra,la; + private static int s_str; + private static int s_end, _cend,_cstr, s_stwrd,s_relend; + + protected static final String TYPE = "TYPE",DIR = "D"; + public static final String POS = "POS"; + protected static final String DIST = "DIST",MID = "MID"; + + private static final String _0 = "0",_4 = "4",_3 = "3", _2 = "2",_1 = "1",_5 = "5",_10 = "10"; + + private static int di0, d4,d3,d2,d1,d5,d10; + + + private static final String WORD = "WORD",STWRD = "STWRD", STPOS = "STPOS"; + + + + private static int nofeat; + + + public static int maxForm; + + + /** + * Initialize the features. + * @param maxFeatures + */ + static public void initFeatures() { + + + MFO mf = new MFO(); + mf.register(POS, MID); + s_str = mf.register(POS, STR); + s_end = mf.register(POS, END); + + s_relend = mf.register(REL, END); + + _cstr= mf.register(Cluster.SPATH,STR); + _cend=mf.register(Cluster.SPATH,END); + + + mf.register(TYPE, POS); + + s_stwrd=mf.register(WORD,STWRD); + mf.register(POS,STPOS); + + la = mf.register(DIR, LA); + ra = mf.register(DIR, RA); + + // mf.register(TYPE, CHAR); + + mf.register(TYPE, Pipe.FEAT); + nofeat=mf.register(Pipe.FEAT, "NOFEAT"); + + for(int k=0;k<150;k++) mf.register(TYPE, "F"+k); + + + di0=mf.register(DIST, _0); + d1=mf.register(DIST, _1); + d2=mf.register(DIST, _2); + d3=mf.register(DIST, _3); + d4=mf.register(DIST, _4); + d5=mf.register(DIST, _5); + // d5l=mf.register(DIST, _5l); + d10=mf.register(DIST, _10); + + + } + + + +} diff --git a/dependencyParser/basic/mate-tools/src/is2/parser/MFO.java b/dependencyParser/basic/mate-tools/src/is2/parser/MFO.java new file mode 100755 index 0000000..519ea06 --- /dev/null +++ b/dependencyParser/basic/mate-tools/src/is2/parser/MFO.java @@ -0,0 +1,257 @@ +package is2.parser; + + +import is2.data.IEncoder; +import is2.data.IEncoderPlus; +import is2.data.IFV; +import is2.data.Long2IntInterface; +import is2.util.DB; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; +import java.util.HashMap; +import java.util.Map.Entry; + +/** + * Map Features, do not map long to integer + * + * @author Bernd Bohnet, 20.09.2009 + */ + +final public class MFO implements IEncoderPlus { + + /** The features and its values */ + static private final HashMap<String,HashMap<String,Integer>> m_featureSets = new HashMap<String,HashMap<String,Integer>>(); + + /** The feature class and the number of values */ + static private final HashMap<String,Integer> m_featureCounters = new HashMap<String,Integer>(); + + /** The number of bits needed to encode a feature */ + static final HashMap<String,Integer> m_featureBits = new HashMap<String,Integer>(); + + /** Integer counter for long2int */ + static private int count=0; + + /** Stop growing */ + public boolean stop=false; + + final public static String NONE="<None>"; + + + + + + + + public MFO () {} + + + public int size() {return count;} + + + + /** + * Register an attribute class, if it not exists and add a possible value + * @param type + * @param type2 + */ + final public int register(String a, String v) { + + HashMap<String,Integer> fs = getFeatureSet().get(a); + if (fs==null) { + fs = new HashMap<String,Integer>(); + getFeatureSet().put(a, fs); + fs.put(NONE, 0); + getFeatureCounter().put(a, 1); + } + Integer c = getFeatureCounter().get(a); + + Integer i = fs.get(v); + if (i==null) { + fs.put(v, c); + c++; + getFeatureCounter().put(a,c); + return c-1; + } else return i; + } + + /** + * Calculates the number of bits needed to encode a feature + */ + public void calculateBits() { + + int total=0; + for(Entry<String,Integer> e : getFeatureCounter().entrySet() ){ + int bits =(int)Math.ceil((Math.log(e.getValue()+1)/Math.log(2))); + m_featureBits.put(e.getKey(), bits); + total+=bits; + // System.out.println(" "+e.getKey()+" bits "+bits+" number "+(e.getValue()+1)); + } + +// System.out.println("total number of needed bits "+total); + } + + + + public String toString() { + + StringBuffer content = new StringBuffer(); + for(Entry<String,Integer> e : getFeatureCounter().entrySet() ){ + content.append(e.getKey()+" "+e.getValue()); + content.append(':'); + // HashMap<String,Integer> vs = getFeatureSet().get(e.getKey()); + content.append(getFeatureBits(e.getKey())); + + /*if (vs.size()<120) + for(Entry<String,Integer> e2 : vs.entrySet()) { + content.append(e2.getKey()+" ("+e2.getValue()+") "); + }*/ + content.append('\n'); + + } + return content.toString(); + } + + + + static final public short getFeatureBits(String a) { + if(m_featureBits.get(a)==null) return 0; + return (short)m_featureBits.get(a).intValue(); + } + + + + /** + * Get the integer place holder of the string value v of the type a + * + * @param t the type + * @param v the value + * @return the integer place holder of v + */ + final public int getValue(String t, String v) { + + if (m_featureSets.get(t)==null) return -1; + Integer vi = m_featureSets.get(t).get(v); + if (vi==null) return -1; //stop && + return vi.intValue(); + } + + /** + * Static version of getValue + * @see getValue + */ + static final public int getValueS(String a, String v) { + + if (m_featureSets.get(a)==null) return -1; + Integer vi = m_featureSets.get(a).get(v); + if (vi==null) return -1; //stop && + return vi.intValue(); + } + + public int hasValue(String a, String v) { + + Integer vi = m_featureSets.get(a).get(v); + if (vi==null) return -1; + return vi.intValue(); + } + + + public static String printBits(int k) { + StringBuffer s = new StringBuffer(); + for(int i =0;i<31;i++) { + s.append((k&0x00000001)==1?'1':'0'); + k=k>>1; + + } + s.reverse(); + return s.toString(); + } + + + + + + + + /** + * Maps a long to a integer value. This is very useful to save memory for sparse data long values + * @param l + * @return the integer + */ + static public int misses = 0; + static public int good = 0; + + + + + /** + * Write the data + * @param dos + * @throws IOException + */ + static public void writeData(DataOutputStream dos) throws IOException { + dos.writeInt(getFeatureSet().size()); + // DB.println("write"+getFeatureSet().size()); + for(Entry<String, HashMap<String,Integer>> e : getFeatureSet().entrySet()) { + dos.writeUTF(e.getKey()); + dos.writeInt(e.getValue().size()); + + for(Entry<String,Integer> e2 : e.getValue().entrySet()) { + + if(e2.getKey()==null) DB.println("key "+e2.getKey()+" value "+e2.getValue()+" e -key "+e.getKey()); + dos.writeUTF(e2.getKey()); + dos.writeInt(e2.getValue()); + + } + + } + } + public void read(DataInputStream din) throws IOException { + + int size = din.readInt(); + for(int i=0; i<size;i++) { + String k = din.readUTF(); + int size2 = din.readInt(); + + HashMap<String,Integer> h = new HashMap<String,Integer>(); + getFeatureSet().put(k,h); + for(int j = 0;j<size2;j++) { + h.put(din.readUTF(), din.readInt()); + } + getFeatureCounter().put(k, size2); + } + + count =size; + // stop(); + calculateBits(); + } + + + /** + * Clear the data + */ + static public void clearData() { + getFeatureSet().clear(); + m_featureBits.clear(); + getFeatureSet().clear(); + } + + public HashMap<String,Integer> getFeatureCounter() { + return m_featureCounters; + } + + static public HashMap<String,HashMap<String,Integer>> getFeatureSet() { + return m_featureSets; + } + + static public String[] reverse(HashMap<String,Integer> v){ + String[] set = new String[v.size()]; + for(Entry<String,Integer> e : v.entrySet()) { + set[e.getValue()]=e.getKey(); + } + return set; + } + + +} diff --git a/dependencyParser/basic/mate-tools/src/is2/parser/Open.java b/dependencyParser/basic/mate-tools/src/is2/parser/Open.java new file mode 100755 index 0000000..35f14a7 --- /dev/null +++ b/dependencyParser/basic/mate-tools/src/is2/parser/Open.java @@ -0,0 +1,38 @@ +package is2.parser; + +import is2.data.Parse; + + +final public class Open { + + public float p; + short s, e, label; + byte dir; + + Closed left; + Closed right; + + public Open(short s, short t, short dir, short label,Closed left, Closed right, float p) { + this.s = s; + this.e = t; + this.label = label; + this.dir = (byte)dir; + this.left =left; + this.right=right; + this.p=p; + } + + + void create(Parse parse) { + if (dir == 0) { + parse.heads[s] = e; + if (label != -1) parse.labels[s] = label; + } else { + parse.heads[e] = s; + if (label != -1) parse.labels[e] = label; + } + if (left != null) left.create(parse); + if (right != null) right.create(parse); + } + +} diff --git a/dependencyParser/basic/mate-tools/src/is2/parser/Options.java b/dependencyParser/basic/mate-tools/src/is2/parser/Options.java new file mode 100755 index 0000000..3c8b551 --- /dev/null +++ b/dependencyParser/basic/mate-tools/src/is2/parser/Options.java @@ -0,0 +1,63 @@ +package is2.parser; + +import is2.util.OptionsSuper; + + +public final class Options extends OptionsSuper { + + + public Options (String[] args) { + + + + for(int i = 0; i < args.length; i++) { + + if (args[i].equals("--help")) explain(); + + if (args[i].equals("-decode")) { + decodeProjective = args[i+1].equals("proj"); i++; + } else if (args[i].equals("-decodeTH")) { + decodeTH = Double.parseDouble(args[i+1]); i++; + } else if (args[i].equals("-nonormalize")) { + normalize=false; + } else if (args[i].equals("-features")) { + features= args[i+1]; i++; + } else if (args[i].equals("-hsize")) { + hsize= Integer.parseInt(args[i+1]); i++; + } else if (args[i].equals("-len")) { + maxLen= Integer.parseInt(args[i+1]); i++; + } else if (args[i].equals("-cores")) { + cores= Integer.parseInt(args[i+1]); i++; + } else if (args[i].equals("-no2nd")) { + no2nd= true; + } else if (args[i].equals("-few2nd")) { + few2nd= true; + } else super.addOption(args, i); + + } + + + + } + + private void explain() { + System.out.println("Usage: "); + System.out.println("java -class mate.jar is2.parser.Parser [Options]"); + System.out.println(); + System.out.println("Example: "); + System.out.println(" java -class mate.jar is2.parser.Parser -model eps3.model -train corpora/conll08st/train/train.closed -test corpora/conll08st/devel/devel.closed -out b3.test -eval corpora/conll08st/devel/devel.closed -count 2000 -i 6"); + System.out.println(""); + System.out.println("Options:"); + System.out.println(""); + System.out.println(" -train <file> the corpus a model is trained on; default "+this.trainfile); + System.out.println(" -test <file> the input corpus for testing; default "+this.testfile); + System.out.println(" -out <file> the output corpus (result) of a test run; default "+this.outfile); + System.out.println(" -model <file> the parsing model for traing the model is stored in the files"); + System.out.println(" and for parsing the model is load from this file; default "+this.modelName); + System.out.println(" -i <number> the number of training iterations; good numbers are 10 for smaller corpora and 6 for bigger; default "+this.numIters); + System.out.println(" -count <number> the n first sentences of the corpus are take for the training default "+this.count); + System.out.println(" -format <number> conll format of the year 8 or 9; default "+this.formatTask); + + System.exit(0); + } +} diff --git a/dependencyParser/basic/mate-tools/src/is2/parser/ParallelDecoder.java b/dependencyParser/basic/mate-tools/src/is2/parser/ParallelDecoder.java new file mode 100755 index 0000000..dd18f5f --- /dev/null +++ b/dependencyParser/basic/mate-tools/src/is2/parser/ParallelDecoder.java @@ -0,0 +1,170 @@ +package is2.parser; + + +import is2.data.DataFES; + + +import java.util.ArrayList; +import java.util.concurrent.Callable; + +/** + * @author Bernd Bohnet, 30.08.2009 + * + * This class implements a parallel feature extractor. + */ +final public class ParallelDecoder implements Callable<Object> +{ + // some constants + private static final float INIT_BEST = (-1.0F / 0.0F); + private static final boolean[] DIR ={false,true}; + + // the data space of the weights for a dependency tree + final private DataFES x; + + private short[] pos; + + private Open O[][][][]; + private Closed C[][][][] ; + + private int length; + + boolean done=false; + public boolean waiting =false; + + /** + * Initialize the parallel decoder. + * + * @param pos part-of-speech + * @param d data + * @param edges part-of-speech edge mapping + * @param o open spans + * @param c closed spans + * @param length number of words + */ + public ParallelDecoder(short[] pos, DataFES d, Open o[][][][], Closed c[][][][], int length) { + + this.pos =pos; + this.x =d; + + this.O=o; + this.C=c; + this.length=length; + } + + + private static class DSet { short w1,w2;} + + @Override + public Object call() { + + + try { + + while (true){ + + DSet set = get(); +// if (done && set==null) break; + + if (set ==null) return null; + + short s=set.w1, t=set.w2; + + for(short dir =0;dir<2;dir++) { + + short[] labs = (dir==1) ? Edges.get(pos[s],pos[t]):Edges.get(pos[t],pos[s]); + + O[s][t][dir] = new Open[labs.length]; + + for (int l = 0; l <labs.length; l++) { + + + double tRP = INIT_BEST; + + Closed tL = null, tR = null; + + for (int r = s; r < t; r++) { + + if (s == 0 && r != 0) continue; + + double tLPr = INIT_BEST,tRPr = INIT_BEST; + Closed tLCld = null, tRCld = null; + + if (r == s) tLPr = dir==1 ? x.sib[s][t][s][l] : + x.gra[t][s][s][l]; + else + for (int i = s + 1; i <= r; i++) + if (((dir==1 ? x.sib[s][t][i][l] : x.gra[t][s][i][l]) + C[s][r][1][i].p) > tLPr) { + tLPr = ((dir==1 ? x.sib[s][t][i][l] : x.gra[t][s][i][l]) + C[s][r][1][i].p);tLCld = C[s][r][1][i];} + + if (r == t-1) tRPr = dir==1 ? x.gra[s][t][s][l] : x.sib[t][s][s][l]; + else + for (int i = r + 1; i < t; i++) + if (((dir == 1 ? x.gra[s][t][i][l] : + x.sib[t][s][i][l]) + + C[r+1][t][0][i].p) > tRPr) { + tRPr = ((dir==1?x.gra[s][t][i][l]:x.sib[t][s][i][l]) + C[r+1][t][0][i].p); tRCld=C[r + 1][t][0][i]; + } + + if (tLPr + tRPr > tRP) {tRP = tLPr + tRPr; tL = tLCld;tR = tRCld;} + } + O[s][t][dir][l] = new Open(s, t, dir, labs[l],tL, tR, + (float) ( tRP+((dir==1)?x.pl[s][t]: x.pl[t][s]) + ((dir==1)? x.lab[s][t][labs[l]]:x.lab[t][s][labs[l]]))); + } + } + C[s][t][1] = new Closed[length]; C[s][t][0] = new Closed[length]; + + for (int m = s ; m <= t; m++) { + for(boolean d : DIR) { + if ((d && m!=s)||!d && (m!=t && s!=0)) { + + // create closed structure + + double top = INIT_BEST; + + Open tU = null; Closed tL = null; + int numLabels =O[(d ? s : m)][(d ? m : t)][d?1:0].length; + + //for (int l = numLabels-1; l >=0; l--) { + for (int l = 0; l < numLabels; l++) { + + Open hi = O[(d ? s : m)][(d ? m : t)][d?1:0][l]; + for (int amb = m + (d?1:-1); amb != (d?t:s) + (d?1:-1); amb += (d?1:-1)) { + + if ((hi.p + C[d?m:s][d?t:m][d?1:0][amb].p +x.gra[d?s:t][m][amb][l]) > top) { + top = (hi.p + C[d?m:s][d?t:m][d?1:0][amb].p +x.gra[d?s:t][m][amb][l]); tU = hi; tL=C[d?m:s][d?t:m][d?1:0][amb];} + + } + + if ((m == (d ? t : s)) && (hi.p + x.gra[d?s:t][d?t:s][m][l]) > top) { + top = (hi.p + x.gra[d ? s : t][d?t:s][m][l]); tU = hi; tL = null;} + } + C[s][t][d?1:0][m] = new Closed(s, t, m, d?1:0,tU,tL,(float) top); + + + } + } + } + } + } catch (Exception e ) { + e.printStackTrace(); + System.exit(0); + } + return null; + } + + public static ArrayList<DSet> sets = new ArrayList<DSet>(); + + static synchronized private DSet get() { + synchronized (sets) { + if (sets.size()==0) return null; + return sets.remove(sets.size()-1); + } + } + + public static void add(short w1, short w2){ + DSet ds =new DSet(); + ds.w1=w1; + ds.w2=w2; + sets.add(ds); + } +} diff --git a/dependencyParser/basic/mate-tools/src/is2/parser/ParallelExtract.java b/dependencyParser/basic/mate-tools/src/is2/parser/ParallelExtract.java new file mode 100755 index 0000000..4313bfd --- /dev/null +++ b/dependencyParser/basic/mate-tools/src/is2/parser/ParallelExtract.java @@ -0,0 +1,246 @@ +package is2.parser; + +import is2.data.Cluster; +import is2.data.DataFES; +import is2.data.F2SF; +import is2.data.FV; +import is2.data.Instances; +import is2.data.Long2IntInterface; +import is2.util.DB; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.HashSet; +import java.util.concurrent.Callable; + + + + + +/** + * @author Bernd Bohnet, 30.08.2009 + * + * This class implements a parallel feature extractor. + */ +final public class ParallelExtract implements Callable<Object> +{ + // the data space of the weights for a dependency tree + final DataFES d; + + // the data extractor does the actual work + final Extractor extractor; + + private Instances is; + private int i; + + private F2SF para; + + private Cluster cluster; + + + public ParallelExtract(Extractor e, Instances is, int i, DataFES d, F2SF para,Cluster cluster) { + + this.is =is; + extractor=e; + this.d =d; + this.i=i; + this.para=para; + this.cluster = cluster; + } + + + public static class DSet { + int w1,w2; + } + + public Object call() { + + try { + + F2SF f= para; + + + short[] pos=is.pposs[i]; + int length = pos.length; + + long[] gvs = new long[50]; + long[] svs = new long[220]; + + while (true) { + + DSet set = get(); + if (set ==null) break; + + int w1=set.w1; + int w2=set.w2; + + + f.clear(); + extractor.basic(pos, w1, w2, f); + d.pl[w1][w2]=f.getScoreF(); + + + f.clear(); + + extractor.basic(pos, w2, w1, f); + d.pl[w2][w1]=f.getScoreF(); + + short[] labels = Edges.get(pos[w1], pos[w2]); + float[] lab = d.lab[w1][w2]; + + final Long2IntInterface li = extractor.li; + + int c = extractor.firstm(is, i, w1, w2, 0, cluster, svs); + + for (int l = 0; l <lab.length ; l++) lab[l]=-100 ; + + for (int l = 0; l <labels.length ; l++) { + short label = labels[l]; + + f.clear(); + int lv = extractor.d0.computeLabeValue(label,Extractor.s_type); + for(int k=0;k<c;k++)if (svs[k]>0) f.add(li.l2i(svs[k]+lv)); + + + lab[label]=f.getScoreF(); + } + + labels = Edges.get(pos[w2], pos[w1]); + lab = d.lab[w2][w1]; + + for (int l = 0; l <lab.length ; l++) lab[l]=-100 ; + + + for (int l = 0; l <labels.length ; l++) { + int label = labels[l]; + + f.clear(); + int lv = extractor.d0.computeLabeValue(label + Extractor.s_rel1 ,Extractor.s_type); + for(int k=0;k<c;k++)if (svs[k]>0) f.add(li.l2i(svs[k]+lv)); + + lab[label]=f.getScoreF(); + } + + int s = w1<w2 ? w1 : w2; + int e = w1<w2 ? w2 : w1; + + + for(int m=0;m<length;m++) { + + int g = (m==s||e==m) ? -1 : m; + + int cn =extractor.second(is, i, w1,w2,g, 0, cluster, svs); + int cc = extractor.addClusterFeatures(is,i, w1, w2, g, cluster, 0, gvs,0); + //for(int k=0;k<c;k++) dl1.map(f,svs[k]); + + + if(m>=w1) { + labels = Edges.get(pos[w1], pos[w2]); + float[] lab2 = new float[labels.length]; + for (int l = 0; l <labels.length ; l++) { + + short label = labels[l]; + + int lx =label+Extractor.s_rel1*( g < w2?0:2 ); + + f.clear(); + int lv = extractor.d0.computeLabeValue(lx,Extractor.s_type); + for(int k=0;k<cn;k++)if (svs[k]>0) f.add(li.l2i(svs[k]+lv)); + for(int k=0;k<cc;k++)if (gvs[k]>0) f.add(li.l2i(gvs[k]+lv)); + + lab2[l] = f.getScoreF(); + } + d.gra[w1][w2][m] =lab2; + } + + + if (m<=w2) { + labels = Edges.get(pos[w2], pos[w1]); + float lab2[]; + d.gra[w2][w1][m] = lab2 = new float[labels.length]; + for (int l = 0; l <labels.length ; l++) { + + int label = labels[l] ; + int lx =label+Extractor.s_rel1*(1 + (g < w1?0:2) ); + + f.clear(); + int lv = extractor.d0.computeLabeValue(lx,Extractor.s_type); + for(int k=0;k<cn;k++)if (svs[k]>0) f.add(li.l2i(svs[k]+lv)); + for(int k=0;k<cc;k++)if (gvs[k]>0) f.add(li.l2i(gvs[k]+lv)); + + lab2[l] = f.getScoreF(); + + } + } + + + g = (m==s||e==m) ? -1 : m; + + // int cn = extractor.second(is,i,w1,w2,g,0, cluster, svs,Extractor._SIB); + if (m >=w1 && m<=w2) { + labels = Edges.get(pos[w1], pos[w2]); + float lab2[]= new float[labels.length]; + d.sib[w1][w2][m] = lab2; + + for (int l = 0; l <labels.length ; l++) { + + short label = labels[l]; + + int lx =label+Extractor.s_rel1*( 8); + f.clear(); + int lv = extractor.d0.computeLabeValue(lx,Extractor.s_type); + for(int k=0;k<cn;k++) if (svs[k]>0) f.add(li.l2i(svs[k]+lv)); + for(int k=0;k<cc;k++) if (gvs[k]>0) f.add(li.l2i(gvs[k]+lv)); + + + lab2[l] = (float)f.score;//f.getScoreF(); + } + } + if (m >=w1 && m <=w2) { + labels = Edges.get(pos[w2], pos[w1]); + float[] lab2 = new float[labels.length]; + d.sib[w2][w1][m]=lab2; + for (int l = 0; l <labels.length ; l++) { + + int label = labels[l] ; + + int lx =label+Extractor.s_rel1*(9); + + f.clear(); + int lv = extractor.d0.computeLabeValue(lx,Extractor.s_type); + for(int k=0;k<cn;k++) if (svs[k]>0) f.add(li.l2i(svs[k]+lv)); + for(int k=0;k<cc;k++) if (gvs[k]>0) f.add(li.l2i(gvs[k]+lv)); + + lab2[l] = f.score;//f.getScoreF(); + } + } + } + } + + } catch(Exception e ) { + e.printStackTrace(); + } + return null; + } + + + static ArrayList<DSet> sets = new ArrayList<DSet>(); + + private DSet get() { + + synchronized (sets) { + if (sets.size()==0) return null; + return sets.remove(sets.size()-1); + } + } + static public void add(int w1, int w2){ + DSet ds =new DSet(); + ds.w1=w1; + ds.w2=w2; + sets.add(ds); + } + + + + +} diff --git a/dependencyParser/basic/mate-tools/src/is2/parser/ParallelRearrange.java b/dependencyParser/basic/mate-tools/src/is2/parser/ParallelRearrange.java new file mode 100755 index 0000000..dfd995a --- /dev/null +++ b/dependencyParser/basic/mate-tools/src/is2/parser/ParallelRearrange.java @@ -0,0 +1,127 @@ +package is2.parser; + +import is2.data.DataFES; + +import java.util.ArrayList; +import java.util.concurrent.Callable; + +/** + * @author Dr. Bernd Bohnet, 30.08.2009 + * + * This class implements a parallel edge rearrangement for non-projective parsing; + * The linear method was first suggest by Rayn McDonald et. al. 2005. + */ +final public class ParallelRearrange implements Callable<Object> { + + // new parent child combination to explore + final static class PA { + final float p; + final short ch, pa; + public float max; + public short wh; + public short nPar; + public short nType; + public PA(float p2, short ch2, short pa2) { p=p2; ch=ch2;pa=pa2;} + } + + // list of parent child combinations + static ArrayList<PA> parents = new ArrayList<PA>(); + static ArrayList<PA> order = new ArrayList<PA>(); + // best new parent child combination, found so far + public float max; + + // some data from the dependency tree + //private EdgesC edges; + private short[] pos; + private DataFES x; + private boolean[][] isChild ; + public short[] heads,types; + + // child, new parent, new label + public short wh,nPar,nType; + + /** + * Initialize the parallel rearrange thread + * + * @param isChild2 is a child + * @param edgesC the part-of-speech edge mapping + * @param pos the part-of-speech + * @param x the data + * @param s the heads + * @param ts the types + */ + public ParallelRearrange(boolean[][] isChild2,short[] pos, DataFES x, short[] s, short[] ts) { + + heads =new short[s.length]; + System.arraycopy(s, 0, heads, 0, s.length); + + types =new short[ts.length]; + System.arraycopy(ts, 0, types, 0, ts.length); + + isChild=isChild2; + //edges = edgesC; + this.pos =pos; + this.x=x; + } + + + @Override + public Object call() { + + // check the list of new possible parents and children for a better combination + while(true) { + PA px = getPA(); + if (px==null) break; + + float max=0; + short pa =px.pa, ch =px.ch; + + if(ch == pa || pa == heads[ch] || isChild[ch][pa]) continue; + + short oldP = heads[ch], oldT = types[ch]; + + heads[ch]=pa; + + short[] labels = Edges.get(pos[pa], pos[ch]); + + for(int l=0;l<labels.length;l++) { + + types[ch]=labels[l]; + + float p_new = Extractor.encode3(pos, heads, types, x); + + if(max < p_new-px.p ) { + max = p_new-px.p; wh = ch; nPar = pa; nType = labels[l] ; + px.max=max; + px.wh=ch; + px.nPar = pa; + px.nType =labels[l]; + } + } + heads[ch]= oldP; types[ch]=oldT; + } + return null; + } + + /** + * Add a child-parent combination which are latter explored for rearrangement + * + * @param p2 + * @param ch2 + * @param pa + */ + static public void add(float p2, short ch2, short pa) { + PA px = new PA(p2,ch2,pa); + parents.add(px); + order.add(px); + } + + static private PA getPA() { + synchronized (parents) { + if (parents.size()==0) return null; + return parents.remove(parents.size()-1); + } + } + + +} diff --git a/dependencyParser/basic/mate-tools/src/is2/parser/Parameters.java b/dependencyParser/basic/mate-tools/src/is2/parser/Parameters.java new file mode 100755 index 0000000..cb13a69 --- /dev/null +++ b/dependencyParser/basic/mate-tools/src/is2/parser/Parameters.java @@ -0,0 +1,38 @@ +/** + * + */ +package is2.parser; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; + +import is2.data.FV; +import is2.data.IFV; +import is2.data.Instances; +import is2.data.Parse; + +/** + * @author Bernd Bohnet, 31.08.2009 + * + * + */ +public abstract class Parameters { + + + public abstract void average(double avVal); + + public abstract void update(FV act, FV pred, Instances isd, int instc, Parse d, double upd, double e); + + public abstract void write(DataOutputStream dos) throws IOException; + + public abstract void read(DataInputStream dis ) throws IOException; + + public abstract int size(); + + /** + * @return + */ + public abstract IFV getFV() ; + +} diff --git a/dependencyParser/basic/mate-tools/src/is2/parser/ParametersFloat.java b/dependencyParser/basic/mate-tools/src/is2/parser/ParametersFloat.java new file mode 100755 index 0000000..c2cbe93 --- /dev/null +++ b/dependencyParser/basic/mate-tools/src/is2/parser/ParametersFloat.java @@ -0,0 +1,137 @@ +package is2.parser; + +import is2.data.F2SF; +import is2.data.FV; +import is2.data.Instances; +import is2.data.Parse; +import is2.util.DB; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; + + + +final public class ParametersFloat extends Parameters { + + public float[] parameters; + public float[] total; + + public ParametersFloat(int size) { + parameters = new float[size]; + total = new float[size]; + for(int i = 0; i < parameters.length; i++) { + parameters[i] = 0F; + total[i] = 0F; + } + } + + /** + * @param parameters2 + */ + public ParametersFloat(float[] p) { + parameters =p; + } + + + @Override + public void average(double avVal) { + for(int j = 0; j < total.length; j++) { + parameters[j] = total[j]/((float)avVal); + } + total =null; + } + + public ParametersFloat average2(double avVal) { + float[] px = new float[this.parameters.length]; + for(int j = 0; j < total.length; j++) { + px[j] = total[j]/((float)avVal); + } + ParametersFloat pf = new ParametersFloat(px); + return pf; + } + + @Override + public void update(FV act, FV pred, Instances isd, int instc, Parse d, double upd, double e) { + + e++; + + float lam_dist = getScore(act) - getScore(pred); + + float b = (float)e-lam_dist; + + FV dist = act.getDistVector(pred); + + dist.update(parameters, total, hildreth(dist,b), upd,false); + } + + protected double hildreth(FV a, double b) { + + double A = a.dotProduct(a); + if (A<=0.0000000000000000001) return 0.0; + return b/A; + } + + + public float getScore(FV fv) { + if (fv ==null) return 0.0F; + return fv.getScore(parameters,false); + + } + + @Override + final public void write(DataOutputStream dos) throws IOException{ + + dos.writeInt(parameters.length); + for(float d : parameters) dos.writeFloat(d); + + } + + @Override + public void read(DataInputStream dis ) throws IOException{ + + parameters = new float[dis.readInt()]; + int notZero=0; + for(int i=0;i<parameters.length;i++) { + parameters[i]=dis.readFloat(); + if (parameters[i]!=0.0F) notZero++; + } + + + DB.println("read parameters "+parameters.length+" not zero "+notZero); + + } + + public int countNZ() { + + int notZero=0; + for(int i=0;i<parameters.length;i++) { + if (parameters[i]!=0.0F) notZero++; + } + return notZero; + + // DB.println("read parameters "+parameters.length+" not zero "+notZero); + + } + + + /* (non-Javadoc) + * @see is2.sp09k99995.Parameters#getFV() + */ + @Override + public F2SF getFV() { + return new F2SF(parameters); + } + + + /* (non-Javadoc) + * @see is2.sp09k99999.Parameters#size() + */ + @Override + public int size() { + return parameters.length; + } + + + +} diff --git a/dependencyParser/basic/mate-tools/src/is2/parser/Parser.java b/dependencyParser/basic/mate-tools/src/is2/parser/Parser.java new file mode 100755 index 0000000..d6ba6d6 --- /dev/null +++ b/dependencyParser/basic/mate-tools/src/is2/parser/Parser.java @@ -0,0 +1,664 @@ +package is2.parser; + + +import is2.data.Cluster; +import is2.data.DataF; +import is2.data.DataFES; +import is2.data.F2SF; +import is2.data.FV; +import is2.data.Instances; +import is2.data.Long2Int; +import is2.data.Long2IntInterface; +import is2.data.Parse; +import is2.data.PipeGen; +import is2.data.SentenceData09; +import is2.io.CONLLReader09; +import is2.io.CONLLWriter09; +import is2.tools.Retrainable; +import is2.tools.Tool; +import is2.util.DB; +import is2.util.OptionsSuper; +import is2.util.ParserEvaluator; + +import java.io.BufferedInputStream; +import java.io.BufferedOutputStream; +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.FileOutputStream; +import java.io.IOException; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.Map.Entry; +import java.util.zip.ZipEntry; +import java.util.zip.ZipInputStream; +import java.util.zip.ZipOutputStream; + + + +public class Parser implements Tool, Retrainable { + + // output evaluation info + private static final boolean MAX_INFO = true; + + public static int THREADS =4; + + public Long2IntInterface l2i; + public ParametersFloat params; + public Pipe pipe; + public OptionsSuper options; + + + // keep some of the parsing information for later evaluation + public Instances is; + DataFES d2; + public Parse d= null; + + /** + * Initialize the parser + * @param options + */ + public Parser (OptionsSuper options) { + + this.options=options; + pipe = new Pipe(options); + + params = new ParametersFloat(0); + + // load the model + try { + readModel(options, pipe, params); + } catch (Exception e) { + e.printStackTrace(); + } + + } + + + /** + * @param modelFileName The file name of the parsing model + */ + public Parser(String modelFileName) { + this(new Options(new String[]{"-model",modelFileName})); + } + + + /** + * + */ + public Parser() { + // TODO Auto-generated constructor stub + } + + + public static void main (String[] args) throws Exception + { + + + + + long start = System.currentTimeMillis(); + OptionsSuper options = new Options(args); + + + Runtime runtime = Runtime.getRuntime(); + THREADS = runtime.availableProcessors(); + if (options.cores<THREADS&&options.cores>0) THREADS =options.cores; + DB.println("Found " + runtime.availableProcessors()+" cores use "+THREADS); + + + + if (options.train) { + + Parser p =new Parser(); + p.options=options; + + p.l2i = new Long2Int(options.hsize); + + p.pipe = new Pipe (options); + Instances is = new Instances(); + + Extractor.initFeatures(); + p.pipe.extractor = new Extractor[THREADS]; + DB.println("hsize "+options.hsize); + + DB.println("Use "+(options.featureCreation==OptionsSuper.MULTIPLICATIVE?"multiplication":"shift")+"-based feature creation function"); + for (int t=0;t<THREADS;t++) p.pipe.extractor[t]=new Extractor(p.l2i, options.stack, options.featureCreation); + + DB.println("Stacking "+options.stack); + + p.pipe.createInstances(options.trainfile,is); + + p.params = new ParametersFloat(p.l2i.size()); + + p.train(options, p.pipe,p.params,is,p.pipe.cl); + + p.writeModell(options, p.params, null,p.pipe.cl); + + } + + if (options.test) { + + // Parser p = new Parser(); + Parser p = new Parser(options); + + // p. pipe = new Pipe(options); + // p. params = new ParametersFloat(0); // total should be zero and the parameters are later read + + // load the model + + // p.readModel(options, p.pipe, p.params); + + DB.println("label only? "+options.label); + + p.out(options, p.pipe, p.params, !MAX_INFO, options.label); + } + + + + + System.out.println(); + + if (options.eval) { + System.out.println("\nEVALUATION PERFORMANCE:"); + ParserEvaluator.evaluate(options.goldfile, options.outfile); + } + + long end = System.currentTimeMillis(); + System.out.println("used time "+((float)((end-start)/100)/10)); + + Decoder.executerService.shutdown(); + Pipe.executerService.shutdown(); + System.out.println("end."); + + + } + + /** + * Read the models and mapping + * @param options + * @param pipe + * @param params + * @throws IOException + */ + public void readModel(OptionsSuper options, Pipe pipe, Parameters params) throws IOException { + + + DB.println("Reading data started"); + + // prepare zipped reader + ZipInputStream zis = new ZipInputStream(new BufferedInputStream(new FileInputStream(options.modelName))); + zis.getNextEntry(); + DataInputStream dis = new DataInputStream(new BufferedInputStream(zis)); + + pipe.mf.read(dis); + + pipe.cl = new Cluster(dis); + + params.read(dis); + this.l2i = new Long2Int(params.size()); + DB.println("parsing -- li size "+l2i.size()); + + + pipe.extractor = new Extractor[THREADS]; + + boolean stack = dis.readBoolean(); + + options.featureCreation=dis.readInt(); + + for (int t=0;t<THREADS;t++) pipe.extractor[t]=new Extractor(l2i, stack,options.featureCreation); + DB.println("Stacking "+stack); + + Extractor.initFeatures(); + Extractor.initStat(options.featureCreation); + + + for (int t=0;t<THREADS;t++) pipe.extractor[t].init(); + + Edges.read(dis); + + options.decodeProjective = dis.readBoolean(); + + Extractor.maxForm = dis.readInt(); + + boolean foundInfo =false; + try { + String info =null; + int icnt = dis.readInt(); + for(int i=0;i<icnt;i++) { + info = dis.readUTF(); + System.out.println(info); + } + } catch (Exception e) { + if (!foundInfo) System.out.println("no info about training"); + } + + + dis.close(); + + DB.println("Reading data finnished"); + + Decoder.NON_PROJECTIVITY_THRESHOLD =(float)options.decodeTH; + + Extractor.initStat(options.featureCreation); + + } + + + + /** + * Do the training + * @param instanceLengths + * @param options + * @param pipe + * @param params + * @param is + * @param cluster + * @throws IOException + * @throws InterruptedException + * @throws ClassNotFoundException + */ + public void train(OptionsSuper options, Pipe pipe, ParametersFloat params, Instances is, Cluster cluster) + throws IOException, InterruptedException, ClassNotFoundException { + + + DB.println("\nTraining Information "); + DB.println("-------------------- "); + + + Decoder.NON_PROJECTIVITY_THRESHOLD =(float)options.decodeTH; + + if (options.decodeProjective) System.out.println("Decoding: "+(options.decodeProjective?"projective":"non-projective")); + else System.out.println(""+Decoder.getInfo()); + int numInstances = is.size(); + + int maxLenInstances =0; + for(int i=0;i<numInstances;i++) if (maxLenInstances<is.length(i)) maxLenInstances=is.length(i); + + DataFES data = new DataFES(maxLenInstances, pipe.mf.getFeatureCounter().get(PipeGen.REL).shortValue()); + + int iter = 0; + int del=0; + float error =0; + float f1=0; + + FV pred = new FV(); + FV act = new FV(); + + double upd = (double)(numInstances*options.numIters)+1; + + for(; iter < options.numIters; iter++) { + + System.out.print("Iteration "+iter+": "); + + long start = System.currentTimeMillis(); + + long last= System.currentTimeMillis(); + error=0; + f1=0; + for(int n = 0; n < numInstances; n++) { + + upd--; + + if (is.labels[n].length>options.maxLen) continue; + + String info = " td "+((Decoder.timeDecotder)/1000000F)+" tr "+((Decoder.timeRearrange)/1000000F) + +" te "+((Pipe.timeExtract)/1000000F); + + if((n+1) %500 == 0) del= PipeGen.outValueErr(n+1, error,f1/n,del, last, upd,info); + + short pos[] = is.pposs[n]; + + data = pipe.fillVector((F2SF)params.getFV(), is, n, data, cluster); + + Parse d = Decoder.decode(pos, data, options.decodeProjective, Decoder.TRAINING); + + double e= pipe.errors(is, n ,d); + + if (d.f1>0)f1+=d.f1; + + if (e<=0) continue; + + pred.clear(); + pipe.extractor[0].encodeCat(is,n,pos,is.forms[n],is.plemmas[n],d.heads, d.labels, is.feats[n],pipe.cl, pred); + + error += e; + + params.getFV(); + + + act.clear(); + pipe.extractor[0].encodeCat(is,n,pos,is.forms[n],is.plemmas[n],is.heads[n], is.labels[n], is.feats[n],pipe.cl, act); + + params.update(act, pred, is, n, d, upd,e); + } + + String info = " td "+((Decoder.timeDecotder)/1000000F)+" tr "+((Decoder.timeRearrange)/1000000F) + +" te "+((Pipe.timeExtract)/1000000F)+" nz "+params.countNZ(); + PipeGen.outValueErr(numInstances, error,f1/numInstances,del,last, upd,info); + del=0; + long end = System.currentTimeMillis(); + System.out.println(" time:"+(end-start)); + + + ParametersFloat pf = params.average2((iter+1)*is.size()); + try { + + if (options.testfile!=null && options.goldfile!=null) { + out (options, pipe, pf, ! MAX_INFO,false); + ParserEvaluator.evaluate(options.goldfile, options.outfile); + // writeModell(options, pf, ""+(iter+1),pipe.cl); + } + + + } catch (Exception e) { + e.printStackTrace(); + } + + if (error==0) { + DB.println("stopped because learned all lessons"); + break; + } + + Decoder.timeDecotder=0;Decoder.timeRearrange=0; Pipe.timeExtract=0; + + + } + if (options.average)params.average(iter*is.size()); + } + + + /** + * Do the parsing job + * + * @param options + * @param pipe + * @param params + * @throws IOException + */ + private void out (OptionsSuper options, Pipe pipe, ParametersFloat params, boolean maxInfo, boolean labelOnly) + throws Exception { + + long start = System.currentTimeMillis(); + + CONLLReader09 depReader = new CONLLReader09(options.testfile, options.formatTask); + CONLLWriter09 depWriter = new CONLLWriter09(options.outfile, options.formatTask); + + int cnt = 0; + int del=0; + long last = System.currentTimeMillis(); + + if (maxInfo) System.out.println("\nParsing Information "); + if (maxInfo) System.out.println("------------------- "); + + if (maxInfo && !options.decodeProjective) System.out.println(""+Decoder.getInfo()); + + System.out.print("Processing Sentence: "); + + while(true) { + + // Instances is = new Instances(); + // is.init(1, new MFO(),options.formatTask); + + // SentenceData09 instance = pipe.nextInstance(is, depReader); + + SentenceData09 instance = depReader.getNext(); + if (instance==null) break; + cnt++; + + SentenceData09 i09 = this.parse(instance,params, labelOnly,options); + + depWriter.write(i09); + del=PipeGen.outValue(cnt, del,last); + + } + //pipe.close(); + depWriter.finishWriting(); + long end = System.currentTimeMillis(); + // DB.println("errors "+error); + if (maxInfo) System.out.println("Used time " + (end-start)); + if (maxInfo) System.out.println("forms count "+Instances.m_count+" unkown "+Instances.m_unkown); + + } + + /** + * Parse a single sentence + * + * @param instance + * @param params + * @param labelOnly + * @param options + * @return + */ + public SentenceData09 parse (SentenceData09 instance, ParametersFloat params, boolean labelOnly, OptionsSuper options) { + + String[] types = new String[pipe.mf.getFeatureCounter().get(PipeGen.REL)]; + for (Entry<String, Integer> e : MFO.getFeatureSet().get(PipeGen.REL).entrySet()) types[e.getValue()] = e.getKey(); + + is = new Instances(); + is.init(1, new MFO(),options.formatTask); + new CONLLReader09().insert(is, instance); + + // use for the training ppos + + SentenceData09 i09 = new SentenceData09(instance); + i09.createSemantic(instance); + + if (labelOnly) { + F2SF f2s =params.getFV(); + + // repair pheads + + is.pheads[0]= is.heads[0]; + + for(int l=0;l<is.pheads[0].length;l++) { + if (is.pheads[0][l]<0)is.pheads[0][l]=0; + } + + short[] labels = pipe.extractor[0].searchLabel(is, 0, is.pposs[0], is.forms[0], is.plemmas[0], is.pheads[0], is.plabels[0], is.feats[0], pipe.cl, f2s); + + for(int j = 0; j < instance.forms.length-1; j++) { + i09.plabels[j] = types[labels[j+1]]; + i09.pheads[j] = is.pheads[0][j+1]; + } + return i09; + } + + if (options.maxLength > instance.length() && options.minLength <= instance.length()) { + try { + // System.out.println("prs "+instance.forms[0]); + // System.out.println("prs "+instance.toString()); + d2 = pipe.fillVector(params.getFV(), is,0,null,pipe.cl);//cnt-1 + d =Decoder.decode(is.pposs[0],d2,options.decodeProjective, !Decoder.TRAINING); //cnt-1 + + }catch (Exception e) { + e.printStackTrace(); + } + + for(int j = 0; j < instance.forms.length-1; j++) { + i09.plabels[j] = types[d.labels[j+1]]; + i09.pheads[j] = d.heads[j+1]; + } + } + return i09; + + } + + is2.io.CONLLReader09 reader = new is2.io.CONLLReader09(true); + /* (non-Javadoc) + * @see is2.tools.Tool#apply(is2.data.SentenceData09) + */ + @Override + public SentenceData09 apply(SentenceData09 snt09) { + + SentenceData09 it = new SentenceData09(); + it.createWithRoot(snt09); + + SentenceData09 out=null; + try { + + + // for(int k=0;k<it.length();k++) { + // it.forms[k] = reader.normalize(it.forms[k]); + // it.plemmas[k] = reader.normalize(it.plemmas[k]); + // } + + out = parse(it,this.params,false,options); + + + } catch(Exception e) { + e.printStackTrace(); + } + + Decoder.executerService.shutdown(); + Pipe.executerService.shutdown(); + + return out; + } + + /** + * Get the edge scores of the last parse. + * @return the scores + */ + public float[] getInfo() { + + + float[] scores = new float[is.length(0)]; + Extractor.encode3(is.pposs[0], d.heads, d.labels, d2,scores); + + return scores; + } + + + /** + * Write the parsing model + * + * @param options + * @param params + * @param extension + * @throws FileNotFoundException + * @throws IOException + */ + private void writeModell(OptionsSuper options, ParametersFloat params, String extension, Cluster cs) throws FileNotFoundException, IOException { + + String name = extension==null?options.modelName:options.modelName+extension; + // System.out.println("Writting model: "+name); + ZipOutputStream zos = new ZipOutputStream(new BufferedOutputStream(new FileOutputStream(name))); + zos.putNextEntry(new ZipEntry("data")); + DataOutputStream dos = new DataOutputStream(new BufferedOutputStream(zos)); + + MFO.writeData(dos); + cs.write(dos); + + params.write(dos); + + dos.writeBoolean(options.stack); + dos.writeInt(options.featureCreation); + + + Edges.write(dos); + + dos.writeBoolean(options.decodeProjective); + + dos.writeInt(Extractor.maxForm); + + dos.writeInt(5); // Info count + dos.writeUTF("Used parser "+Parser.class.toString()); + dos.writeUTF("Creation date "+(new SimpleDateFormat("yyyy.MM.dd HH:mm:ss")).format(new Date())); + dos.writeUTF("Training data "+options.trainfile); + dos.writeUTF("Iterations "+options.numIters+" Used sentences "+options.count); + dos.writeUTF("Cluster "+options.clusterFile); + + dos.flush(); + dos.close(); + } + + + @Override + public boolean retrain(SentenceData09 sentence, float upd, int iterations) { + + params.total = params.parameters; + + boolean done=false; + + for(int k=0;k<iterations;k++) { + try { + // create the data structure + DataFES data = new DataFES(sentence.length(), pipe.mf.getFeatureCounter().get(PipeGen.REL).shortValue()); + + + Instances is = new Instances(); + is.m_encoder =pipe.mf; + + + + is.init(1, pipe.mf,options.formatTask); + new CONLLReader09().insert(is, sentence); + + // String list[] = ((MFO)is.m_encoder).reverse(((MFO)is.m_encoder).getFeatureSet().get(Pipe.POS)); + // for(String s :list) { + // System.out.println(s+" "); + // } + + // for(int i=0;i<is.length(0);i++) { + + // System.out.printf("%d\t %d\t %d \n",i,is.forms[0][i],is.pposs[0][i] ); + // System.out.printf("%s\t form:%s pos:%s\n",i,sentence.forms[i],sentence.ppos[i]); + + // } + + SentenceData09 i09 = new SentenceData09(sentence); + i09.createSemantic(sentence); + + + + // create the weights + data = pipe.fillVector((F2SF)params.getFV(), is, 0, data, pipe.cl); + + short[] pos = is.pposs[0]; + + // parse the sentence + Parse d = Decoder.decode(pos, data, options.decodeProjective, Decoder.TRAINING); + + // training successful? + double e= pipe.errors(is, 0 ,d); + // System.out.println("errors "+e); + if (e==0) { + + + done= true; + break; + } + + // update the weight vector + FV pred = new FV(); + pipe.extractor[0].encodeCat(is,0,pos,is.forms[0],is.plemmas[0],d.heads, d.labels, is.feats[0],pipe.cl, pred); + + params.getFV(); + + FV act = new FV(); + pipe.extractor[0].encodeCat(is,0,pos,is.forms[0],is.plemmas[0],is.heads[0], is.labels[0], is.feats[0],pipe.cl, act); + + params.update(act, pred, is, 0, d, upd,e); + + if (upd >0)upd--; + + } catch(Exception e) { + e.printStackTrace(); + } + } + Decoder.executerService.shutdown(); + Pipe.executerService.shutdown(); + + + return done; + } + + + @Override + public boolean retrain(SentenceData09 sentence, float upd, int iterations, boolean print) { + // TODO Auto-generated method stub + return retrain( sentence, upd, iterations); + } +} \ No newline at end of file diff --git a/dependencyParser/basic/mate-tools/src/is2/parser/Pipe.java b/dependencyParser/basic/mate-tools/src/is2/parser/Pipe.java new file mode 100755 index 0000000..13e9389 --- /dev/null +++ b/dependencyParser/basic/mate-tools/src/is2/parser/Pipe.java @@ -0,0 +1,221 @@ +package is2.parser; + +import is2.data.Cluster; +import is2.data.DataF; +import is2.data.DataFES; +import is2.data.F2SF; +import is2.data.Instances; + +import is2.data.Parse; +import is2.data.PipeGen; +import is2.data.SentenceData09; +import is2.io.CONLLReader09; + +import is2.util.OptionsSuper; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.concurrent.ExecutorService; + +final public class Pipe extends PipeGen { + + public Extractor[] extractor; + final public MFO mf = new MFO(); + + public Cluster cl; + + + private OptionsSuper options; + public static long timeExtract; + + public Pipe(OptionsSuper o) { + options = o; + } + + public void createInstances(String file, Instances is) + throws Exception { + + CONLLReader09 depReader = new CONLLReader09(file); + + mf.register(REL,"<root-type>"); + + // register at least one predicate since the parsing data might not contain predicates as in + // the Japaness corpus but the development sets contains some + + long sl=0; + + System.out.print("Registering feature parts of sentence: "); + int ic = 0; + int del = 0; + while (true) { + SentenceData09 instance = depReader.getNext(); + if (instance == null) break; + ic++; + + sl+=instance.labels.length; + + if (ic % 1000 == 0) { + del = outValue(ic, del); + } + + String[] labs1 = instance.labels; + for (int i1 = 0; i1 < labs1.length; i1++) mf.register(REL, labs1[i1]); + + String[] w = instance.forms; + for (int i1 = 0; i1 < w.length; i1++) mf.register(WORD, depReader.normalize(w[i1])); + + w = instance.plemmas; + for (int i1 = 0; i1 < w.length; i1++) mf.register(WORD, depReader.normalize(w[i1])); + + + w = instance.ppos; + for (int i1 = 0; i1 < w.length; i1++) mf.register(POS, w[i1]); + + w = instance.gpos; + for (int i1 = 0; i1 < w.length; i1++) mf.register(POS, w[i1]); + + if (instance.feats !=null) { + String fs[][] = instance.feats; + for (int i1 = 0; i1 < fs.length; i1++){ + w =fs[i1]; + if (w==null) continue; + for (int i2 = 0; i2 < w.length; i2++) mf.register(FEAT, w[i2]); + } + } + + if ((ic-1)>options.count) break; + } + del = outValue(ic, del); + + System.out.println(); + Extractor.initFeatures(); + + Extractor.maxForm = mf.getFeatureCounter().get(WORD); + + if (options.clusterFile==null)cl = new Cluster(); + else cl= new Cluster(options.clusterFile, mf,6); + + + + mf.calculateBits(); + Extractor.initStat(options.featureCreation); + + System.out.println(""+mf.toString()); + + for(Extractor e : extractor) e.init(); + + depReader.startReading(file); + + int num1 = 0; + + is.init(ic, new MFO()); + + Edges.init(mf.getFeatureCounter().get(POS)); + + + System.out.print("Creating edge filters and read corpus: "); + del = 0; + + while (true) { + if (num1 % 100 == 0) del = outValue(num1, del); + + SentenceData09 instance1 = depReader.getNext(is); + + if (instance1 == null) break; + + int last = is.size() - 1; + short[] pos =is.pposs[last]; + + for (int k = 0; k < is.length(last); k++) { + if (is.heads[last][k] < 0) continue; + Edges.put(pos[is.heads[last][k]],pos[k], is.labels[last][k]); +// Edges.put(pos[k],pos[is.heads[last][k]], is.labels[last][k]); + } + + if (!options.allFeatures && num1 > options.count) break; + + num1++; + + } + del = outValue(num1, del); + System.out.println(); + Edges.findDefault(); + } + + + /** + * Creates an instance for outputParses + * + * @param is + * @return + * @throws IOException + */ + protected final SentenceData09 nextInstance(Instances is, CONLLReader09 depReader) throws Exception { + + SentenceData09 instance = depReader.getNext(is); + if (instance == null || instance.forms == null) return null; + + return instance; + } + + public static ExecutorService executerService =java.util.concurrent.Executors.newFixedThreadPool(Parser.THREADS); + + + public DataFES fillVector(F2SF params, Instances is,int inst, DataFES d, Cluster cluster) throws InterruptedException { + + long ts = System.nanoTime(); + + if (executerService.isShutdown()) executerService =java.util.concurrent.Executors.newCachedThreadPool(); + + + final int length = is.length(inst); + if (d ==null || d.len<length)d = new DataFES(length,mf.getFeatureCounter().get(PipeGen.REL).shortValue()); + + ArrayList<ParallelExtract> pe = new ArrayList<ParallelExtract>(); + for(int i=0;i<Parser.THREADS;i++) pe.add(new ParallelExtract(extractor[i],is, inst, d, (F2SF)params.clone(), cluster)); + + for (int w1 = 0; w1 < length; w1++) { + for (int w2 =w1+1; w2 < length; w2++) { + + if (w1==w2) continue; + + ParallelExtract.add(w1, w2); + + + } + } +// for(int i=0;i<efp.length;i++) efp[i].start(); +// for(int i=0;i<efp.length;i++) efp[i].join(); + executerService.invokeAll( pe); + + timeExtract += (System.nanoTime()-ts); + + + + + + + return d; + } + + public double errors( Instances is, int ic, Parse p) { + short[] act = is.heads[ic]; + double correct = 0; + + // do not count root + for(int i = 1; i < act.length; i++) { + + // if (is.ppos[ic] ==null ) System.out.println("mf null"+is.ppos[ic][i]); + if (p.heads[i]==act[i] ){ + correct+=0.5; + if (p.labels[i]==is.labels[ic][i] ) correct+=0.5; + } + } + + double x = ((double)act.length- 1 - correct ); + + p.f1 = (double)correct / (double)(act.length-1); + + return x; + } +} diff --git a/dependencyParser/basic/mate-tools/src/is2/parser/package.html b/dependencyParser/basic/mate-tools/src/is2/parser/package.html new file mode 100755 index 0000000..a4f40a2 --- /dev/null +++ b/dependencyParser/basic/mate-tools/src/is2/parser/package.html @@ -0,0 +1,11 @@ +Package info +<ul> + <li> separate cluster feature to keep speed since two many features in a function reduce speed drastically. </li> + <li> try second order stacking features </li> + <li> parser stacking features </li> + <li> lots of cluster features </li> + <li> Iteration over edges and not extraction of all edges each time </li> + <li> integrated new structurer writer </li> +</ul> + Change in FS, I observed lots of duplicated grand-children features +<br> \ No newline at end of file diff --git a/dependencyParser/basic/mate-tools/src/is2/parserR2/Decoder.java b/dependencyParser/basic/mate-tools/src/is2/parserR2/Decoder.java new file mode 100755 index 0000000..1f0424e --- /dev/null +++ b/dependencyParser/basic/mate-tools/src/is2/parserR2/Decoder.java @@ -0,0 +1,377 @@ +package is2.parserR2; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashSet; +import java.util.List; +import java.util.concurrent.ExecutorService; + +import decoder.ParallelDecoder; +import decoder.ParallelRearrangeNBest; +import decoder.ParallelRearrangeNBest2; +import extractors.Extractor; + + +import is2.data.Closed; +import is2.data.DataF; +import is2.data.Instances; +import is2.data.Open; +import is2.data.Parse; +import is2.data.ParseNBest; +import is2.util.DB; + + +/** + * @author Bernd Bohnet, 01.09.2009 + * + * This methods do the actual work and they build the dependency trees. + */ +final public class Decoder { + + public static final boolean TRAINING = true; + public static long timeDecotder; + public static long timeRearrange; + + public static final boolean LAS = true; + + /** + * Threshold for rearrange edges non-projective + */ + public static float NON_PROJECTIVITY_THRESHOLD = 0.3F; + + public static ExecutorService executerService =java.util.concurrent.Executors.newFixedThreadPool(Parser.THREADS); + + + // do not initialize + private Decoder() {}; + + + /** + * Build a dependency tree based on the data + * @param pos part-of-speech tags + * @param x the data + * @param projective projective or non-projective + * @param edges the edges + * @return a parse tree + * @throws InterruptedException + */ + public static List<ParseNBest> decode(short[] pos, DataF x, boolean projective, Extractor extractor) throws InterruptedException { + + long ts = System.nanoTime(); + + if (executerService.isShutdown()) executerService = java.util.concurrent.Executors.newCachedThreadPool(); + final int n = pos.length; + + final Open O[][][][] = new Open[n][n][2][]; + final Closed C[][][][] = new Closed[n][n][2][]; + + ArrayList<ParallelDecoder> pe = new ArrayList<ParallelDecoder>(); + + for(int i=0;i<Parser.THREADS ;i++) pe.add(new ParallelDecoder(pos, x, O, C, n)); + + for (short k = 1; k < n; k++) { + + // provide the threads the data + for (short s = 0; s < n; s++) { + short t = (short) (s + k); + if (t >= n) break; + + ParallelDecoder.add(s,t); + } + + executerService.invokeAll(pe); + } + + double bestSpanScore = (-1.0F / 0.0F); + Closed bestSpan = null; + for (int m = 1; m < n; m++) + if (C[0][n - 1][1][m].p > bestSpanScore) { + bestSpanScore = C[0][n - 1][1][m].p; + bestSpan = C[0][n - 1][1][m]; + } + + // build the dependency tree from the chart + ParseNBest out= new ParseNBest(pos.length); + + bestSpan.create(out); + + out.heads[0]=-1; + out.labels[0]=0; + bestProj=out; + + timeDecotder += (System.nanoTime()-ts); + // DB.println(""+out); + + ts = System.nanoTime(); + List<ParseNBest> parses; + + if (!projective) { + + // if (training) + // rearrange(pos, out.heads, out.types,x,training); + //else { + // DB.println("bestSpan score "+(float)bestSpan.p+" comp score "+Extractor.encode3(pos, out.heads, out.types, x)); + // System.out.println(); + // Parse best = new Parse(out.heads,out.types,Extractor.encode3(pos, out.heads, out.types, x)); + parses = rearrangeNBest(pos, out.heads, out.labels,x,extractor); + // DB.println("1best "+parses.get(0).f1); + // DB.println(""+parses.get(0).toString()); + + + // for(ParseNBest p :parses) if (p.heads==null) p.signature2parse(p.signature()); + + /// if (parses.get(0).f1>(best.f1+NON_PROJECTIVITY_THRESHOLD)) out = parses.get(0); + // else out =best; + + // } + } else { + parses = new ArrayList<ParseNBest>(); + parses.add(out); + } + timeRearrange += (System.nanoTime()-ts); + + return parses; + } + + static Parse bestProj = null; + + + + + /** + * This is the parallel non-projective edge re-arranger + * + * @param pos part-of-speech tags + * @param heads parent child relation + * @param labs edge labels + * @param x the data + * @param edges the existing edges defined by part-of-speech tags + * @throws InterruptedException + */ + public static List<ParseNBest> rearrangeNBestP(short[] pos, short[] heads, short[] labs, DataF x, Extractor extractor) throws InterruptedException { + + ArrayList<ParallelRearrangeNBest2> pe = new ArrayList<ParallelRearrangeNBest2>(); + + int round =0; + ArrayList<ParseNBest> parses = new ArrayList<ParseNBest>(); + ParseNBest px =new ParseNBest(); + px.signature(heads,labs); + //Object extractor; + px.f1=extractor.encode3(pos, heads, labs, x); + parses.add(px); + + float lastNBest = Float.NEGATIVE_INFINITY; + + HashSet<Parse> done = new HashSet<Parse>(); + gnu.trove.THashSet<CharSequence> contained = new gnu.trove.THashSet<CharSequence>(); + + while(true) { + + pe.clear(); + + // used the first three parses + int ic=0, considered=0; + while(true) { + + if (parses.size()<=ic || considered>11) break; + + ParseNBest parse = parses.get(ic); + + ic++; + // parse already extended + if (done.contains(parse)) continue; + considered++; + + parse.signature2parse(parse.signature()); + + done.add(parse); + + + boolean[][] isChild = new boolean[heads.length][heads.length]; + + for(int i = 1, l1=1; i < heads.length; i++,l1=i) + while((l1= heads[l1]) != -1) isChild[l1][i] = true; + + + // check the list of new possible parents and children for a better combination + for(short ch = 1; ch < heads.length; ch++) { + for(short pa = 0; pa < heads.length; pa++) { + if(ch == pa || pa == heads[ch] || isChild[ch][pa]) continue; + ParallelRearrangeNBest2.add(parse.clone(), ch, pa); + } + } + + } + + for(int t =0;t<Parser.THREADS;t++) pe.add(new ParallelRearrangeNBest2( pos,x,lastNBest,extractor, NON_PROJECTIVITY_THRESHOLD) ); + + + executerService.invokeAll(pe); + + // avoid to add parses several times + for(ParallelRearrangeNBest2 rp : pe) { + for(int k=rp.parses.size()-1;k>=0;k--) { + if (lastNBest>rp.parses.get(k).f1) continue; + CharSequence sig = rp.parses.get(k).signature(); + if (!contained.contains(sig)) { + parses.add(rp.parses.get(k)); + contained.add(sig); + } + } + } + + Collections.sort(parses); + + if (round >=2) break; + round ++; + + // do not use to much memory + if (parses.size()>Parser.NBest) { + // if (parses.get(Parser.NBest).f1>lastNBest) lastNBest = (float)parses.get(Parser.NBest).f1; + parses.subList(Parser.NBest, parses.size()-1).clear(); + } + } + return parses; + } + + + /** + * This is the parallel non-projective edge re-arranger + * + * @param pos part-of-speech tags + * @param heads parent child relation + * @param labs edge labels + * @param x the data + * @param edges the existing edges defined by part-of-speech tags + * @throws InterruptedException + */ + public static List<ParseNBest> rearrangeNBest(short[] pos, short[] heads, short[] labs, DataF x, Extractor extractor) throws InterruptedException { + + ArrayList<ParallelRearrangeNBest> pe = new ArrayList<ParallelRearrangeNBest>(); + + int round =0; + ArrayList<ParseNBest> parses = new ArrayList<ParseNBest>(); + ParseNBest px =new ParseNBest(); + px.signature(heads,labs); + //Object extractor; + px.f1=extractor.encode3(pos, heads, labs, x); + parses.add(px); + + float lastNBest = Float.NEGATIVE_INFINITY; + + HashSet<Parse> done = new HashSet<Parse>(); + gnu.trove.THashSet<CharSequence> contained = new gnu.trove.THashSet<CharSequence>(); + while(true) { + + pe.clear(); + + // used the first three parses + int i=0; + while(true) { + + if (parses.size()<=i||pe.size()>12) break; + + ParseNBest parse = parses.get(i); + + i++; + + // parse already extended + if (done.contains(parse)) continue; + +// DB.println("err "+parse.heads); + + parse.signature2parse(parse.signature()); + + done.add(parse); + pe.add(new ParallelRearrangeNBest( pos,x,parse,lastNBest,extractor, (float)parse.f1,NON_PROJECTIVITY_THRESHOLD) ); + } + + executerService.invokeAll(pe); + + // avoid to add parses several times + for(ParallelRearrangeNBest rp : pe) { + for(int k=rp.parses.size()-1;k>=0;k--) { + if (lastNBest>rp.parses.get(k).f1) continue; + CharSequence sig = rp.parses.get(k).signature(); + if (!contained.contains(sig)) { + parses.add(rp.parses.get(k)); + contained.add(sig); + } + } + } + + Collections.sort(parses); + + if (round >=2) break; + round ++; + + // do not use to much memory + if (parses.size()>Parser.NBest) { + if (parses.get(Parser.NBest).f1>lastNBest) lastNBest = (float)parses.get(Parser.NBest).f1; + parses.subList(Parser.NBest, parses.size()-1).clear(); + } + } + return parses; + } + + public static String getInfo() { + + return "Decoder non-projectivity threshold: "+NON_PROJECTIVITY_THRESHOLD; + } + + + /** + * @param parses + * @param is + * @param i + * @return + */ + public static int getGoldRank(List<ParseNBest> parses, Instances is, int i, boolean las) { + + for(int p=0;p<parses.size();p++) { + + if (parses.get(p).heads==null)parses.get(p).signature2parse(parses.get(p).signature()); + + boolean eq =true; + for(int w =1;w<is.length(0);w++) { + if (is.heads[i][w]!=parses.get(p).heads[w] || (is.labels[i][w]!=parses.get(p).labels[w]&& las )) { + eq=false; + break; + } + } + if (eq) return p; + } + return -1; + } + + public static int getSmallestError(List<ParseNBest> parses, Instances is, int i, boolean las) { + + int smallest=-1; + for(int p=0;p<parses.size();p++) { + + int err=0; + for(int w =1;w<is.length(0);w++) { + if (is.heads[i][w]!=parses.get(p).heads[w] || (is.labels[i][w]!=parses.get(p).labels[w] && las )) { + err++; + } + } + if (smallest==-1||smallest>err) smallest=err; + if (smallest==0) return 0; + } + return smallest; + } + + public static int getError(ParseNBest parse, Instances is, int i, boolean las) { + + + int err=0; + for(int w =1;w<is.length(i);w++) { + if (is.heads[i][w]!=parse.heads[w] || (is.labels[i][w]!=parse.labels[w] && las )) { + err++; + } + } + return err; + } + + +} diff --git a/dependencyParser/basic/mate-tools/src/is2/parserR2/Options.java b/dependencyParser/basic/mate-tools/src/is2/parserR2/Options.java new file mode 100755 index 0000000..b5ec0f9 --- /dev/null +++ b/dependencyParser/basic/mate-tools/src/is2/parserR2/Options.java @@ -0,0 +1,77 @@ +package is2.parserR2; + +import is2.util.OptionsSuper; + + +public final class Options extends OptionsSuper { + + + int start=0, end=0; + String prefix_model ="m"; + String prefix_test ="t"; + + public Options (String[] args) { + + for(int i = 0; i < args.length; i++) { + + if (args[i].equals("--help")) explain(); + + if (args[i].equals("-decode")) { + decodeProjective = args[i+1].equals("proj"); i++; + } else if (args[i].equals("-decodeTH")) { + decodeTH = Double.parseDouble(args[i+1]); i++; + } else if (args[i].equals("-nonormalize")) { + normalize=false; + } else if (args[i].equals("-features")) { + features= args[i+1]; i++; + } else if (args[i].equals("-hsize")) { + hsize= Integer.parseInt(args[i+1]); i++; + } else if (args[i].equals("-len")) { + maxLen= Integer.parseInt(args[i+1]); i++; + } else if (args[i].equals("-cores")) { + cores= Integer.parseInt(args[i+1]); i++; + } else if (args[i].equals("-best")) { + best= Integer.parseInt(args[i+1]); i++; + } else if (args[i].equals("-start")) { + start= Integer.parseInt(args[i+1]); i++; + } else if (args[i].equals("-end")) { + end= Integer.parseInt(args[i+1]); i++; + } else if (args[i].equals("-prefix-model")) { + prefix_model= args[i+1]; i++; + } else if (args[i].equals("-prefix-test")) { + prefix_test= args[i+1]; i++; + } else if (args[i].equals("-mapping")) { + this.useMapping= args[i+1]; i++; + } else if (args[i].equals("-no2nd")) { + no2nd= true; + } else if (args[i].equals("-few2nd")) { + few2nd= true; + } else super.addOption(args, i); + + } + + + + } + + private void explain() { + System.out.println("Usage: "); + System.out.println("java -class mate.jar is2.parser.Parser [Options]"); + System.out.println(); + System.out.println("Example: "); + System.out.println(" java -class mate.jar is2.parser.Parser -model eps3.model -train corpora/conll08st/train/train.closed -test corpora/conll08st/devel/devel.closed -out b3.test -eval corpora/conll08st/devel/devel.closed -count 2000 -i 6"); + System.out.println(""); + System.out.println("Options:"); + System.out.println(""); + System.out.println(" -train <file> the corpus a model is trained on; default "+this.trainfile); + System.out.println(" -test <file> the input corpus for testing; default "+this.testfile); + System.out.println(" -out <file> the output corpus (result) of a test run; default "+this.outfile); + System.out.println(" -model <file> the parsing model for traing the model is stored in the files"); + System.out.println(" and for parsing the model is load from this file; default "+this.modelName); + System.out.println(" -i <number> the number of training iterations; good numbers are 10 for smaller corpora and 6 for bigger; default "+this.numIters); + System.out.println(" -count <number> the n first sentences of the corpus are take for the training default "+this.count); + System.out.println(" -format <number> conll format of the year 8 or 9; default "+this.formatTask); + + System.exit(0); + } +} diff --git a/dependencyParser/basic/mate-tools/src/is2/parserR2/Parameters.java b/dependencyParser/basic/mate-tools/src/is2/parserR2/Parameters.java new file mode 100755 index 0000000..0917ea8 --- /dev/null +++ b/dependencyParser/basic/mate-tools/src/is2/parserR2/Parameters.java @@ -0,0 +1,38 @@ +/** + * + */ +package is2.parserR2; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; + +import is2.data.FV; +import is2.data.IFV; +import is2.data.Instances; +import is2.data.Parse; + +/** + * @author Bernd Bohnet, 31.08.2009 + * + * + */ +public abstract class Parameters { + + + public abstract void average(double avVal); + + public abstract void update(FV act, FV pred, Instances isd, int instc, Parse d, double upd, double e); + + public abstract void write(DataOutputStream dos) throws IOException; + + public abstract void read(DataInputStream dis ) throws IOException; + + public abstract int size(); + + /** + * @return + */ + public abstract IFV getFV() ; + +} diff --git a/dependencyParser/basic/mate-tools/src/is2/parserR2/ParametersFloat.java b/dependencyParser/basic/mate-tools/src/is2/parserR2/ParametersFloat.java new file mode 100755 index 0000000..44e6d76 --- /dev/null +++ b/dependencyParser/basic/mate-tools/src/is2/parserR2/ParametersFloat.java @@ -0,0 +1,181 @@ +package is2.parserR2; + +import is2.data.F2SF; +import is2.data.FV; +import is2.data.FVR; +import is2.data.Instances; +import is2.data.Parse; +import is2.util.DB; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; + + + +final public class ParametersFloat extends Parameters { + + public float[] parameters; + private float[] total; + + public ParametersFloat(int size) { + parameters = new float[size]; + total = new float[size]; + for(int i = 0; i < parameters.length; i++) { + parameters[i] = 0F; + total[i] = 0F; + } + } + + + /** + * @param parameters2 + */ + public ParametersFloat(float[] p) { + parameters =p; + } + + + @Override + public void average(double avVal) { + for(int j = 0; j < total.length; j++) { + parameters[j] = total[j]/((float)avVal); + } + total =null; + } + + public ParametersFloat average2(double avVal) { + float[] px = new float[this.parameters.length]; + for(int j = 0; j < total.length; j++) { + px[j] = total[j]/((float)avVal); + } + ParametersFloat pf = new ParametersFloat(px); + return pf; + } + + + public void update(FV act, FV pred, Instances isd, int instc, Parse dx, double upd, double e, + float d, float f) { + + e++; + + float lam_dist = d - f; + + float b = (float)e-lam_dist; + + FV dist = act.getDistVector(pred); + + dist.update(parameters, total, hildreth(dist,b), upd,false); + } + + public void update(FV act, FV pred, Instances isd, int instc, Parse dx, double upd, double e) { + + e++; + + float lam_dist = getScore(act) - getScore(pred); + + float b = (float)e-lam_dist; + + FV dist = act.getDistVector(pred); + + dist.update(parameters, total, hildreth(dist,b), upd,false); + } + + public void update(FVR act, FVR pred, Instances isd, int instc, Parse dx, double upd, double e, float lam_dist) { + + e++; + + + float b = (float)e-lam_dist; + + FVR dist = act.getDistVector(pred); + + dist.update(parameters, total, hildreth(dist,b), upd,false); + } + + + protected double hildreth(FV a, double b) { + + double A = a.dotProduct(a); + if (A<=0.0000000000000000001) return 0.0; + return b/A; + } + + + protected double hildreth(FVR a, double b) { + + double A = a.dotProduct(a); + if (A<=0.0000000000000000001) return 0.0; + return b/A; + } + + + public float getScore(FV fv) { + if (fv ==null) return 0.0F; + return fv.getScore(parameters,false); + + } + + public float getScore(FVR fv) { //xx + if (fv ==null) return 0.0F; + return fv.getScore(parameters,false); + + } + + + @Override + final public void write(DataOutputStream dos) throws IOException{ + + dos.writeInt(parameters.length); + for(float d : parameters) dos.writeFloat(d); + + } + + @Override + public void read(DataInputStream dis ) throws IOException{ + + parameters = new float[dis.readInt()]; + int notZero=0; + for(int i=0;i<parameters.length;i++) { + parameters[i]=dis.readFloat(); + if (parameters[i]!=0.0F) notZero++; + } + + + DB.println("read parameters "+parameters.length+" not zero "+notZero); + + } + + public int countNZ() { + + int notZero=0; + for(int i=0;i<parameters.length;i++) { + if (parameters[i]!=0.0F) notZero++; + } + return notZero; + + // DB.println("read parameters "+parameters.length+" not zero "+notZero); + + } + + + /* (non-Javadoc) + * @see is2.sp09k99995.Parameters#getFV() + */ + @Override + public F2SF getFV() { + return new F2SF(parameters); + } + + + /* (non-Javadoc) + * @see is2.sp09k99999.Parameters#size() + */ + @Override + public int size() { + return parameters.length; + } + + + +} diff --git a/dependencyParser/basic/mate-tools/src/is2/parserR2/Parser.java b/dependencyParser/basic/mate-tools/src/is2/parserR2/Parser.java new file mode 100755 index 0000000..b0cfe9e --- /dev/null +++ b/dependencyParser/basic/mate-tools/src/is2/parserR2/Parser.java @@ -0,0 +1,690 @@ +package is2.parserR2; + + +import is2.data.Cluster; +import is2.data.DataF; +import is2.data.Edges; +import is2.data.F2SF; +import is2.data.FV; +import is2.data.Instances; +import is2.data.Long2Int; +import is2.data.Long2IntInterface; +import is2.data.MFB; +import is2.data.Parse; +import is2.data.ParseNBest; +import is2.data.PipeGen; +import is2.data.SentenceData09; +import is2.io.CONLLReader09; +import is2.io.CONLLWriter09; + +import is2.tools.Tool; +import is2.util.DB; +import is2.util.OptionsSuper; +import is2.util.ParserEvaluator; + +import java.io.BufferedInputStream; +import java.io.BufferedOutputStream; +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.FileOutputStream; +import java.io.IOException; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map.Entry; +import java.util.zip.ZipEntry; +import java.util.zip.ZipInputStream; +import java.util.zip.ZipOutputStream; + +//import extractors.ExtractorClusterStackedR2; +import extractors.Extractor; +import extractors.ExtractorFactory; + + + +public class Parser implements Tool { + + // output evaluation info + private static final boolean MAX_INFO = true; + + public static int THREADS =4; + + Long2IntInterface l2i; + ParametersFloat params; + Pipe pipe; + OptionsSuper options; + + HashMap<Integer,Integer> rank = new HashMap<Integer,Integer>(); + int amongxbest=0, amongxbest_ula=0, nbest=0,bestProj=0, smallestErrorSum=0, countAllNodes=0; + static int NBest =1000; + + ExtractorFactory extractorFactory = new ExtractorFactory(ExtractorFactory.StackedClusteredR2); + + + /** + * Initialize the parser + * @param options + */ + public Parser (OptionsSuper options) { + + this.options=options; + pipe = new Pipe(options); + + params = new ParametersFloat(0); + + // load the model + try { + readModel(options, pipe, params); + } catch (Exception e) { + e.printStackTrace(); + } + + } + + + /** + * @param modelFileName The file name of the parsing model + */ + public Parser(String modelFileName) { + this(new Options(new String[]{"-model",modelFileName})); + } + + + /** + * + */ + public Parser() { + // TODO Auto-generated constructor stub + } + + + public static void main (String[] args) throws Exception + { + + long start = System.currentTimeMillis(); + OptionsSuper options = new Options(args); + + NBest = options.best; + + DB.println("n-best"+NBest); + + Runtime runtime = Runtime.getRuntime(); + THREADS = runtime.availableProcessors(); + if (options.cores<THREADS&&options.cores>0) THREADS =options.cores; + + DB.println("Found " + runtime.availableProcessors()+" cores use "+THREADS); + + if (options.train) { + + Parser p =new Parser(); + p.options=options; + + p.l2i = new Long2Int(options.hsize); + + p.pipe = new Pipe (options); + Instances is = new Instances(); + + p.pipe.extractor = new Extractor[THREADS]; + + for (int t=0;t<THREADS;t++) p.pipe.extractor[t]=p.extractorFactory.getExtractor( p.l2i); + + p.params = new ParametersFloat(p.l2i.size()); + + if (options.useMapping!=null) { + String model = options.modelName; + + options.modelName = options.useMapping; + DB.println("Using mapping of model "+options.modelName); + ZipInputStream zis = new ZipInputStream(new BufferedInputStream(new FileInputStream(options.modelName))); + zis.getNextEntry(); + DataInputStream dis = new DataInputStream(new BufferedInputStream(zis)); + p.pipe.mf.read(dis); + + DB.println("read\n"+p.pipe.mf.toString()); + + ParametersFloat params = new ParametersFloat(0); + params.read(dis); + + Edges.read(dis); + + dis.close(); + DB.println("end read model"); + options.modelName = model; + } + + + p.pipe.createInstances(options.trainfile,is); + + + p.train(options, p.pipe,p.params,is,p.pipe.cl); + + p.writeModell(options, p.params, null,p.pipe.cl); + + } + + if (options.test) { + + Parser p = new Parser(); + p.options=options; + + p. pipe = new Pipe(options); + p. params = new ParametersFloat(0); // total should be zero and the parameters are later read + + // load the model + + p.readModel(options, p.pipe, p.params); + + DB.println("test on "+options.testfile); + + System.out.println(""+p.pipe.mf.toString()); + + + p.outputParses(options, p.pipe, p.params, !MAX_INFO); + + } + + System.out.println(); + + if (options.eval) { + System.out.println("\nEVALUATION PERFORMANCE:"); + ParserEvaluator.evaluate(options.goldfile, options.outfile); + } + + long end = System.currentTimeMillis(); + System.out.println("used time "+((float)((end-start)/100)/10)); + + Decoder.executerService.shutdown(); + Pipe.executerService.shutdown(); + System.out.println("end."); + + + } + + /** + * Read the models and mapping + * @param options + * @param pipe + * @param params + * @throws IOException + */ + public void readModel(OptionsSuper options, Pipe pipe, Parameters params) throws IOException { + + + DB.println("Reading data started"); + + // prepare zipped reader + ZipInputStream zis = new ZipInputStream(new BufferedInputStream(new FileInputStream(options.modelName))); + zis.getNextEntry(); + DataInputStream dis = new DataInputStream(new BufferedInputStream(zis)); + + pipe.mf.read(dis); + + pipe.cl = new Cluster(dis); + + params.read(dis); + this.l2i = new Long2Int(params.size()); + DB.println("parsing -- li size "+l2i.size()); + + pipe.extractor = new Extractor[THREADS]; + + for (int t=0;t<THREADS;t++) pipe.extractor[t]=this.extractorFactory.getExtractor(l2i); + + Edges.read(dis); + + options.decodeProjective = dis.readBoolean(); + + int maxForm = dis.readInt(); + + for (int t=0;t<THREADS;t++) { + pipe.extractor[t].setMaxForm(maxForm); + pipe.extractor[t].initStat(); + pipe.extractor[t].init(); + } + + boolean foundInfo =false; + try { + String info =null; + int icnt = dis.readInt(); + for(int i=0;i<icnt;i++) { + info = dis.readUTF(); + System.out.println(info); + } + } catch (Exception e) { + if (!foundInfo) System.out.println("no info about training"); + } + + + dis.close(); + + DB.println("Reading data finnished"); + + Decoder.NON_PROJECTIVITY_THRESHOLD =(float)options.decodeTH; + for (int t=0;t<THREADS;t++) { + pipe.extractor[t].initStat(); + pipe.extractor[t].init(); + } + + } + + + + /** + * Do the training + * @param instanceLengths + * @param options + * @param pipe + * @param params + * @param is + * @param cluster + * @throws IOException + * @throws InterruptedException + * @throws ClassNotFoundException + */ + public void train(OptionsSuper options, Pipe pipe, ParametersFloat params, Instances is, Cluster cluster) + throws IOException, InterruptedException, ClassNotFoundException { + + + DB.println("\nTraining Information "); + DB.println("-------------------- "); + + + Decoder.NON_PROJECTIVITY_THRESHOLD =(float)options.decodeTH; + + if (options.decodeProjective) System.out.println("Decoding: "+(options.decodeProjective?"projective":"non-projective")); + else System.out.println(""+Decoder.getInfo()); + int numInstances = is.size(); + + int maxLenInstances =0; + for(int i=0;i<numInstances;i++) if (maxLenInstances<is.length(i)) maxLenInstances=is.length(i); + + DataF data = new DataF(maxLenInstances, pipe.mf.getFeatureCounter().get(PipeGen.REL).shortValue()); + + int iter = 0; + int del=0; + float error =0; + float f1=0; + + FV pred = new FV(); + FV act = new FV(); + + double upd = (double)(numInstances*options.numIters)+1; + + for(; iter < options.numIters; iter++) { + + System.out.print("Iteration "+iter+": "); + + long start = System.currentTimeMillis(); + + long last= System.currentTimeMillis(); + error=0; + f1=0; + for(int n = 0; n < numInstances; n++) { + + upd--; + + if (is.labels[n].length>options.maxLen) continue; + + String info = " td "+((Decoder.timeDecotder)/1000000F)+" tr "+((Decoder.timeRearrange)/1000000F) + +" te "+((Pipe.timeExtract)/1000000F); + + if((n+1) %500 == 0) del= PipeGen.outValueErr(n+1,Math.round(error*1000)/1000,f1/n,del, last, upd,info); + + short pos[] = is.pposs[n]; + + data = pipe.fillVector((F2SF)params.getFV(), is, n, data, cluster, THREADS, l2i); + + List<ParseNBest> parses = Decoder.decode(pos, data, options.decodeProjective,pipe.extractor[0]); + Parse d = parses.get(0); + double e= pipe.errors(is, n ,d); + + if (d.f1>0)f1+=(d.labels.length-1 -e) /(d.labels.length-1); + + if (e<=0) continue; + + // get predicted feature vector + pred.clear(); + pipe.extractor[0].encodeCat(is,n,pos,is.forms[n],is.plemmas[n],d.heads, d.labels, is.feats[n],pipe.cl, pred); + + error += e; + + act.clear(); + pipe.extractor[0].encodeCat(is,n,pos,is.forms[n],is.plemmas[n],is.heads[n], is.labels[n], is.feats[n],pipe.cl, act); + + params.update(act, pred, is, n, d, upd,e); + } + + String info = " td "+((Decoder.timeDecotder)/1000000F)+" tr "+((Decoder.timeRearrange)/1000000F) + +" te "+((Pipe.timeExtract)/1000000F)+" nz "+params.countNZ(); + PipeGen.outValueErr(numInstances,Math.round(error*1000)/1000,f1/numInstances,del,last, upd,info); + del=0; + long end = System.currentTimeMillis(); + System.out.println(" time:"+(end-start)); + + + ParametersFloat pf = params.average2((iter+1)*is.size()); + try { + + if (options.testfile!=null) { + outputParses (options, pipe, pf, ! MAX_INFO); + ParserEvaluator.evaluate(options.goldfile, options.outfile); + // writeModell(options, pf, ""+(iter+1),pipe.cl); + } + + + } catch (Exception e) { + e.printStackTrace(); + } + + + Decoder.timeDecotder=0;Decoder.timeRearrange=0; Pipe.timeExtract=0; + + + } + params.average(iter*is.size()); + } + + + /** + * Do the parsing + * @param options + * @param pipe + * @param params + * @throws IOException + */ + private void outputParses (OptionsSuper options, Pipe pipe, ParametersFloat params, boolean maxInfo) throws Exception { + + long start = System.currentTimeMillis(); + + CONLLReader09 depReader = new CONLLReader09(options.testfile, options.formatTask); + CONLLWriter09 depWriter = new CONLLWriter09(options.outfile, options.formatTask); + +// ExtractorClusterStacked.initFeatures(); + + int cnt = 0; + int del=0; + long last = System.currentTimeMillis(); + + if (maxInfo) System.out.println("\nParsing Information "); + if (maxInfo) System.out.println("------------------- "); + + if (maxInfo && !options.decodeProjective) System.out.println(""+Decoder.getInfo()); + + // if (!maxInfo) System.out.println(); + + String[] types = new String[pipe.mf.getFeatureCounter().get(PipeGen.REL)]; + for (Entry<String, Integer> e : pipe.mf.getFeatureSet().get(PipeGen.REL).entrySet()) types[e.getValue()] = e.getKey(); + + + System.out.print("Processing Sentence: "); + + while(true) { + + Instances is = new Instances(); + is.init(1, new MFB(),options.formatTask); + + SentenceData09 instance = pipe.nextInstance(is, depReader); + if (instance==null) break; + cnt++; + + SentenceData09 i09 = this.parse(instance,params); + + // } + depWriter.write(i09); + del=PipeGen.outValue(cnt, del,last); + // DB.println("xbest "+amongxbest+" cnt "+cnt+" "+((float)((float)amongxbest/cnt))+" nbest "+((float)nbest/cnt)+ + // " 1best "+((float)(rank.get(0)==null?0:rank.get(0))/cnt)+" best-proj "+((float)bestProj/cnt)); + + } + + //pipe.close(); + + depWriter.finishWriting(); + long end = System.currentTimeMillis(); + DB.println("rank\n"+rank+"\n"); + DB.println("x-best-las "+amongxbest+" x-best-ula "+amongxbest_ula+" cnt "+cnt+" x-best-las " + +((float)((float)amongxbest/cnt))+ + " x-best-ula "+((float)((float)amongxbest_ula/cnt))+ + " nbest "+((float)nbest/cnt)+ + " 1best "+((float)(rank.get(0)==null?0:rank.get(0))/cnt)+ + " best-proj "+((float)bestProj/cnt)+ + " Sum LAS "+((float)this.smallestErrorSum/countAllNodes)); + + // DB.println("errors "+error); + + rank.clear(); + amongxbest=0;amongxbest_ula=0; + cnt=0; + nbest=0; + bestProj=0; + if (maxInfo) System.out.println("Used time " + (end-start)); + if (maxInfo) System.out.println("forms count "+Instances.m_count+" unkown "+Instances.m_unkown); + + } + + + /** + * Do the parsing + * @param options + * @param pipe + * @param params + * @throws IOException + */ + private void getNBest(OptionsSuper options, Pipe pipe, ParametersFloat params, boolean maxInfo) throws Exception { + + + CONLLReader09 depReader = new CONLLReader09(options.testfile, options.formatTask); + + // ExtractorClusterStacked.initFeatures(); + + int cnt = 0; + + String[] types = new String[pipe.mf.getFeatureCounter().get(PipeGen.REL)]; + for (Entry<String, Integer> e : pipe.mf.getFeatureSet().get(PipeGen.REL).entrySet()) types[e.getValue()] = e.getKey(); + +// System.out.print("Processing Sentence: "); + + while(true) { + + Instances is = new Instances(); + is.init(1, new MFB(),options.formatTask); + + SentenceData09 instance = pipe.nextInstance(is, depReader); + if (instance==null) break; + cnt++; + + this.parseNBest(instance); + } + + //pipe.close(); +// depWriter.finishWriting(); +// long end = System.currentTimeMillis(); +// DB.println("rank\n"+rank+"\n"); +// DB.println("x-best-las "+amongxbest+" x-best-ula "+amongxbest_ula+" cnt "+cnt+" x-best-las " +// +((float)((float)amongxbest/cnt))+ +// " x-best-ula "+((float)((float)amongxbest_ula/cnt))+ +// " nbest "+((float)nbest/cnt)+ +// " 1best "+((float)(rank.get(0)==null?0:rank.get(0))/cnt)+ +// " best-proj "+((float)bestProj/cnt)); + // DB.println("errors "+error); + + + } + + + public SentenceData09 parse (SentenceData09 instance, ParametersFloat params) { + + String[] types = new String[pipe.mf.getFeatureCounter().get(PipeGen.REL)]; + for (Entry<String, Integer> e : MFB.getFeatureSet().get(PipeGen.REL).entrySet()) types[e.getValue()] = e.getKey(); + + Instances is = new Instances(); + is.init(1, new MFB(),options.formatTask); + new CONLLReader09().insert(is, instance); + + String[] forms = instance.forms; + + // use for the training ppos + DataF d2; + try { + d2 = pipe.fillVector(params.getFV(), is,0,null,pipe.cl,THREADS,l2i);//cnt-1 + } catch (Exception e ) { + e.printStackTrace(); + return null; + } + short[] pos = is.pposs[0]; + + List<ParseNBest> parses=null; + Parse d= null; + try { + parses =Decoder.decode(pos,d2,options.decodeProjective,pipe.extractor[0]); //cnt-1 + d = parses.get(0); + }catch (Exception e) { + e.printStackTrace(); + } + + if (parses.size()>NBest) parses = parses.subList(0,NBest); + + int g_las = Decoder.getGoldRank(parses, is,0,Decoder.LAS); + int g_ula = Decoder.getGoldRank(parses, is,0,!Decoder.LAS); + + int smallest = Decoder.getSmallestError(parses, is,0,!Decoder.LAS); + smallestErrorSum+=is.length(0)-smallest; + countAllNodes+=is.length(0); + + if (g_las>=0) amongxbest++; + if (g_ula>=0) amongxbest_ula++; + + nbest+=parses.size(); + + Integer r = rank.get(g_las); + if (r==null) rank.put(g_las, 1); + else rank.put(g_las, r+1); + + float err = (float)this.pipe.errors(is,0, d); + + float errBestProj = (float)this.pipe.errors(is,0, Decoder.bestProj); + + if (errBestProj==0) bestProj++; + + SentenceData09 i09 = new SentenceData09(instance); + + i09.createSemantic(instance); + + for(int j = 0; j < forms.length-1; j++) { + i09.plabels[j] = types[d.labels[j+1]]; + i09.pheads[j] = d.heads[j+1]; + } + return i09; + + } + + public List<ParseNBest> parseNBest (SentenceData09 instance) { + + Instances is = new Instances(); + is.init(1, new MFB(),options.formatTask); + new CONLLReader09().insert(is, instance); + + // use for the training ppos + DataF d2; + try { + d2 = pipe.fillVector(params.getFV(), is,0,null,pipe.cl,THREADS, l2i);//cnt-1 + } catch (Exception e ) { + e.printStackTrace(); + return null; + } + short[] pos = is.pposs[0]; + + List<ParseNBest> parses=null; + try { + parses =Decoder.decode(pos,d2,options.decodeProjective,pipe.extractor[0]); //cnt-1 + }catch (Exception e) { + e.printStackTrace(); + } + + + if (parses.size()>NBest) parses = parses.subList(0,NBest); + + return parses; + + } + + + + /* (non-Javadoc) + * @see is2.tools.Tool#apply(is2.data.SentenceData09) + */ + + @Override + public SentenceData09 apply(SentenceData09 snt09) { + + SentenceData09 it = new SentenceData09(); + it.createWithRoot(snt09); + + SentenceData09 out=null; + try { + + + // for(int k=0;k<it.length();k++) { + // it.forms[k] = reader.normalize(it.forms[k]); + // it.plemmas[k] = reader.normalize(it.plemmas[k]); + // } + + out = parse(it,this.params); + + + } catch(Exception e) { + e.printStackTrace(); + } + + Decoder.executerService.shutdown(); + Pipe.executerService.shutdown(); + + return out; + } + + /** + * Write the parsing model + * + * @param options + * @param params + * @param extension + * @throws FileNotFoundException + * @throws IOException + */ + private void writeModell(OptionsSuper options, ParametersFloat params, String extension, Cluster cs) throws FileNotFoundException, IOException { + + String name = extension==null?options.modelName:options.modelName+extension; +// System.out.println("Writting model: "+name); + ZipOutputStream zos = new ZipOutputStream(new BufferedOutputStream(new FileOutputStream(name))); + zos.putNextEntry(new ZipEntry("data")); + DataOutputStream dos = new DataOutputStream(new BufferedOutputStream(zos)); + + MFB.writeData(dos); + cs.write(dos); + + params.write(dos); + + Edges.write(dos); + + dos.writeBoolean(options.decodeProjective); + + dos.writeInt(pipe.extractor[0].getMaxForm()); + + dos.writeInt(5); // Info count + dos.writeUTF("Used parser "+Parser.class.toString()); + dos.writeUTF("Creation date "+(new SimpleDateFormat("yyyy.MM.dd HH:mm:ss")).format(new Date())); + dos.writeUTF("Training data "+options.trainfile); + dos.writeUTF("Iterations "+options.numIters+" Used sentences "+options.count); + dos.writeUTF("Cluster "+options.clusterFile); + + dos.flush(); + dos.close(); + } + + + + +} diff --git a/dependencyParser/basic/mate-tools/src/is2/parserR2/Pipe.java b/dependencyParser/basic/mate-tools/src/is2/parserR2/Pipe.java new file mode 100755 index 0000000..ad545ec --- /dev/null +++ b/dependencyParser/basic/mate-tools/src/is2/parserR2/Pipe.java @@ -0,0 +1,257 @@ +package is2.parserR2; + +import is2.data.Cluster; +import is2.data.DataF; +import is2.data.Edges; +import is2.data.F2SF; +import is2.data.Instances; +import is2.data.Long2IntInterface; +import is2.data.MFB; + +import is2.data.Parse; +import is2.data.PipeGen; +import is2.data.SentenceData09; +import is2.io.CONLLReader09; + +import is2.util.DB; +import is2.util.OptionsSuper; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.concurrent.ExecutorService; + +import extractors.Extractor; +import extractors.ExtractorClusterStacked; +import extractors.ExtractorClusterStackedR2; +import extractors.ParallelExtract; + +final public class Pipe extends PipeGen { + + public Extractor[] extractor; + final public MFB mf = new MFB(); + + Cluster cl; + + + private OptionsSuper options; + public static long timeExtract; + + public Pipe(OptionsSuper o) { + options = o; + } + + public void createInstances(String file, Instances is) + // throws Exception + + { + + + CONLLReader09 depReader = new CONLLReader09(file); + + mf.register(REL,"<root-type>"); + + // register at least one predicate since the parsing data might not contain predicates as in + // the Japaness corpus but the development sets contains some + + long sl=0; + + System.out.print("Registering feature parts of sentence: "); + int ic = 0; + int del = 0; + while (true) { + SentenceData09 instance = depReader.getNext(); + if (instance == null) break; + ic++; + + sl+=instance.labels.length; + + if (ic % 1000 == 0) { + del = outValue(ic, del); + } + + String[] labs1 = instance.labels; + for (int i1 = 0; i1 < labs1.length; i1++) mf.register(REL, labs1[i1]); + + String[] w = instance.forms; + for (int i1 = 0; i1 < w.length; i1++) mf.register(WORD, depReader.normalize(w[i1])); + + w = instance.plemmas; + for (int i1 = 0; i1 < w.length; i1++) mf.register(WORD, depReader.normalize(w[i1])); + + + w = instance.ppos; + for (int i1 = 0; i1 < w.length; i1++) mf.register(POS, w[i1]); + + w = instance.gpos; + for (int i1 = 0; i1 < w.length; i1++) mf.register(POS, w[i1]); + + if (instance.feats !=null) { + String fs[][] = instance.feats; + for (int i1 = 0; i1 < fs.length; i1++){ + w =fs[i1]; + if (w==null) continue; + for (int i2 = 0; i2 < w.length; i2++) mf.register(FEAT, w[i2]); + } + } + + if ((ic-1)>options.count) break; + } + del = outValue(ic, del); + + + for(Extractor e : extractor) { + e.setMaxForm(mf.getFeatureCounter().get(WORD)); + } + + if (options.clusterFile==null)cl = new Cluster(); + else cl= new Cluster(options.clusterFile, mf,6); + + mf.calculateBits(); + + System.out.println(""+mf.toString()); + + for(Extractor e : extractor) { + e.initStat(); + e.init(); + } + + depReader.startReading(file); + + int num1 = 0; + + + Edges.init(mf.getFeatureCounter().get(POS)); + + + System.out.print("Creating edge filters and read corpus: "); + del = 0; + + is.init(ic, new MFB()); + + while (true) { + if (num1 % 100 == 0) del = outValue(num1, del); + + SentenceData09 instance1 = depReader.getNext(is); + + if (instance1 == null) break; + + int last = is.size() - 1; + short[] pos =is.pposs[last]; + + for (int k = 0; k < is.length(last); k++) { + if (is.heads[last][k] < 0) continue; + Edges.put(pos[is.heads[last][k]],pos[k], k < is.heads[last][k],is.labels[last][k]); + } + + if (!options.allFeatures && num1 > options.count) break; + + num1++; + + } + del = outValue(num1, del); + System.out.println(); + Edges.findDefault(); + } + + + public void getInstances(String file, Instances is){ + CONLLReader09 depReader = new CONLLReader09(file); + + int ic =options.count+2; + + is.init(ic, new MFB()); + + int num1 =0,del=0; + while (true) { + if (num1 % 100 == 0) del = outValue(num1, del); + + SentenceData09 instance1 = depReader.getNext(is); + + if (instance1 == null) break; + + if (!options.allFeatures && num1 > options.count) break; + + num1++; + + } + del = outValue(num1, del); + System.out.println(); + + } + + + /** + * Creates an instance for outputParses + * + * @param is + * @return + * @throws IOException + */ + protected final SentenceData09 nextInstance(Instances is, CONLLReader09 depReader) throws Exception { + + SentenceData09 instance = depReader.getNext(is); + if (instance == null || instance.forms == null) return null; + + return instance; + } + + public static ExecutorService executerService =java.util.concurrent.Executors.newFixedThreadPool(Parser.THREADS); + + + public DataF fillVector(F2SF params, Instances is,int inst, DataF d, Cluster cluster, int threads, Long2IntInterface li) throws InterruptedException { + + long ts = System.nanoTime(); + + if (executerService.isShutdown()) executerService =java.util.concurrent.Executors.newCachedThreadPool(); + + + final int length = is.length(inst); + if (d ==null || d.len<length)d = new DataF(length,mf.getFeatureCounter().get(PipeGen.REL).shortValue()); + + ArrayList<ParallelExtract> pe = new ArrayList<ParallelExtract>(); + + + for(int i=0;i<threads;i++) { + +// DB.println(""+((ExtractorClusterStackedR2)extractor[i]).s_dist); + pe.add(new ParallelExtract( extractor[i],is, inst, d, (F2SF)params.clone(), cluster, li)); + } + + for (int w1 = 0; w1 < length; w1++) { + for (int w2 = 0; w2 < length; w2++) { + if (w1==w2) continue; + ParallelExtract.add(w1, w2); + } + } + executerService.invokeAll( pe); + + timeExtract += (System.nanoTime()-ts); + + + return d; + } + + /** + * the loss function + */ + public double errors( Instances is, int ic, Parse p) { + + if (p.heads==null) p.signature2parse(p.signature()); + short[] act = is.heads[ic]; + double correct = 0; + + // do not count root + for(int i = 1; i < act.length; i++) { + if (p.heads[i]==act[i] ){ + correct+=0.5; + if (p.labels[i]==is.labels[ic][i] ) correct+=0.5; + } + } + + double x = ((double)act.length- 1 - correct ); + + //p.f1 = (double)correct / (double)(act.length-1); + + return x; + } +} diff --git a/dependencyParser/basic/mate-tools/src/is2/parserR2/PipeReranker.java b/dependencyParser/basic/mate-tools/src/is2/parserR2/PipeReranker.java new file mode 100644 index 0000000..87286ac --- /dev/null +++ b/dependencyParser/basic/mate-tools/src/is2/parserR2/PipeReranker.java @@ -0,0 +1,138 @@ +package is2.parserR2; + +import is2.data.Cluster; +import is2.data.DataF; +import is2.data.Edges; +import is2.data.F2SF; +import is2.data.Instances; +import is2.data.MFB; +import is2.data.ParseNBest; + +import is2.data.Parse; +import is2.data.PipeGen; +import is2.data.SentenceData09; +import is2.io.CONLLReader09; + +import is2.util.OptionsSuper; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.concurrent.ExecutorService; + +import extractors.ExtractorClusterStacked; +import extractors.ExtractorReranker; +import extractors.ParallelExtract; + +final public class PipeReranker extends PipeGen { + + public ExtractorReranker extractor; + final public MFB mf = new MFB(); + + Cluster cl; + + + private OptionsSuper options; + public static long timeExtract; + + public PipeReranker(OptionsSuper o) { + options = o; + } + + public void createInstances(String file, Instances is) + // throws Exception + + { + + + CONLLReader09 depReader = new CONLLReader09(file); + + mf.register(REL,"<root-type>"); + + // register at least one predicate since the parsing data might not contain predicates as in + // the Japaness corpus but the development sets contains some + + long sl=0; + + System.out.print("Registering feature parts of sentence: "); + int ic = 0; + int del = 0; + while (true) { + SentenceData09 instance = depReader.getNext(); + if (instance == null) break; + ic++; + + sl+=instance.labels.length; + + if (ic % 1000 == 0) { + del = outValue(ic, del); + } + + String[] labs1 = instance.labels; + for (int i1 = 0; i1 < labs1.length; i1++) mf.register(REL, labs1[i1]); + + String[] w = instance.forms; + for (int i1 = 0; i1 < w.length; i1++) mf.register(WORD, depReader.normalize(w[i1])); + + w = instance.plemmas; + for (int i1 = 0; i1 < w.length; i1++) mf.register(WORD, depReader.normalize(w[i1])); + + + w = instance.ppos; + for (int i1 = 0; i1 < w.length; i1++) mf.register(POS, w[i1]); + + w = instance.gpos; + for (int i1 = 0; i1 < w.length; i1++) mf.register(POS, w[i1]); + + if (instance.feats !=null) { + String fs[][] = instance.feats; + for (int i1 = 0; i1 < fs.length; i1++){ + w =fs[i1]; + if (w==null) continue; + for (int i2 = 0; i2 < w.length; i2++) mf.register(FEAT, w[i2]); + } + } + + if ((ic-1)>options.count) break; + } + del = outValue(ic, del); + + System.out.println(); + ExtractorReranker.initFeatures(); + + ExtractorReranker.maxForm = mf.getFeatureCounter().get(WORD); + + if (options.clusterFile==null)cl = new Cluster(); + else cl= new Cluster(options.clusterFile, mf,6); + + mf.calculateBits(); + extractor.initStat(); + + System.out.println(""+mf.toString()); + + extractor.init(); + depReader.startReading(file); + + int num1 = 0; + + is.init(ic, new MFB()); + + Edges.init(mf.getFeatureCounter().get(POS)); + + del = 0; + + + del = outValue(num1, del); + System.out.println(); + } + + + + public static ExecutorService executerService =java.util.concurrent.Executors.newFixedThreadPool(Parser.THREADS); + + + + + + + +} diff --git a/dependencyParser/basic/mate-tools/src/is2/parserR2/Reranker.java b/dependencyParser/basic/mate-tools/src/is2/parserR2/Reranker.java new file mode 100644 index 0000000..a531c3c --- /dev/null +++ b/dependencyParser/basic/mate-tools/src/is2/parserR2/Reranker.java @@ -0,0 +1,1059 @@ +package is2.parserR2; + + +import is2.data.Cluster; +import is2.data.DataF; +import is2.data.Edges; +import is2.data.F2SF; +import is2.data.FVR; +import is2.data.Instances; +import is2.data.Long2Int; +import is2.data.Long2IntInterface; +import is2.data.MFB; +import is2.data.Parse; +import is2.data.ParseNBest; +import is2.data.PipeGen; +import is2.data.SentenceData09; +import is2.io.CONLLReader09; +import is2.io.CONLLWriter09; +import is2.tools.Tool; +import is2.util.DB; +import is2.util.OptionsSuper; +import is2.util.ParserEvaluator; + +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.FileNotFoundException; +import java.io.FileOutputStream; +import java.io.IOException; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map.Entry; +import java.util.zip.ZipEntry; +import java.util.zip.ZipInputStream; +import java.util.zip.ZipOutputStream; + +import extractors.Extractor; +import extractors.ExtractorClusterStacked; +import extractors.ExtractorReranker; + + + +public class Reranker implements Tool { + + + public static int THREADS =4; + + Long2IntInterface l2i; + + // the parser models + ParametersFloat paramsParsers[]; + + // the re-ranker model + ParametersFloat parametersReranker; + PipeReranker pipeReranker; + Pipe pipe; + Options options; + + HashMap<Integer,Integer> rank = new HashMap<Integer,Integer>(); + int amongxbest=0, amongxbest_ula=0, nbest=0,bestProj=0, smallestErrorSum=0, countAllNodes=0; + static int NBest =1000; + + + + + /** + * Initialize the parser + * @param options + */ + public Reranker (Options options) { + + this.options=options; + + } + + + /** + * @param modelFileName The file name of the parsing model + */ + public Reranker(String modelFileName) { + this(new Options(new String[]{"-model",modelFileName})); + } + + + + public Reranker() { + // TODO Auto-generated constructor stub + } + + + public static void main (String[] args) throws Exception + { + + long start = System.currentTimeMillis(); + Options options = new Options(args); + + NBest = options.best; + + DB.println("n-best "+NBest); + + Runtime runtime = Runtime.getRuntime(); + THREADS = runtime.availableProcessors(); + + if (options.cores<THREADS&&options.cores>0) THREADS =options.cores; + + DB.println("Found " + runtime.availableProcessors()+" cores use "+THREADS); + + + if (options.train) { + + Reranker p =new Reranker(); + p.options=options; + + + p.l2i = new Long2Int(options.hsize); + p.pipeReranker = new PipeReranker(options); + p.pipeReranker.extractor = new ExtractorReranker(p.l2i); + + + // initialize the parser + p.pipe = new Pipe(options); + + // read parsing models + p.paramsParsers = new ParametersFloat[options.end+1]; + for(int m=0;m<=options.end;m++) { + String name = options.prefix_model+m; + p.paramsParsers[m] = new ParametersFloat(0); + p.readModel(name, p.pipe, p.paramsParsers[m]); + } + + // set up the reranker + p.parametersReranker = new ParametersFloat(p.l2i.size()); + + Instances[] iss = new Instances[options.end+1]; + + for(int m=0;m<=options.end;m++) { + String name = options.prefix_test+m; + iss[m] = new Instances(); + DB.println("create instances of part "+name); + p.pipe.getInstances(name, iss[m]); + } + + + ExtractorReranker.initFeatures(); + p.pipeReranker.extractor.init(); + + p.pipeReranker.extractor.initStat(); + + p.train(options,iss); + + p.writeModell(options, p.parametersReranker, null,p.pipe.cl); + } + + if (options.test) { + + Reranker p = new Reranker(); + p.options=options; + + // set up the reranker + p.l2i = new Long2Int(options.hsize); + p.pipeReranker = new PipeReranker(options); + p.pipeReranker.extractor = new ExtractorReranker(p.l2i); + p.parametersReranker = new ParametersFloat(p.l2i.size()); + + + // initialize the parser + p.pipe = new Pipe(options); + + // read parsing models + p.paramsParsers = new ParametersFloat[options.end+1]; + + String nbestName ="n-best+"+options.testfile.substring(options.testfile.length()-12,options.testfile.length()-1); + File fnbest = new File(nbestName); + int read = fnbest.exists()?2:1; + + if (read != 2) + for(int m=0;m<=options.end;m++) { + String name = options.prefix_model+m; + p.paramsParsers[m] = new ParametersFloat(0); + p.readModel(name, p.pipe, p.paramsParsers[m]); + } + + p.readModel(options.modelName, p.pipeReranker, p.parametersReranker); + + + ExtractorReranker.initFeatures(); + p.pipeReranker.extractor.initStat(); + p.pipeReranker.extractor.init(); + + p.rerankedParses(options, p.pipe, p.parametersReranker, false, nbestName); + + } + + System.out.println(); + + if (options.eval) { + System.out.println("\nEVALUATION PERFORMANCE:"); + ParserEvaluator.evaluate(options.goldfile, options.outfile); + } + + long end = System.currentTimeMillis(); + System.out.println("used time "+((float)((end-start)/100)/10)); + + Decoder.executerService.shutdown(); + Pipe.executerService.shutdown(); + System.out.println("end."); + + + } + + /** + * Read the models and mapping + * @param options + * @param pipe + * @param prm + * @throws IOException + */ + public void readModel(String modelName, Pipe pipe, Parameters prm) throws IOException { + + + DB.println("Reading data started: "+modelName); + + // prepare zipped reader + ZipInputStream zis = new ZipInputStream(new BufferedInputStream(new FileInputStream(modelName))); + zis.getNextEntry(); + DataInputStream dis = new DataInputStream(new BufferedInputStream(zis)); + + pipe.mf.read(dis); + + pipe.cl = new Cluster(dis); + + prm.read(dis); + + Long2Int l2i = new Long2Int(prm.size()); + DB.println("li size "+l2i.size()); + + pipe.extractor = new ExtractorClusterStacked[THREADS]; + + for (int t=0;t<THREADS;t++) pipe.extractor[t]=new ExtractorClusterStacked(l2i); + + ExtractorClusterStacked.initFeatures(); + + + for (int t=0;t<THREADS;t++) { + pipe.extractor[t].initStat(); + pipe.extractor[t].init(); + } + + Edges.read(dis); + + options.decodeProjective = dis.readBoolean(); + + ExtractorClusterStacked.maxForm = dis.readInt(); + + boolean foundInfo =false; + try { + String info =null; + int icnt = dis.readInt(); + for(int i=0;i<icnt;i++) { + info = dis.readUTF(); + System.out.println(info); + } + } catch (Exception e) { + if (!foundInfo) System.out.println("no info about training"); + } + + + dis.close(); + + DB.println("Reading data finnished"); + + Decoder.NON_PROJECTIVITY_THRESHOLD =(float)options.decodeTH; + + // ExtractorClusterStacked.initStat(); + + } + + /** + * Read the models and mapping + * @param options + * @param pipe + * @param params + * @throws IOException + */ + public void readModel(String modelName, PipeReranker pipe, Parameters params) throws IOException { + + DB.println("Reading data started: "+modelName); + + // prepare zipped reader + ZipInputStream zis = new ZipInputStream(new BufferedInputStream(new FileInputStream(modelName))); + zis.getNextEntry(); + DataInputStream dis = new DataInputStream(new BufferedInputStream(zis)); + + pipe.mf.read(dis); + + // DB.println("reranker model "+pipe.mf.toString()); + + pipe.cl = new Cluster(dis); + + params.read(dis); + this.l2i = new Long2Int(params.size()); + DB.println("li size "+l2i.size()); + + pipe.extractor = new ExtractorReranker(l2i); + + ExtractorReranker.initFeatures(); + ExtractorReranker.initStat(); + + pipe.extractor.init(); + + Edges.read(dis); + + options.decodeProjective = dis.readBoolean(); + + ExtractorClusterStacked.maxForm = dis.readInt(); + + boolean foundInfo =false; + try { + String info =null; + int icnt = dis.readInt(); + for(int i=0;i<icnt;i++) { + info = dis.readUTF(); + System.out.println(info); + } + } catch (Exception e) { + if (!foundInfo) System.out.println("no info about training"); + } + + + dis.close(); + + DB.println("Reading data finnished"); + + Decoder.NON_PROJECTIVITY_THRESHOLD =(float)options.decodeTH; + + //ExtractorClusterStacked.initStat(); + + } + + + /** + * Do the training + * @param instanceLengths + * @param options + * @param pipe + * @param parametersReranker + * @param is + * @param cluster + * @throws IOException + * @throws InterruptedException + * @throws ClassNotFoundException + */ + public void train(OptionsSuper options, Instances[] iss) + throws IOException, InterruptedException, ClassNotFoundException { + + + + int read = 0; // 0 compute -- 1 compute and write -- 2 read parses + + + DB.println("Training Information "); + DB.println("-------------------- "); + + ExtractorReranker.initStat(); + pipeReranker.extractor.init(); + + for(Extractor e : this.pipe.extractor) { + e.init(); + } + + int numInstances =0; + int maxLenInstances =0; + // int maxLenSentence=1; + for(Instances is : iss) { + numInstances += is.size(); + for(int i=0;i<is.size();i++) if (maxLenInstances<is.length(i)) maxLenInstances=is.length(i); + } + + + DataF data = new DataF(maxLenInstances, pipe.mf.getFeatureCounter().get(PipeGen.REL).shortValue()); + + int iter = 0; + int del=0; + float error =0; + float f1=0; + + + + + double upd = (double)(options.count*options.numIters)+options.numIters*10; + + //float[][] = new float[this.NBest][3]; + FVR act = new FVR(); + + FVR pred = new FVR(); + + FVR f = new FVR(); + long[] vs = new long[ExtractorReranker._FC*maxLenInstances]; + + + for(; iter < options.numIters; iter++) { + + + + + System.out.print("Iteration "+iter+": "); + error=0; + f1=0; + + float las =0, cnt=0,averageScore=0; + + + float firstBestTotalError=0,totalError=0; + + long start = System.currentTimeMillis(); + + long last= System.currentTimeMillis(); + + long rerankTime = 0; + + + String nbest ="n-best"; + File fnbest = new File(nbest); + read = fnbest.exists()?2:1; + + DataInputStream dis =null; + DataOutputStream dos = null; + + if (read==1) { + + DB.println("computing and writting nbest list to file: "+nbest); + + ZipOutputStream zos = new ZipOutputStream(new BufferedOutputStream(new FileOutputStream(nbest))); + zos.putNextEntry(new ZipEntry("data")); + dos = new DataOutputStream(new BufferedOutputStream(zos)); + } + + + // start reading again + if (read ==2) { + + // DB.println("reading nbest list from file: "+nbest); + + ZipInputStream zis = new ZipInputStream(new BufferedInputStream(new FileInputStream(nbest))); + zis.getNextEntry(); + dis = new DataInputStream(new BufferedInputStream(zis)); + } + + HashMap<Integer,Integer> remapped = new HashMap<Integer,Integer>(); + + int i=0,round=0,instance=0,length=0,count=0, changes=0; + for(Instances is : iss) { + + F2SF fparser =this.paramsParsers[instance].getFV(); + round++; + + + // go over the sentences in the instance + for(int n = 0; n < is.size(); n++) { + count+=1; + length +=is.length(n); + upd--; + + if (is.labels[n].length>options.maxLen) continue; + + List<ParseNBest> parses=null; + + short pos[] = is.pposs[n]; + + // read or write nbest list + if (read==0|| read==1 && iter==0) { + data = pipe.fillVector(fparser, is, n, data, pipe.cl,THREADS,l2i); + parses = Decoder.decode(pos, data, options.decodeProjective,pipe.extractor[0]); + + if (parses.size()>NBest) parses = parses.subList(0, NBest); + + + if (read==1) { + // write the forest + dos.writeInt(parses.size()); + for(int k=0;k<parses.size();k++) { + dos.writeUTF(parses.get(k).signature()); + dos.writeFloat((float)parses.get(k).f1); + } + } + } else if (read==2) { + parses = new ArrayList<ParseNBest>(); + int parseCount = dis.readInt(); + for(int k=0;k<parseCount;k++) { + ParseNBest p = new ParseNBest(dis.readUTF(),dis.readFloat()); + if (parses.size()<NBest) parses.add(p); + } + } + + + int best =0; float bestScore=-100; + int goldBest =0; double goldError=Float.MAX_VALUE; + + long startReranking = System.currentTimeMillis(); + + // score the n-best parses + for(int k=0;k<parses.size();k++) { + + ParseNBest p= parses.get(k); + + pipeReranker.extractor.extractFeatures(is,n,p,parses.indexOf(p),vs,pipe.cl); + + int rank=1*ExtractorReranker.s_type; + + f.clear(); + + for(int j=0;j<vs.length;j++) { + if (vs[j]==Integer.MIN_VALUE) break; + if (vs[j]>0) f.add(pipeReranker.extractor.li.l2i(vs[j]+rank)); + } + + f.add(pipeReranker.extractor.li.l2i(1+rank),(float)p.f1); + float score = (float)(parametersReranker.getScore(f)); + if (score>bestScore) { //rankScore[k][2]> + bestScore =score; + best=k; + + } + } + + // get the best parse in the n-best list + for(int k=0;k<parses.size();k++) { + + if (parses.get(k).heads.length!=is.length(n)) { + DB.println("error "+n+" "+parses.get(k).heads.length+" "+is.length(n)); + continue; + } + double errg = pipe.errors(is, n, parses.get(k)); + if (goldError > errg) { + goldError = errg; + goldBest=k; + } + } + + ParseNBest firstBest = parses.get(0); + ParseNBest predParse = parses.get(best); + ParseNBest goldBestParse = parses.get(goldBest); + + double e= pipe.errors(is, n ,predParse); + + Integer ctb = remapped.get(best); + if (ctb==null) remapped.put(best, 1); + else remapped.put(best, ctb+1); + + String info = " 1best-error "+((length-firstBestTotalError)/length)+ + " reranked "+((length-totalError)/length)+ + " chd "+changes+" "+" ps las "+(las/cnt)+" avs "+((float)averageScore/(float)count)+" "; + + + + if((n+1) %500 == 0) del= PipeGen.outValueErr(count,Math.round(error*1000)/1000,f1/count,del, last, upd,info); + + firstBestTotalError+=Decoder.getError(firstBest, is, n, Decoder.LAS); + + totalError+=Decoder.getError(predParse, is, n, Decoder.LAS); + + + rerankTime +=System.currentTimeMillis()-startReranking; + + if (best!=0){ + changes++; + } + + las +=is.length(n)-Decoder.getError(goldBestParse, is, n, Decoder.LAS); + cnt +=is.length(n); + + averageScore+=predParse.f1; + + + if (options.count<count) break; + + + if (Decoder.getError(goldBestParse, is, n, Decoder.LAS)>= + Decoder.getError(predParse, is, n, Decoder.LAS) ) continue; + + + // get predicted feature vector + pipeReranker.extractor.extractFeatures(is,n,predParse,parses.indexOf(predParse),vs,pipe.cl); + + pred.clear(); + int rank=1*ExtractorReranker.s_type; + + for(int j=0;j<vs.length;j++) { + if (vs[j]==Integer.MIN_VALUE) break; + if (vs[j]>0) pred.add(pipeReranker.extractor.li.l2i(vs[j]+rank)); + } + pred.add(pipeReranker.extractor.li.l2i(1+rank),(float)predParse.f1); + error += 1; + + pipeReranker.extractor.extractFeatures(is,n,goldBestParse,parses.indexOf(goldBestParse),vs,pipe.cl); + + + act.clear(); + rank=1*ExtractorReranker.s_type; + for(int j=0;j<vs.length;j++) { + if (vs[j]==Integer.MIN_VALUE) break; + if (vs[j]>0) act.add(pipeReranker.extractor.li.l2i(vs[j]+rank)); + } + + act.add(pipeReranker.extractor.li.l2i(1+rank),(float)goldBestParse.f1); + float lam_dist =(float)( parametersReranker.getScore(act) - + (parametersReranker.getScore(pred))); + + + + parametersReranker.update(act, pred, is, n, null, upd, e,lam_dist); + + } + instance++; + + } + + String info = " td "+((Decoder.timeDecotder)/1000000F)+" tr "+((Decoder.timeRearrange)/1000000F) + +" te "+((Pipe.timeExtract)/1000000F)+" nz "+parametersReranker.countNZ()+ + " 1best-error "+((length-firstBestTotalError)/length)+ + " reranked-best "+((length-totalError)/length)+ + " rds "+round+" "+ + " rerank-t "+(rerankTime/count)+ + " chd "+changes+" "+" ps las "+(las/cnt)+" avs "+((float)averageScore/(float)count)+" "; + + + // DB.println("remapped "+remapped); + + PipeGen.outValueErr(count,Math.round(error*1000)/1000,f1/count,del,last, upd,info); + del=0; + long end = System.currentTimeMillis(); + System.out.println(" time:"+(end-start)); + i++; + // ParametersFloat pf = params.average2((iter+1)*is.size()); + + + + Decoder.timeDecotder=0;Decoder.timeRearrange=0; Pipe.timeExtract=0; + + if (dos!=null)dos.close(); + if (dis!=null)dis.close(); + + } + DB.println("sb "+parametersReranker.parameters[this.pipeReranker.extractor.li.l2i(4090378920L+1*ExtractorReranker.s_type)]);//4090378266 + parametersReranker.average(iter*numInstances); + + } + + + /** + * Do the parsing + * @param options + * @param pipe + * @param params + * @throws IOException + */ + private void rerankedParses (OptionsSuper options, Pipe pipe, ParametersFloat params, boolean maxInfo, String nbestName) throws Exception { + + long start = System.currentTimeMillis(); + + ExtractorClusterStacked.initFeatures(); + + DataInputStream dis =null; + DataOutputStream dos = null; + + float olas=0, olcnt =0; + + File fnbest = new File(nbestName); + int read = fnbest.exists()?2:1; + if (read==1) { + + DB.println("computing and writting nbest list to file: "+nbestName); + + ZipOutputStream zos = new ZipOutputStream(new BufferedOutputStream(new FileOutputStream(nbestName))); + zos.putNextEntry(new ZipEntry("data")); + dos = new DataOutputStream(new BufferedOutputStream(zos)); + } + + + + if (read ==2) { + + // DB.println("reading nbest list from file: "+nbestName); + + ZipInputStream zis = new ZipInputStream(new BufferedInputStream(new FileInputStream(nbestName))); + zis.getNextEntry(); + dis = new DataInputStream(new BufferedInputStream(zis)); + } + + for(int m =0;m< this.paramsParsers.length;m++) { + + + CONLLReader09 depReader = new CONLLReader09(options.testfile, options.formatTask); + CONLLWriter09 depWriter = new CONLLWriter09(options.outfile, options.formatTask); + + float las=0,lcnt =0, averageScore =0; + int cnt = 0; + int del=0; + + + long last = System.currentTimeMillis(); + + + String[] types = new String[pipe.mf.getFeatureCounter().get(PipeGen.REL)]; + for (Entry<String, Integer> e : pipe.mf.getFeatureSet().get(PipeGen.REL).entrySet()) types[e.getValue()] = e.getKey(); + + System.out.print("Processing Sentence: "); + + + FVR f = new FVR(); + + while(true) { + + Instances is = new Instances(); + is.init(1, new MFB(),options.formatTask); + + SentenceData09 instance = pipe.nextInstance(is, depReader); + if (instance==null) break; + cnt++; + + String[] forms = instance.forms; + + List<ParseNBest> parses =null; + + // read or write nbest list + if (read==0|| read==1) { + parses = this.parseNBest(instance, this.paramsParsers[m]); + // data = pipe.fillVector(fparser, is, n, data, pipe.cl,THREADS); + // parses = Decoder.decode(pos, data, options.decodeProjective); + + if (parses.size()>NBest) parses = parses.subList(0, NBest); + + + if (read==1) { + // write the forest + dos.writeInt(parses.size()); + for(int k=0;k<parses.size();k++) { + dos.writeUTF(parses.get(k).signature()); + dos.writeFloat((float)parses.get(k).f1); + } + } + } else if (read==2) { + parses = new ArrayList<ParseNBest>(); + int parseCount = dis.readInt(); + for(int k=0;k<parseCount;k++) { + ParseNBest p = new ParseNBest(dis.readUTF(),dis.readFloat()); + if (parses.size()<NBest) parses.add(p); + } + } + + nbest +=parses.size(); + + + //List<ParseNBest> parses = this.parseNBest(instance, this.paramsParsers[m]); + + long vs[] = new long[ExtractorReranker._FC*is.length(0)]; + + float bestScore=0; + int best=0; + + + for(int k=0;k<parses.size();k++) { + + ParseNBest p= parses.get(k); + + pipeReranker.extractor.extractFeatures(is,0,p,k,vs,pipeReranker.cl); + + int rank=1*ExtractorReranker.s_type; + f.clear(); + for(int j=0;j<vs.length;j++) { + if (vs[j]==Integer.MIN_VALUE) break; + if (vs[j]>0) f.add(pipeReranker.extractor.li.l2i(vs[j]+rank)); + } + f.add(pipeReranker.extractor.li.l2i(1+rank),(float)p.f1); + + float score = (float)(parametersReranker.getScore(f)); + if (score>bestScore) { //rankScore[k][2]> + bestScore =score; + best=k; + + } + } + // change to best + ParseNBest d = parses.get(best); + + las +=(is.length(0)-1)-Decoder.getError(d, is, 0, Decoder.LAS); + lcnt +=is.length(0)-1; + + averageScore+=d.f1; + + SentenceData09 i09 = new SentenceData09(instance); + + i09.createSemantic(instance); + + for(int j = 0; j < forms.length-1; j++) { + i09.plabels[j] = types[d.labels[j+1]]; + i09.pheads[j] = d.heads[j+1]; + } + + + depWriter.write(i09); + String info =""+((float)(averageScore/(float)cnt))+" "; + + if (cnt%10 ==0) + del=PipeGen.outValueErr(cnt, lcnt-las, las/lcnt, del, last, 0, info);//outValue(cnt, del,last, info); + + } + + //pipe.close(); + + depWriter.finishWriting(); + long end = System.currentTimeMillis(); + DB.println("rank\n"+rank+"\n"); + DB.println("x-best-las "+amongxbest+" x-best-ula "+amongxbest_ula+" cnt "+cnt+" x-best-las " + +((float)((float)amongxbest/cnt))+ + " x-best-ula "+((float)((float)amongxbest_ula/cnt))+ + " nbest "+((float)nbest/cnt)+ + " 1best "+((float)(rank.get(0)==null?0:rank.get(0))/cnt)+ + " best-proj "+((float)bestProj/cnt)+ + " Sum LAS "+((float)this.smallestErrorSum/countAllNodes)+" "+ + ""+(las/lcnt)); + + // DB.println("errors "+error); + olas+=las; + olcnt+=lcnt; + rank.clear(); + amongxbest=0;amongxbest_ula=0; + cnt=0; + nbest=0; + bestProj=0; + if (maxInfo) System.out.println("Used time " + (end-start)); + if (maxInfo) System.out.println("forms count "+Instances.m_count+" unkown "+Instances.m_unkown); + } + + if (dos !=null) { + dos.flush(); + dos.close(); + } + if (dis!=null)dis.close(); + + DB.println("\n overall las "+(olas/olcnt)); + } + + + /** + * Do the parsing + * @param options + * @param pipe + * @param params + * @throws IOException + */ + private void getNBest(OptionsSuper options, Pipe pipe, ParametersFloat params, boolean maxInfo) throws Exception { + + + CONLLReader09 depReader = new CONLLReader09(options.testfile, options.formatTask); + + ExtractorClusterStacked.initFeatures(); + + int cnt = 0; + + String[] types = new String[pipe.mf.getFeatureCounter().get(PipeGen.REL)]; + for (Entry<String, Integer> e : pipe.mf.getFeatureSet().get(PipeGen.REL).entrySet()) types[e.getValue()] = e.getKey(); + + // System.out.print("Processing Sentence: "); + + while(true) { + + Instances is = new Instances(); + is.init(1, new MFB(),options.formatTask); + + SentenceData09 instance = pipe.nextInstance(is, depReader); + if (instance==null) break; + cnt++; + + this.parseNBest(instance, this.paramsParsers[0]); + } + + //pipe.close(); + // depWriter.finishWriting(); + // long end = System.currentTimeMillis(); + // DB.println("rank\n"+rank+"\n"); + // DB.println("x-best-las "+amongxbest+" x-best-ula "+amongxbest_ula+" cnt "+cnt+" x-best-las " + // +((float)((float)amongxbest/cnt))+ + // " x-best-ula "+((float)((float)amongxbest_ula/cnt))+ + // " nbest "+((float)nbest/cnt)+ + // " 1best "+((float)(rank.get(0)==null?0:rank.get(0))/cnt)+ + // " best-proj "+((float)bestProj/cnt)); + // DB.println("errors "+error); + + + } + + + public SentenceData09 parse (SentenceData09 instance, ParametersFloat params) { + + String[] types = new String[pipe.mf.getFeatureCounter().get(PipeGen.REL)]; + for (Entry<String, Integer> e : MFB.getFeatureSet().get(PipeGen.REL).entrySet()) types[e.getValue()] = e.getKey(); + + Instances is = new Instances(); + is.init(1, new MFB(),options.formatTask); + new CONLLReader09().insert(is, instance); + + String[] forms = instance.forms; + + // use for the training ppos + DataF d2; + try { + d2 = pipe.fillVector(params.getFV(), is,0,null,pipe.cl, THREADS,l2i);//cnt-1 + } catch (Exception e ) { + e.printStackTrace(); + return null; + } + short[] pos = is.pposs[0]; + + List<ParseNBest> parses=null; + Parse d= null; + try { + parses =Decoder.decode(pos,d2,options.decodeProjective,pipe.extractor[0]); //cnt-1 + d = parses.get(0); + }catch (Exception e) { + e.printStackTrace(); + } + + if (parses.size()>NBest) parses = parses.subList(0,NBest); + + int g_las = Decoder.getGoldRank(parses, is,0,Decoder.LAS); + int g_ula = Decoder.getGoldRank(parses, is,0,!Decoder.LAS); + + int smallest = Decoder.getSmallestError(parses, is,0,!Decoder.LAS); + smallestErrorSum+=is.length(0)-smallest; + countAllNodes+=is.length(0); + + if (g_las>=0) amongxbest++; + if (g_ula>=0) amongxbest_ula++; + + nbest+=parses.size(); + + Integer r = rank.get(g_las); + if (r==null) rank.put(g_las, 1); + else rank.put(g_las, r+1); + + float err = (float)this.pipe.errors(is,0, d); + + float errBestProj = (float)this.pipe.errors(is,0, Decoder.bestProj); + + if (errBestProj==0) bestProj++; + + SentenceData09 i09 = new SentenceData09(instance); + + i09.createSemantic(instance); + + for(int j = 0; j < forms.length-1; j++) { + i09.plabels[j] = types[d.labels[j+1]]; + i09.pheads[j] = d.heads[j+1]; + } + return i09; + + } + + public List<ParseNBest> parseNBest (SentenceData09 instance, ParametersFloat params) { + + Instances is = new Instances(); + is.init(1, new MFB(),options.formatTask); + new CONLLReader09().insert(is, instance); + + + + // use for the training ppos + DataF d2; + try { + d2 = pipe.fillVector(params.getFV(), is,0,null,pipe.cl,THREADS,l2i);//cnt-1 + } catch (Exception e ) { + e.printStackTrace(); + return null; + } + short[] pos = is.pposs[0]; + + List<ParseNBest> parses=null; + try { + parses =Decoder.decode(pos,d2,options.decodeProjective,pipe.extractor[0]); //cnt-1 + }catch (Exception e) { + e.printStackTrace(); + } + + if (parses.size()>NBest) parses = parses.subList(0,NBest); + + return parses; + + } + + + + /* (non-Javadoc) + * @see is2.tools.Tool#apply(is2.data.SentenceData09) + */ + @Override + public SentenceData09 apply(SentenceData09 snt09) { + + try { + parse(snt09,this.parametersReranker); + } catch(Exception e) { + e.printStackTrace(); + } + + Decoder.executerService.shutdown(); + Pipe.executerService.shutdown(); + + return snt09; + } + + /** + * Write the parsing model + * + * @param options + * @param params + * @param extension + * @throws FileNotFoundException + * @throws IOException + */ + private void writeModell(OptionsSuper options, ParametersFloat params, String extension, Cluster cs) throws FileNotFoundException, IOException { + + String name = extension==null?options.modelName:options.modelName+extension; + DB.println("Writting model: "+name); + ZipOutputStream zos = new ZipOutputStream(new BufferedOutputStream(new FileOutputStream(name))); + zos.putNextEntry(new ZipEntry("data")); + DataOutputStream dos = new DataOutputStream(new BufferedOutputStream(zos)); + + MFB.writeData(dos); + cs.write(dos); + + params.write(dos); + + Edges.write(dos); + + dos.writeBoolean(options.decodeProjective); + + dos.writeInt(ExtractorClusterStacked.maxForm); + + dos.writeInt(5); // Info count + dos.writeUTF("Used parser "+Reranker.class.toString()); + dos.writeUTF("Creation date "+(new SimpleDateFormat("yyyy.MM.dd HH:mm:ss")).format(new Date())); + dos.writeUTF("Training data "+options.trainfile); + dos.writeUTF("Iterations "+options.numIters+" Used sentences "+options.count); + dos.writeUTF("Cluster "+options.clusterFile); + + dos.flush(); + dos.close(); + } + + + + +} diff --git a/dependencyParser/basic/mate-tools/src/is2/parserR2/package.html b/dependencyParser/basic/mate-tools/src/is2/parserR2/package.html new file mode 100755 index 0000000..6b06482 --- /dev/null +++ b/dependencyParser/basic/mate-tools/src/is2/parserR2/package.html @@ -0,0 +1,3 @@ +Package info + - n-best parser +<br> \ No newline at end of file diff --git a/dependencyParser/basic/mate-tools/src/is2/tag/ExtractorT2.java b/dependencyParser/basic/mate-tools/src/is2/tag/ExtractorT2.java new file mode 100644 index 0000000..a37dbbe --- /dev/null +++ b/dependencyParser/basic/mate-tools/src/is2/tag/ExtractorT2.java @@ -0,0 +1,523 @@ +package is2.tag; + + +import is2.data.Cluster; +import is2.data.F2SF; +import is2.data.Instances; +import is2.data.InstancesTagger; +import is2.data.Long2IntInterface; +import is2.data.ParametersFloat; +import is2.data.PipeGen; +import is2.data.SentenceData09; +import is2.io.CONLLReader09; +import is2.tools.IPipe; +import is2.util.OptionsSuper; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Map.Entry; + + + +final public class ExtractorT2 extends PipeGen implements IPipe { + + final static int _MAX=71; + + private static final String STWRD = "STWRD", STPOS = "STPOS"; + + private static short s_pos,s_word,s_char; + protected static short s_type; + private static int _strp,_ewrd; + static int _CEND; + + public String[] types; + + final public MFO mf; + + final MFO.Data4 d1 = new MFO.Data4(),d2 = new MFO.Data4(),d3 = new MFO.Data4(), + dw = new MFO.Data4(), dwp = new MFO.Data4(); + + Cluster cl; + + private OptionsSuper options; + + public ExtractorT2 (OptionsSuper options, MFO mf) throws IOException { + this.mf =mf; + this.options = options; + } + public HashMap<Integer, int[]> _pps = new HashMap<Integer, int[]>(); + + private Lexicon lx; + + public int corpusWrds = 0; + + + + + /* (non-Javadoc) + * @see is2.tag5.IPipe#createInstances(java.lang.String, java.io.File, is2.data.InstancesTagger) + */ + public Instances createInstances(String file) { + return createInstances(file, -1, -1); + } + + + public Instances createInstances(String file, int skipStart, int skipEnd) { + + InstancesTagger is = new InstancesTagger(); + + CONLLReader09 depReader = new CONLLReader09(CONLLReader09.NO_NORMALIZE); + + depReader.startReading(file); + mf.register(POS,"<root-POS>"); + mf.register(WORD,"<root>"); + + System.out.println("Registering feature parts "); + + HashMap<Integer, HashSet<Integer>> pps = new HashMap<Integer, HashSet<Integer>>(); + + int ic=0; + while(true) { + + SentenceData09 instance1 = depReader.getNext(); + + if (instance1== null) break; + ic++; + + String[] w = instance1.forms; + for(int i1 = 0; i1 < w.length; i1++) mf.register(WORD, w[i1]); + for(int i1 = 0; i1 < w.length; i1++) registerChars(CHAR, w[i1]); + for(int i1 = 0; i1 < w.length; i1++) registerChars(CHAR, w[i1].toLowerCase()); + + + w = instance1.plemmas; + for(int i1 = 0; i1 < w.length; i1++) mf.register(WORD, w[i1]); + for(int i1 = 0; i1 < w.length; i1++) registerChars(CHAR, w[i1]); + + w = instance1.gpos; + for(int i1 = 0; i1 < w.length; i1++) { + mf.register(POS, w[i1]); + } + for(int i1 = 0; i1 < w.length; i1++) { + HashSet<Integer> ps = pps.get(mf.getValue(POS,w[i1])); + if (ps==null) { + ps= new HashSet<Integer>(); + pps.put(mf.getValue(POS,w[i1]), ps); + } + if (i1+1<w.length) ps.add(mf.getValue(POS,w[i1+1])); + } + + } + + for(Entry<Integer,HashSet<Integer>> e : pps.entrySet()) { + int[] ps = new int[e.getValue().size()]; + int j=0; + for(int k : e.getValue().toArray(new Integer[0])) { + ps[j++] =k; + } + _pps.put(e.getKey(), ps); + // System.out.println("put "+e.getKey()+" "+ps.length+" pps size "+_pps.size()); + } + + System.out.println("words in corpus "+(corpusWrds=mf.getFeatureCounter().get(ExtractorT2.WORD))); + if (options.clusterFile==null)cl = new Cluster(); + else cl= new Cluster(options.clusterFile, mf,6); + + if (options.lexicon==null)lx = new Lexicon(new byte[0][0]); + else lx= new Lexicon(options.lexicon,mf); + + initFeatures(); + + mf.calculateBits(); + initValues(); + + System.out.println(""+mf.toString()); + + depReader.startReading(file); + + int num1 = 0; + + int instanceCount=0; + + System.out.print("Creating Instances: "); + + is.init(ic, mf) ; + int del=0; + + while(true) { + if (num1 % 100 ==0) del = outValue(num1, del); + + if (num1>=skipStart && num1<skipEnd && skipStart>=0) { + SentenceData09 instance1 = depReader.getNext(); + if (instance1== null) break; + num1++; + continue; + } + + + SentenceData09 instance1 = depReader.getNext(is); + if (instance1== null) break; + + is.fillChars(instance1, instanceCount,_CEND); + for(int k=0;k<instance1.length();k++) { + if (instance1.ppos[k].contains("\\|")) + + is.pposs[num1][k] = (short)mf.getValue(FM, instance1.ppos[k].split("\\|")[1]); + } + + + if (num1>options.count) break; + + num1++; + instanceCount++; + } + outValue(num1, del); + System.out.println(); + + types= mf.reverse(mf.getFeatureSet().get(POS)); + return is; + } + + private void registerChars(String type, String word) { + for(int i=0;i<word.length();i++) mf.register(type, Character.toString(word.charAt(i))); + } + + + /* (non-Javadoc) + * @see is2.tag5.IPipe#initValues() + */ + public void initValues() { + s_pos = mf.getFeatureBits(POS); + s_word = mf.getFeatureBits(WORD); + s_type = mf.getFeatureBits(TYPE); + s_char = mf.getFeatureBits(CHAR); + + d1.a0 = s_type; d1.a1 = s_pos; d1.a2= s_word;d1.a3= s_word; + d2.a0 = s_type; d2.a1 = s_pos; d2.a2= s_pos; d2.a3= s_pos; d2.a4= s_pos; d2.a5= s_pos; d2.a6= s_pos; + d3.a0 = s_type; d3.a1 = s_pos; d3.a2= s_char; d3.a3= s_char; d3.a4= s_char; d3.a5= s_char; d3.a6= s_char; d3.a7= s_char; + dw.a0 = s_type; dw.a1 = s_pos;dw.a2= s_word; dw.a3= s_word; dw.a4= s_word; dw.a5= s_word; dw.a6= s_word; dw.a7= s_word; + dwp.a0 = s_type; dwp.a1 = s_pos;dwp.a2= s_word ; dwp.a3= s_pos; dwp.a4= s_word; + + } + + /* (non-Javadoc) + * @see is2.tag5.IPipe#initFeatures() + */ + public void initFeatures() { + // 62 + for(int t=0;t<67;t++) mf.register(TYPE, "F"+t); + + mf.register(POS, MID); + _strp = mf.register(POS, STR); + mf.register(POS, END); + + mf.register(WORD, STR); + _ewrd =mf.register(WORD, END); + + _CEND = mf.register(CHAR, END); + + mf.register(WORD,STWRD); + mf.register(POS,STPOS); + + + } + + final public void addFeatures(InstancesTagger is, int ic, String fs,int i, short pposs[], int[] forms, int[] lemmas, long[] vs) { + + int c0= is.chars[ic][i][0], c1=is.chars[ic][i][1], c2=is.chars[ic][i][2], c3=is.chars[ic][i][3], c4=is.chars[ic][i][4],c5=is.chars[ic][i][5]; + int e0 =is.chars[ic][i][6], e1 =is.chars[ic][i][7],e2 =is.chars[ic][i][8],e3 =is.chars[ic][i][9],e4 =is.chars[ic][i][10]; + + int f=1,n=0; + short upper =0, number = 1; + for(int k1=0;k1<fs.length();k1++){ + char c = fs.charAt(k1); + if (Character.isUpperCase(c)) { + if (k1==0) upper=1; + else { + // first char + another + if (upper==1) upper=3; + // another uppercase in the word + else if (upper==0) upper=2; + } + } + + // first + if (Character.isDigit(c) && k1==0) number =2 ; + else if (Character.isDigit(c) && number==1) number = 3; + // if(number==2 &&Character.isDigit(c)) number=4; + // if(number==4 && !Character.isDigit(c)) number=5; + } + + // if (i==0 && upper>0) upper+=4; + int form = forms[i], form2 = forms[i]<corpusWrds?forms[i]:-1; + + int len = forms.length; + long l; + d1.v0 = f++; d1.v2=form2; l=mf.calc3(d1); vs[n++]=mf.calc3(d1); + + d1.v0 = f++; d1.v2=is.formlc[ic][i]; vs[n++]=mf.calc3(d1); + + + d3.v2=c0; d3.v3=c1; d3.v4=c2; d3.v5=c3; d3.v6=c4; + d3.v0=f++; vs[n++]=mf.calc3(d3); + d3.v0=f++; vs[n++]=mf.calc4(d3); + d3.v0=f++; vs[n++]=mf.calc5(d3); + d3.v0=f++; vs[n++]=mf.calc6(d3); + d3.v0=f++; vs[n++]=mf.calc7(d3); + + if (form!=-1) { + d3.v2=c2; d3.v3=c3; d3.v4=c4; d3.v5=c5; d3.v6=cl.getLP(form); + d3.v0=f; vs[n++]=mf.calc6(d3); d3.v0=f+1; vs[n++]=mf.calc7(d3); + } + f+=2; + + if (form>0) { + d3.v0=f; d3.v5=cl.getLP(form); vs[n++]=mf.calc6(d3); + d3.v0=f+1; d3.v4=cl.getLP(form); vs[n++]=mf.calc5(d3); + d3.v0=f+2; d3.v3=cl.getLP(form); vs[n++]=mf.calc4(d3); + } + f+=5; + + d3.v2=e0; d3.v3=e1; d3.v4=e2; d3.v5=e3; d3.v6=e4; + d3.v0 =f++; vs[n++]=mf.calc3(d3); + d3.v0 =f++; vs[n++]=l=mf.calc4(d3); vs[n++]=d3.calcs(3, upper, l); + d3.v0 =f++; vs[n++]=l=mf.calc5(d3); vs[n++]=d3.calcs(3, upper, l); + d3.v0 =f++; vs[n++]=l=mf.calc6(d3); vs[n++]=d3.calcs(3, upper, l); + d3.v0 =f++; vs[n++]=l=mf.calc7(d3); vs[n++]=d3.calcs(3, upper, l); + + if (form>0) { + d3.v0=f; d3.v5=cl.getLP(form); vs[n++]=mf.calc6(d3); + d3.v0=f+1; d3.v4=cl.getLP(form); vs[n++]=mf.calc5(d3); + d3.v0=f+2; d3.v3=cl.getLP(form); vs[n++]=mf.calc4(d3); + + d3.v2=e0; d3.v3=e1; d3.v4=e2; + + d3.v0=f+3; d3.v2=lx.getTag(form); vs[n++]=mf.calc3(d3); + d3.v0=f+4; d3.v4=cl.getLP(form); vs[n++]=mf.calc5(d3); + d3.v0=f+5; d3.v3=cl.getLP(form); vs[n++]=mf.calc4(d3); + } + f+=6; + + // sign three-grams + d3.v0=f++;d3.v2=c1; d3.v3=c2; d3.v4=c3; vs[n++]=mf.calc5(d3); + d3.v0=f++;d3.v2=c2; d3.v3=c3; d3.v4=c4; vs[n++]=mf.calc5(d3); + d3.v0=f++;d3.v2=c3; d3.v3=c4; d3.v4=c5; vs[n++]=mf.calc5(d3); + + // sign quad-grams + d3.v0=f++;d3.v2=c1; d3.v3=c2; d3.v4=c3; d3.v5=c4; vs[n++]=mf.calc6(d3); + d3.v0=f++;d3.v2=c2; d3.v3=c3; d3.v4=c4; d3.v5=c5; vs[n++]=mf.calc6(d3); // changed to 6 + + if (i+1<len && forms[i+1]<this.corpusWrds) {dw.v0=f; dw.v2=forms[i+1];dw.v3= form2;vs[n++]=mf.calc4(dw);} + f++; + + if (len>i+1) { + + if (forms[i+1]<corpusWrds){dw.v0=f; dw.v2= forms[i+1]; vs[n++]=mf.calc3(dw);} + + d3.v0=f+1; d3.v2 =is.chars[ic][i+1][0];vs[n++]=mf.calc3(d3); + d3.v0=f+2; d3.v2 =is.chars[ic][i+1][6];vs[n++]=mf.calc3(d3); + + d3.v2=e0; d3.v3=e1; + + d3.v0 =f+3; d3.v4 =is.chars[ic][i+1][0];vs[n++]=mf.calc5(d3); + d3.v0 =f+4; d3.v4 =is.chars[ic][i+1][6];vs[n++]=mf.calc5(d3); + + if (is.chars[ic][i+1][11]>1 ) { // instance.forms[i+1].length() + + d3.v0=f+5; d3.v2=is.chars[ic][i+1][0]; d3.v3=is.chars[ic][i+1][1]; vs[n++]=mf.calc4(d3); + d3.v0=f+6; d3.v2=is.chars[ic][i+1][6]; d3.v3=is.chars[ic][i+1][7]; vs[n++]=mf.calc4(d3); + + d3.v2=e0; d3.v3=e1; + + d3.v0=f+7; d3.v4 = is.chars[ic][i+1][0]; d3.v5 =is.chars[ic][i+1][1]; vs[n++]=mf.calc6(d3); + d3.v0=f+8; d3.v4 = is.chars[ic][i+1][6]; d3.v5=is.chars[ic][i+1][7]; vs[n++]=mf.calc6(d3); + + if (forms[i+1]>0) { + d3.v0=f+9; d3.v2=is.chars[ic][i+1][0]; d3.v3=is.chars[ic][i+1][1]; d3.v4 =cl.getLP(forms[i+1]); vs[n++]=mf.calc5(d3); + d3.v0=f+10; d3.v2=is.chars[ic][i+1][6]; d3.v3=is.chars[ic][i+1][7]; d3.v4 =cl.getLP(forms[i+1]); vs[n++]=mf.calc5(d3); + } + } + + if (forms[i+1]>0) { + + + dw.v0=f+11; dw.v2= cl.getLP(forms[i+1]); dw.v3= form2;vs[n++]=mf.calc4(dw); + + // if (forms[i]>0){ + // dw.v0=f+12; dw.v2= cl.getLP(forms[i+1]); dw.v3=lx.getTag(form);vs[n++]=mf.calc4(dw); + // dw.v0=f+13; dw.v2= cl.getLP(forms[i]); dw.v3=lx.getTag(forms[i+1]);vs[n++]=mf.calc4(dw); + // } + } + + + if (len>i+2) { + if (forms[i+2]<corpusWrds && forms[i+1]<corpusWrds) { + dw.v0=f+12; dw.v2= forms[i+2]; dw.v3 = forms[i+1];vs[n++]=mf.calc4(dw);vs[n++]=mf.calc3(dw); + } + d2.v0=f+13; d2.v2=pposs[i+1]; d2.v3= pposs[i+2]; vs[n++]=mf.calc4(d2); + } + + if (len>i+3) { + if (forms[i+3]<this.corpusWrds && forms[i+2]<this.corpusWrds) { + dw.v0=f+14; dw.v2= forms[i+3]; dw.v3 = forms[i+2]; vs[n++]=mf.calc4(dw); vs[n++]=mf.calc3(dw); + } + } + } + f+=15; + + // length + d2.v0=f++; d2.v2=is.chars[ic][i][11];vs[n++]=mf.calc3(d2); + + + // contains a number + d2.v0=f++; d2.v2=number; vs[n++]=mf.calc3(d2); + if (lemmas[i]< corpusWrds) {d1.v0=f; d1.v2=lemmas[i]; vs[n++]=mf.calc3(d1); } + f++; + + if (i!=0 &&len>i+1) { + + if (lemmas[i-1]< corpusWrds&& lemmas[i+1]<corpusWrds) {dw.v0=f; dw.v2=lemmas[i-1];dw.v3=lemmas[i+1];vs[n++]=mf.calc4(dw);} + + d2.v0=f+1; d2.v2=pposs[i-1]; d2.v3=pposs[i+1];vs[n++]=mf.calc4(d2); + } + f+=2; + + d2.v0= f++; d2.v2=i>=1? pposs[i-1]:_strp; vs[n++]=mf.calc3(d2); + + if (i>0) { + + dw.v0 = f; dw.v2 =i>=1? forms[i-1]<corpusWrds?forms[i-1]:-1:_strp; vs[n++]=mf.calc3(dw); + f++; + + if (lemmas[i-1]<corpusWrds) {dw.v0 = f; dw.v2 = i>=1? lemmas[i-1]:_strp; vs[n++]=mf.calc3(dw);} + f++; + + //if (len>i+1) {d2.v0=f; d2.v2= pposs[i-1];d2.v3= pposs[i+1]; vs[n++]=mf.calc4(d2);} + //f++; + + if (i>1) { + + d2.v0=f++; d2.v2=i<2?_strp: pposs[i-2]; vs[n++]=mf.calc3(d2); + d2.v0=f++; d2.v2= pposs[i-1]; d2.v3= pposs[i-2]; vs[n++]=mf.calc4(d2); + + if (forms[i-2]<corpusWrds) {dw.v0=f;dw.v2= forms[i-2]; vs[n++]=mf.calc3(dw);} f++; + if (forms[i-1]<corpusWrds) {dwp.v0=f;dwp.v2 = forms[i-1]; dwp.v3 = pposs[i-2];vs[n++]=mf.calc4(dwp); } f++; + if (forms[i-2]<corpusWrds) {dwp.v0=f;dwp.v2 = forms[i-2]; dwp.v3 = pposs[i-1];vs[n++]=mf.calc4(dwp);} f++; + + if (i>2) { + d2.v0=f++; d2.v2=pposs[i-3]; vs[n++]=mf.calc3(d2); + d2.v0=f++; d2.v2=pposs[i-2]; d2.v3= pposs[i-3]; vs[n++]=mf.calc4(d2); + if(forms[i-3]<this.corpusWrds && forms[i-2]<this.corpusWrds) { + dw.v0=f; dw.v2 = forms[i-3]; dw.v3 = forms[i-2]; vs[n++]=mf.calc4(dw); + } + f++; + } + } + } + vs[n] = Integer.MIN_VALUE; + } + + + public int fillFeatureVectorsOne(String fs, ParametersFloat params, int w1, InstancesTagger is, int n, short[] pos,Long2IntInterface li, float[] score) { + + float best = -1000; + int bestType = -1; + + F2SF f = new F2SF(params.parameters); + + long vs[] = new long[_MAX]; + int lemmas[]; + if (options.noLemmas) lemmas = new int[is.length(n)]; + else lemmas = is.plemmas[n]; + addFeatures(is,n,fs,w1,pos,is.forms[n], lemmas, vs); + + //for(int t = 0; t < types.length; t++) { + + for(int t=0;t<types.length;t++) { + + int p = t<<s_type; + + f.clear(); + for(int k=0;vs[k]!=Integer.MIN_VALUE;k++) if(vs[k]>0) f.add(li.l2i(vs[k]+p)); + if (f.score > best) { + bestType=t; + score[w1]= best =f.score; + } + } + return bestType; + + } + + public ArrayList<POS> classify(String fs, ParametersFloat params, int w1, InstancesTagger is, int n, short[] pos, Long2IntInterface li) { + + + F2SF f = new F2SF(params.parameters); + + long vs[] = new long[_MAX]; + int lemmas[]; + if (options.noLemmas) lemmas = new int[is.length(n)]; + else lemmas = is.plemmas[n]; + addFeatures(is,n,fs,w1,pos,is.forms[n], lemmas, vs); + + ArrayList<POS> best = new ArrayList<POS>(types.length); + + for(int t=0;t<types.length;t++) { + + int p = t<<s_type; + + f.clear(); + f.add(vs,li, p); + POS px = new POS(t, f.score); + best.add(px); + } + Collections.sort(best); + return best; + + } + + /* (non-Javadoc) + * @see is2.tag5.IPipe#write(java.io.DataOutputStream) + */ + @Override + public void write(DataOutputStream dos){ + try { + this.cl.write(dos); + this.lx.write(dos); + dos.writeInt(this.corpusWrds); + dos.writeInt(_pps.size()); + + for(Entry<Integer,int[]> e : _pps.entrySet()) { + dos.writeInt(e.getValue().length); + for(int k : e.getValue()) dos.writeInt(k); + dos.writeInt(e.getKey()); + } + } catch (IOException e) { + e.printStackTrace(); + } + } + + + public void read(DataInputStream dis){ + try { + this.cl =new Cluster(dis); + this.lx =new Lexicon(dis); + this.corpusWrds = dis.readInt(); + + int pc = dis.readInt(); + for(int j=0;j<pc;j++) { + int ps[] = new int [dis.readInt()]; + for(int k=0;k<ps.length;k++) ps[k]=dis.readInt(); + _pps.put(dis.readInt(), ps); + } + // System.out.println("_pps "+ps.length); + + } catch (IOException e) { + e.printStackTrace(); + } + } +} diff --git a/dependencyParser/basic/mate-tools/src/is2/tag/Lexicon.java b/dependencyParser/basic/mate-tools/src/is2/tag/Lexicon.java new file mode 100644 index 0000000..8a85813 --- /dev/null +++ b/dependencyParser/basic/mate-tools/src/is2/tag/Lexicon.java @@ -0,0 +1,140 @@ +/** + * + */ +package is2.tag; + +import is2.data.IEncoderPlus; +import is2.data.PipeGen; +import is2.util.DB; + +import java.io.BufferedReader; +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.FileInputStream; +import java.io.IOException; +import java.io.InputStreamReader; + +/** + * @author Dr. Bernd Bohnet, 07.01.2011 + * + * + */ +public class Lexicon { + + public static final String FR = "FR",TAG = "TAG"; + + final byte[][] word2tag; + public Lexicon(byte[][] w2t) { + + word2tag = w2t; + } + + public Lexicon(String clusterFile, IEncoderPlus mf) { + + final String REGEX = "\t"; + + // register words + try { + BufferedReader inputReader = new BufferedReader(new InputStreamReader(new FileInputStream(clusterFile),"UTF-8"),32768); + + int cnt=0; + String line; + while ((line =inputReader.readLine())!=null) { + + try { + String[] split = line.split(REGEX); + // int f = Integer.parseInt(split[2]); +// if (f>2) { + cnt++; + mf.register(PipeGen.WORD, split[0]); + mf.register(TAG, split[1]); //tag + + if (split.length>1) mf.register(FR, split[1]); // frequency +// } + } catch(Exception e) { + System.out.println("Error in lexicon line "+cnt+" error: "+e.getMessage()); + } + } + System.out.println("read number of words from lexicon "+cnt); + inputReader.close(); + + } catch (Exception e) { + e.printStackTrace(); + } + + word2tag = new byte[mf.getFeatureCounter().get(PipeGen.WORD)][1]; + // insert words + try { + String line; + BufferedReader inputReader = new BufferedReader(new InputStreamReader(new FileInputStream(clusterFile),"UTF-8"),32768); + + while ((line =inputReader.readLine())!=null) { + + String[] split = line.split(REGEX); + int w =mf.getValue(PipeGen.WORD, split[0]); + if (w<0) continue; + word2tag[w][0] = (byte)mf.getValue(TAG, split[1]); + // if (split.length>1) word2tag[w][1]= (byte)mf.getValue(FR, split[2]); // frequency + } + inputReader.close(); + int fill=0; + for(int l = 0; l<word2tag.length; l++ ){ + if (word2tag[l][0]!=0) fill++; + } + System.out.println("filled "+fill+" of "+word2tag.length); + + } catch (Exception e) { + e.printStackTrace(); + } + } + + /** + * Read the cluster + * @param dos + * @throws IOException + */ + public Lexicon(DataInputStream dis) throws IOException { + + word2tag = new byte[dis.readInt()][1]; + for(int i =0;i<word2tag.length;i++) { + word2tag[i][0]=dis.readByte(); +// word2tag[i][1]=dis.readByte(); + } + DB.println("Read lexicon with "+word2tag.length+" words "); + } + + /** + * Write the cluster + * @param dos + * @throws IOException + */ + public void write(DataOutputStream dos) throws IOException { + + dos.writeInt(word2tag.length); + for(byte[] i : word2tag) { + dos.writeByte(i[0]); +// dos.writeByte(i[1]); + } + + } + + /** + * @param form + * @return + */ + public int getTag(int form) { + if (word2tag.length<form || form<0) return -1; + return word2tag[form][0]; + } + + /** + * @param form + * @return + */ + public int getConf(int form) { + if (word2tag.length<form || form<0) return -1; + return word2tag[form][1]; + } + + +} diff --git a/dependencyParser/basic/mate-tools/src/is2/tag/MFO.java b/dependencyParser/basic/mate-tools/src/is2/tag/MFO.java new file mode 100644 index 0000000..df790e3 --- /dev/null +++ b/dependencyParser/basic/mate-tools/src/is2/tag/MFO.java @@ -0,0 +1,537 @@ +package is2.tag; + + +import is2.data.IEncoderPlus; +import is2.util.DB; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; +import java.util.HashMap; +import java.util.Map.Entry; + +/** + * Map Features, do not map long to integer + * + * @author Bernd Bohnet, 20.09.2009 + */ + +final public class MFO implements IEncoderPlus { + + /** The features and its values */ + private final HashMap<String,HashMap<String,Integer>> m_featureSets = new HashMap<String,HashMap<String,Integer>>(); + + /** The feature class and the number of values */ + private final HashMap<String,Integer> m_featureCounters = new HashMap<String,Integer>(); + + /** The number of bits needed to encode a feature */ + final HashMap<String,Integer> m_featureBits = new HashMap<String,Integer>(); + + /** Integer counter for long2int */ + //private int count=0; + + /** Stop growing */ + public boolean stop=false; + + final public static String NONE="<None>"; + + + + + + final public static class Data4 { + public int shift; + public short a0,a1,a2,a3,a4,a5,a6,a7,a8,a9; + public int v0,v1,v2,v3,v4,v5,v6,v7,v8,v9; + + final public long calcs(int b, long v, long l) { + if (l<0) return l; + l |= v<<shift; + shift +=b; + return l; + } + + + final public long calc2() { + + if (v0<0||v1<0) return -1; + + long l = v0; + shift =a0; + l |= (long)v1<<shift; + shift +=a1; + + return l; + } + + + + final public long calc3() { + + if (v0<0||v1<0||v2<0) return -1; + // if (v1<0||v2<0) return -1; + + long l = v0; + shift =a0; + l |= (long)v1<<shift; + shift +=a1; + l |= (long)v2<<shift; + shift=(short) (shift + a2); + + //shift=; + return l; + } + + + final public long calc4() { + if (v0<0||v1<0||v2<0||v3<0) return -1; + + long l = v0; + shift =a0; + l |= (long)v1<<shift; + shift +=a1; + l |= (long)v2<<shift; + shift +=a2; + l |= (long)v3<<shift; + shift= shift +a3; + + return l; + } + + + + final public long calc5() { + + if (v0<0||v1<0||v2<0||v3<0||v4<0) return -1; + + long l = v0; + shift =a0; + l |= (long)v1<<shift; + shift +=a1; + l |= (long)v2<<shift; + shift +=a2; + l |= (long)v3<<shift; + shift +=a3; + l |= (long)v4<<shift; + shift =shift+a4; + + return l; + } + + + final public long calc6() { + + if (v0<0||v1<0||v2<0||v3<0||v4<0||v5<0) return -1; + + long l = v0; + shift =a0; + l |= (long)v1<<shift; + shift +=a1; + l |= (long)v2<<shift; + shift +=a2; + l |= (long)v3<<shift; + shift +=a3; + l |= (long)v4<<shift; + shift +=a4; + l |= (long)v5<<shift; + shift =shift+a5; + + return l; + } + + final public long calc7() { + + if (v0<0||v1<0||v2<0||v3<0||v4<0||v5<0||v6<0) return -1; + + long l = v0; + shift =a0; + l |= (long)v1<<shift; + shift +=a1; + l |= (long)v2<<shift; + shift +=a2; + l |= (long)v3<<shift; + shift +=a3; + l |= (long)v4<<shift; + shift +=a4; + l |= (long)v5<<shift; + shift +=a5; + l |= (long)v6<<shift; + shift =shift+a6; + + return l; + } + + + final public long calc8() { + + if (v0<0||v1<0||v2<0||v3<0||v4<0||v5<0||v6<0||v7<0) return -1; + + long l = v0; + shift =a0; + l |= (long)v1<<shift; + shift +=a1; + l |= (long)v2<<shift; + shift +=a2; + l |= (long)v3<<shift; + shift +=a3; + l |= (long)v4<<shift; + shift +=a4; + l |= (long)v5<<shift; + shift +=a5; + l |= (long)v6<<shift; + shift +=a6; + l |= (long)v7<<shift; + shift =shift+a7; + + return l; + } + + } + + public MFO () {} + + + // public int size() {return count;} + + + final public void stop() { + stop=true; + } + + final public void start() { + stop=false; + } + + + /** + * Register an attribute class, if it not exists and add a possible value + * @param type + * @param type2 + */ + final public int register(String a, String v) { + + HashMap<String,Integer> fs = getFeatureSet().get(a); + if (fs==null) { + fs = new HashMap<String,Integer>(); + getFeatureSet().put(a, fs); + fs.put(NONE, 0); + getFeatureCounter().put(a, 1); + } + Integer c = getFeatureCounter().get(a); + + Integer i = fs.get(v); + if (i==null) { + fs.put(v, c); + c++; + getFeatureCounter().put(a,c); + return c-1; + } else return i; + } + + /** + * Calculates the number of bits needed to encode a feature + */ + public void calculateBits() { + + int total=0; + for(Entry<String,Integer> e : getFeatureCounter().entrySet() ){ + int bits =(int)Math.ceil((Math.log(e.getValue()+1)/Math.log(2))); + m_featureBits.put(e.getKey(), bits); + total+=bits; + // System.out.println(" "+e.getKey()+" bits "+bits+" number "+(e.getValue()+1)); + } + + // System.out.println("total number of needed bits "+total); + } + + + + @Override + public String toString() { + + StringBuffer content = new StringBuffer(); + for(Entry<String,Integer> e : getFeatureCounter().entrySet() ){ + content.append(e.getKey()+" "+e.getValue()); + content.append(':'); + // HashMap<String,Integer> vs = getFeatureSet().get(e.getKey()); + content.append(getFeatureBits(e.getKey())); + + /*if (vs.size()<120) + for(Entry<String,Integer> e2 : vs.entrySet()) { + content.append(e2.getKey()+" ("+e2.getValue()+") "); + }*/ + content.append('\n'); + + } + return content.toString(); + } + + + static final public long calcs(Data4 d,int b, long v, long l) { + if (l<0) return l; + l |= v<<d.shift; + d.shift +=b; + return l; + } + + + final public short getFeatureBits(String a) { + return (short)m_featureBits.get(a).intValue(); + } + + + + /** + * Get the integer place holder of the string value v of the type a + * + * @param t the type + * @param v the value + * @return the integer place holder of v + */ + final public int getValue(String t, String v) { + + if (m_featureSets.get(t)==null) return -1; + Integer vi = m_featureSets.get(t).get(v); + if (vi==null) return -1; //stop && + return vi.intValue(); + } + + /** + * Static version of getValue + * @see getValue + */ + final public int getValueS(String a, String v) { + + if (m_featureSets.get(a)==null) return -1; + Integer vi = m_featureSets.get(a).get(v); + if (vi==null) return -1; //stop && + return vi.intValue(); + } + + public int hasValue(String a, String v) { + + Integer vi = m_featureSets.get(a).get(v); + if (vi==null) return -1; + return vi.intValue(); + } + + + + + final public long calc2(Data4 d) { + + if (d.v0<0||d.v1<0) return -1; + // if (d.v1<0||d.v2<0) return -1; + + long l = d.v0; + short shift =d.a0; + l |= (long)d.v1<<shift; + shift +=d.a1; + // l |= (long)d.v2<<shift; + d.shift=shift; + + //d.shift=; + return l; + } + + + + final public long calc3(Data4 d) { + + if (d.v0<0||d.v1<0||d.v2<0) return -1; + + long l = d.v0; + short shift =d.a0; + l |= (long)d.v1<<shift; + shift +=d.a1; + l |= (long)d.v2<<shift; + d.shift=shift + d.a2; + return l; + } + + + final public long calc4(Data4 d) { + if (d.v0<0||d.v1<0||d.v2<0||d.v3<0) return -1; + + long l = d.v0; + int shift =d.a0; + l |= (long)d.v1<<shift; + shift +=d.a1; + l |= (long)d.v2<<shift; + shift +=d.a2; + l |= (long)d.v3<<shift; + d.shift= shift +d.a3; + + return l; + } + + + final public long calc5(Data4 d) { + + if (d.v0<0||d.v1<0||d.v2<0||d.v3<0||d.v4<0) return -1; + + long l = d.v0; + int shift =d.a0; + l |= (long)d.v1<<shift; + shift +=d.a1; + l |= (long)d.v2<<shift; + shift +=d.a2; + l |= (long)d.v3<<shift; + shift +=d.a3; + l |= (long)d.v4<<shift; + d.shift =shift+d.a4; + + return l; + } + + + final public long calc6(Data4 d) { + + if (d.v0<0||d.v1<0||d.v2<0||d.v3<0||d.v4<0||d.v5<0) return -1; + + long l = d.v0; + int shift =d.a0; + l |= (long)d.v1<<shift; + shift +=d.a1; + l |= (long)d.v2<<shift; + shift +=d.a2; + l |= (long)d.v3<<shift; + shift +=d.a3; + l |= (long)d.v4<<shift; + shift +=d.a4; + l |= (long)d.v5<<shift; + d.shift =shift+d.a5; + + return l; + } + + final public long calc7(Data4 d) { + + if (d.v0<0||d.v1<0||d.v2<0||d.v3<0||d.v4<0||d.v5<0||d.v6<0) return -1; + + long l = d.v0; + int shift =d.a0; + l |= (long)d.v1<<shift; + shift +=d.a1; + l |= (long)d.v2<<shift; + shift +=d.a2; + l |= (long)d.v3<<shift; + shift +=d.a3; + l |= (long)d.v4<<shift; + shift +=d.a4; + l |= (long)d.v5<<shift; + shift +=d.a5; + l |= (long)d.v6<<shift; + d.shift =shift+d.a6; + + return l; + } + + + final public long calc8(Data4 d) { + + if (d.v0<0||d.v1<0||d.v2<0||d.v3<0||d.v4<0||d.v5<0||d.v6<0||d.v7<0) return -1; + + long l = d.v0; + int shift =d.a0; + l |= (long)d.v1<<shift; + shift +=d.a1; + l |= (long)d.v2<<shift; + shift +=d.a2; + l |= (long)d.v3<<shift; + shift +=d.a3; + l |= (long)d.v4<<shift; + shift +=d.a4; + l |= (long)d.v5<<shift; + shift +=d.a5; + l |= (long)d.v6<<shift; + shift +=d.a6; + l |= (long)d.v7<<shift; + d.shift =shift+d.a7; + + return l; + } + + + + + + + + /** + * Maps a long to a integer value. This is very useful to save memory for sparse data long values + * @param node + * @return the integer + */ + static public int misses = 0; + static public int good = 0; + + + + + /** + * Write the data + * @param dos + * @throws IOException + */ + public void writeData(DataOutputStream dos) throws IOException { + dos.writeInt(getFeatureSet().size()); + for(Entry<String, HashMap<String,Integer>> e : getFeatureSet().entrySet()) { + dos.writeUTF(e.getKey()); + dos.writeInt(e.getValue().size()); + + for(Entry<String,Integer> e2 : e.getValue().entrySet()) { + + if(e2.getKey()==null) DB.println("key "+e2.getKey()+" value "+e2.getValue()+" e -key "+e.getKey()); + dos.writeUTF(e2.getKey()); + dos.writeInt(e2.getValue()); + + } + + } + } + public void read(DataInputStream din) throws IOException { + + int size = din.readInt(); + for(int i=0; i<size;i++) { + String k = din.readUTF(); + int size2 = din.readInt(); + + HashMap<String,Integer> h = new HashMap<String,Integer>(); + getFeatureSet().put(k,h); + for(int j = 0;j<size2;j++) { + h.put(din.readUTF(), din.readInt()); + } + getFeatureCounter().put(k, size2); + } + + calculateBits(); + } + + + /** + * Clear the data + */ + public void clearData() { + getFeatureSet().clear(); + m_featureBits.clear(); + getFeatureSet().clear(); + } + + public HashMap<String,Integer> getFeatureCounter() { + return m_featureCounters; + } + + public HashMap<String,HashMap<String,Integer>> getFeatureSet() { + return m_featureSets; + } + + static public String[] reverse(HashMap<String,Integer> v){ + String[] set = new String[v.size()]; + for(Entry<String,Integer> e : v.entrySet()) { + set[e.getValue()]=e.getKey(); + } + return set; + } + +} diff --git a/dependencyParser/basic/mate-tools/src/is2/tag/Options.java b/dependencyParser/basic/mate-tools/src/is2/tag/Options.java new file mode 100644 index 0000000..540f8ed --- /dev/null +++ b/dependencyParser/basic/mate-tools/src/is2/tag/Options.java @@ -0,0 +1,125 @@ +package is2.tag; + +import is2.util.OptionsSuper; + +import java.io.File; + + +public final class Options extends OptionsSuper { + + + public Options (String[] args) { + + for(int i = 0; i < args.length; i++) { + String[] pair = args[i].split(":"); + + if (pair[0].equals("--help")) explain(); + else if (pair[0].equals("-train")) { + train = true; + trainfile = args[i+1]; + } else if (pair[0].equals("-eval")) { + eval = true; + goldfile =args[i+1]; i++; + } else if (pair[0].equals("-test")) { + test = true; + testfile = args[i+1]; i++; + } else if (pair[0].equals("-i")) { + numIters = Integer.parseInt(args[i+1]); i++; + } + else if (pair[0].equals("-out")) { + outfile = args[i+1]; i++; + } + else if (pair[0].equals("-decode")) { + decodeProjective = args[i+1].equals("proj"); i++; + } + else if (pair[0].equals("-confidence")) { + + conf = true; + } + + else if (pair[0].equals("-count")) { + count = Integer.parseInt(args[i+1]); i++; + } else if (pair[0].equals("-model")) { + modelName = args[i+1]; i++; + } else if (pair[0].equals("-tmp")) { + tmp = args[i+1]; i++; + } else if (pair[0].equals("-format")) { + //format = args[i+1]; + formatTask = Integer.parseInt(args[i+1]); i++; + } else if (pair[0].equals("-allfeatures")) { + allFeatures=true; + } else if (pair[0].equals("-nonormalize")) { + normalize=false; + }else if (pair[0].equals("-nframes")) { + //format = args[i+1]; + nbframes= args[i+1]; i++; + + + } else if (pair[0].equals("-pframes")) { + //format = args[i+1]; + pbframes= args[i+1]; i++; + } else if (pair[0].equals("-nopred")) { + nopred =true; + } else if (pair[0].equals("-divide")) { + keep =true; + } else if (pair[0].equals("-lexicon")) { + lexicon= args[i+1]; i++; + + } else super.addOption(args, i); + + } + + + + + + try { + + if (trainfile!=null) { + + if (keep && tmp!=null) { + trainforest = new File(tmp); + if (!trainforest.exists()) keep=false; + + } else + if (tmp!=null) { + trainforest = File.createTempFile("train", ".tmp", new File(tmp)); + trainforest.deleteOnExit(); + } + else { + trainforest = File.createTempFile("train", ".tmp"); //,new File("F:\\") + trainforest.deleteOnExit(); + } + + + } + + + } catch (java.io.IOException e) { + System.out.println("Unable to create tmp files for feature forests!"); + System.out.println(e); + System.exit(0); + } + } + + private void explain() { + System.out.println("Usage: "); + System.out.println("java -class mate.jar is2.parser.Parser [Options]"); + System.out.println(); + System.out.println("Example: "); + System.out.println(" java -class mate.jar is2.parser.Parser -model eps3.model -train corpora/conll08st/train/train.closed -test corpora/conll08st/devel/devel.closed -out b3.test -eval corpora/conll08st/devel/devel.closed -count 2000 -i 6"); + System.out.println(""); + System.out.println("Options:"); + System.out.println(""); + System.out.println(" -train <file> the corpus a model is trained on; default "+this.trainfile); + System.out.println(" -test <file> the input corpus for testing; default "+this.testfile); + System.out.println(" -out <file> the output corpus (result) of a test run; default "+this.outfile); + System.out.println(" -model <file> the parsing model for traing the model is stored in the files"); + System.out.println(" and for parsing the model is load from this file; default "+this.modelName); + System.out.println(" -i <number> the number of training iterations; good numbers are 10 for smaller corpora and 6 for bigger; default "+this.numIters); + System.out.println(" -count <number> the n first sentences of the corpus are take for the training default "+this.count); + System.out.println(" -format <number> conll format of the year 8 or 9; default "+this.formatTask); + + System.exit(0); + } +} diff --git a/dependencyParser/basic/mate-tools/src/is2/tag/POS.java b/dependencyParser/basic/mate-tools/src/is2/tag/POS.java new file mode 100644 index 0000000..c8e039f --- /dev/null +++ b/dependencyParser/basic/mate-tools/src/is2/tag/POS.java @@ -0,0 +1,29 @@ +package is2.tag; + +public class POS implements Comparable<POS> { + + // pos tag + public int p; + + // score of the tag + public float s; + + // the position of the word in the sentence + public int w; + + public POS(int p, float s) { + this.p=p; + this.s=s; + } + + @Override + public int compareTo(POS o) { + + return s>o.s?-1:s==o.s?0:1; + } + + public String toString() { + return ""+p+":"+s; + } + +} diff --git a/dependencyParser/basic/mate-tools/src/is2/tag/Tagger.java b/dependencyParser/basic/mate-tools/src/is2/tag/Tagger.java new file mode 100644 index 0000000..b0c2dec --- /dev/null +++ b/dependencyParser/basic/mate-tools/src/is2/tag/Tagger.java @@ -0,0 +1,500 @@ +package is2.tag; + + + +import is2.data.F2SF; +import is2.data.FV; +import is2.data.Instances; +import is2.data.InstancesTagger; +import is2.data.Long2Int; +import is2.data.Long2IntInterface; +import is2.data.ParametersFloat; +import is2.data.PipeGen; +import is2.data.SentenceData09; +import is2.io.CONLLReader09; +import is2.io.CONLLWriter09; +import is2.tools.IPipe; +import is2.tools.Tool; +import is2.tools.Train; +import is2.util.DB; +import is2.util.Evaluator; +import is2.util.OptionsSuper; + +import java.io.BufferedInputStream; +import java.io.BufferedOutputStream; +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.FileOutputStream; +import java.io.IOException; +import java.util.ArrayList; +import java.util.Map.Entry; +import java.util.zip.ZipEntry; +import java.util.zip.ZipInputStream; +import java.util.zip.ZipOutputStream; + + +public class Tagger implements Tool, Train { + + public ExtractorT2 pipe; + public ParametersFloat params; + public Long2IntInterface li; + public MFO mf; + private OptionsSuper _options; + + /** + * Initialize + * @param options + */ + public Tagger (Options options) { + + + // load the model + try { + readModel(options); + } catch (Exception e) { + e.printStackTrace(); + } + } + public Tagger() { } + + /** + * @param modelFileName the file name of the model + */ + public Tagger(String modelFileName) { + this(new Options(new String[]{"-model",modelFileName})); + } + + public static void main (String[] args) throws FileNotFoundException, Exception + { + + long start = System.currentTimeMillis(); + Options options = new Options(args); + + + Tagger tagger = new Tagger(); + + if (options.train) { + + // depReader.normalizeOn=false; + + tagger.li = new Long2Int(options.hsize); + tagger.pipe = new ExtractorT2 (options, tagger.mf= new MFO()); + + //tagger.pipe.li =tagger.li; + + InstancesTagger is = (InstancesTagger)tagger.pipe.createInstances(options.trainfile); + + tagger.params = new ParametersFloat(tagger.li.size()); + + tagger.train(options, tagger.pipe,tagger.params,is); + tagger.writeModel(options, tagger.pipe, tagger.params); + + } + + if (options.test) { + + tagger.readModel(options); + + tagger.out(options,tagger.pipe, tagger.params); + } + + System.out.println(); + + if (options.eval) { + System.out.println("\nEVALUATION PERFORMANCE:"); + Evaluator.evaluateTagger(options.goldfile, options.outfile,options.format); + } + long end = System.currentTimeMillis(); + System.out.println("used time "+((float)((end-start)/100)/10)); + } + + public void readModel(OptionsSuper options) { + + try{ + pipe = new ExtractorT2(options, mf =new MFO()); + _options=options; + // load the model + ZipInputStream zis = new ZipInputStream(new BufferedInputStream(new FileInputStream(options.modelName))); + zis.getNextEntry(); + DataInputStream dis = new DataInputStream(new BufferedInputStream(zis)); + + pipe.mf.read(dis); + pipe.initValues(); + pipe.initFeatures(); + + params = new ParametersFloat(0); + params.read(dis); + li = new Long2Int(params.parameters.length); + pipe.read(dis); + + dis.close(); + + pipe.types = new String[pipe.mf.getFeatureCounter().get(ExtractorT2.POS)]; + for(Entry<String,Integer> e : pipe.mf.getFeatureSet().get(ExtractorT2.POS).entrySet()) + pipe.types[e.getValue()] = e.getKey(); + + DB.println("Loading data finished. "); + } catch(Exception e) { + e.printStackTrace(); + } + } + + /** + * Do the training + * @param instanceLengths + * @param options + * @param pipe + * @param params + * @throws IOException + * @throws InterruptedException + * @throws ClassNotFoundException + */ + public void train(OptionsSuper options, IPipe pipe, ParametersFloat params, Instances is2) { + + InstancesTagger is = (InstancesTagger)is2; + String wds[] = mf.reverse(this.pipe.mf.getFeatureSet().get(ExtractorT2.WORD)); + + int pd[] = new int[this.pipe.types.length]; + for(int k=0;k<pd.length;k++) pd[k]=k; + + int del=0; + F2SF f = new F2SF(params.parameters); + long vs[] = new long[ExtractorT2._MAX]; + + int types =this.pipe.types.length; + + double upd = options.numIters*is.size() +1; + + for(int i = 0; i <options.numIters ; i++) { + + long start = System.currentTimeMillis(); + + int numInstances = is.size(); + + long last= System.currentTimeMillis(); + FV pred = new FV(),gold = new FV(); + + int correct =0,count=0; + System.out.print("Iteration "+i+": "); + + for(int n = 0; n < numInstances; n++) { + + if((n+1) % 500 == 0) del= PipeGen.outValueErr(n+1, (count-correct),(float)correct/(float)count,del,last,upd); + + int length = is.length(n); + + upd--; + + for(int w = 1; w < length; w++) { + + double best = -1000; + short bestType = -1; + + int[] lemmas; //= is.lemmas[n]; + if (options.noLemmas)lemmas = new int[is.length(n)]; + else lemmas = is.plemmas[n]; + + this.pipe.addFeatures(is,n,wds[is.forms[n][w]],w,is.gpos[n],is.forms[n], lemmas, vs); + + for(short t=0;t<types;t++) { + + // the hypotheses of a part of speech tag + long p = t<<ExtractorT2.s_type; + f.clear(); + + // add the features to the vector + for(int k1=0;vs[k1]!=Integer.MIN_VALUE;k1++) { + if (vs[k1]>0) f.add(this.li.l2i(vs[k1]|p)); + } + + if (f.score > best) { + bestType=t; + best =f.score; + } + } + + count++; + if (bestType == is.gpos[n][w] ) { + correct++; + continue; + } + + pred.clear(); + for (int k1=0;vs[k1]!=Integer.MIN_VALUE;k1++) if (vs[k1]>0) pred.add(this.li.l2i(vs[k1]| bestType<<ExtractorT2.s_type)); + + gold.clear(); + for (int k1=0;vs[k1]!=Integer.MIN_VALUE;k1++) if (vs[k1]>0) gold.add(this.li.l2i(vs[k1] | is.gpos[n][w]<<ExtractorT2.s_type)); + + params.update(pred,gold, (float)upd, 1.0F); + } + } + + long end = System.currentTimeMillis(); + String info = "time "+(end-start); + PipeGen.outValueErr(numInstances, (count-correct),(float)correct/(float)count,del,last,upd,info); + System.out.println(); + del=0; + } + + params.average(options.numIters*is.size()); + + } + + + /** + * Tag a sentence + * @param options + * @param pipe + * @param params + * @throws IOException + */ + public void out (OptionsSuper options, IPipe pipe, ParametersFloat params) { + + try { + + + long start = System.currentTimeMillis(); +// change this backe!!! +// CONLLReader09 depReader = new CONLLReader09(options.testfile, CONLLReader09.NO_NORMALIZE); + CONLLReader09 depReader = new CONLLReader09(options.testfile); + + CONLLWriter09 depWriter = new CONLLWriter09(options.outfile); + + System.out.print("Processing Sentence: "); + pipe.initValues(); + + int cnt = 0; + int del=0; + while(true) { + + InstancesTagger is = new InstancesTagger(); + is.init(1, mf); + SentenceData09 instance = depReader.getNext(is); + if (instance == null || instance.forms == null) break; + + + is.fillChars(instance, 0, ExtractorT2._CEND); + + cnt++; + + + tag(is, instance); + + SentenceData09 i09 = new SentenceData09(instance); + i09.createSemantic(instance); + depWriter.write(i09); + + if(cnt % 100 == 0) del=PipeGen.outValue(cnt, del); + + } + del=PipeGen.outValue(cnt, del); + depWriter.finishWriting(); + + float min=1000, max=-1000; + + // int r[] = new int[14]; + /* + for(Entry<Float, Integer> e : map.entrySet()) { + if(e.getKey()<min)min=e.getKey(); + if(e.getKey()>max)max=e.getKey(); + + if(e.getKey()<0.2) r[0]++; + else if(e.getKey()<0.5) r[1]+=e.getValue(); + else if(e.getKey()<0.7) r[2]+=e.getValue(); + else if(e.getKey()<0.8) r[3]+=e.getValue(); + else if(e.getKey()<0.9) r[4]+=e.getValue(); + else if(e.getKey()<1.0) r[5]+=e.getValue(); + else if(e.getKey()<1.2) r[6]+=e.getValue(); + else if(e.getKey()<1.3) r[7]+=e.getValue(); + else if(e.getKey()<1.4) r[8]+=e.getValue(); + else if(e.getKey()<1.5) r[9]+=e.getValue(); + else if(e.getKey()<1.9) r[10]+=e.getValue(); + else if(e.getKey()<2.2) r[11]+=e.getValue(); + else if(e.getKey()<2.5) r[12]+=e.getValue(); + else if(e.getKey()>=2.5) r[13]+=e.getValue(); + } + */ + // for(int k=0;k<r.length;k++) System.out.println(k+" "+r[k][0]+" "+((float)r[k][1]/(float)r[k][0])+" good "+r[k][1]); + // System.out.println("min "+min+" "+max); + + long end = System.currentTimeMillis(); + System.out.println(PipeGen.getSecondsPerInstnace(cnt,(end-start))); + System.out.println(PipeGen.getUsedTime(end-start)); + } catch(Exception e) { + e.printStackTrace(); + } + } + + + public SentenceData09 tag(SentenceData09 instance){ + InstancesTagger is = new InstancesTagger(); + is.init(1, pipe.mf); + new CONLLReader09().insert(is, instance); + is.fillChars(instance, 0, ExtractorT2._CEND); + tag(is, instance); + + return instance; + } + + + private void tag(InstancesTagger is, SentenceData09 instance) { + + int length = instance.ppos.length; + + short[] pos = new short[instance.gpos.length]; + + float sc[] =new float[instance.ppos.length]; + + instance.ppos[0]= is2.io.CONLLReader09.ROOT_POS; + pos[0]=(short)pipe.mf.getValue(ExtractorT2.POS, is2.io.CONLLReader09.ROOT_POS); + + for(int j = 1; j < length; j++) { + + short bestType = (short)pipe.fillFeatureVectorsOne( instance.forms[j],params, j, is,0,pos,this.li,sc); + pos[j] = bestType; + instance.ppos[j]= pipe.types[bestType]; + } + + for(int j = 1; j < length; j++) { + + short bestType = (short)pipe.fillFeatureVectorsOne(instance.forms[j],params, j, is,0,pos,this.li,sc); + instance.ppos[j]= pipe.types[bestType]; + pos[j]=bestType; + } + } + + /** + * Tag a single word and return a n-best list of Part-of-Speech tags. + * + * @param is set of sentences + * @param instanceIndex index to the sentence in question + * @param word word to be tagged + * @return n-best list of Part-of-Speech tags + */ + public ArrayList<POS> tag(InstancesTagger is,int instanceIndex, int word, String wordForm) { + + return pipe.classify( wordForm , params, word, is, instanceIndex, is.pposs[instanceIndex], li); + + } + + public ArrayList<String> tagStrings(InstancesTagger is,int instanceIndex, int word, String wordForm) { + + ArrayList<POS> plist = pipe.classify( wordForm , params, word, is, instanceIndex, is.pposs[instanceIndex], li); + String pos[] = mf.reverse(this.pipe.mf.getFeatureSet().get(ExtractorT2.POS)); + + ArrayList<String> postags =null; + for(POS p : plist) { + try { + postags.add(pos[p.p]); + }catch(Exception e) { + e.printStackTrace(); + } + } + return postags; + + + } + + + + /** + * Tag a sentence + * @param options + * @param pipe + * @param parametersReranker + * @throws IOException + */ + public String[] tag (String[] words, String[] lemmas) { + + String[] pposs = new String[words.length]; + + try { + pipe.initValues(); + + int length = words.length+1; + + + InstancesTagger is = new InstancesTagger(); + is.init(1, pipe.mf); + is.createInstance09(length); + + SentenceData09 instance = new SentenceData09(); + instance.forms = new String[length]; + instance.forms[0]=is2.io.CONLLReader09.ROOT; + + instance.plemmas = new String[length]; + instance.plemmas[0]=is2.io.CONLLReader09.ROOT_LEMMA; + + for(int j = 0; j < words.length; j++) { + instance.forms[j+1]=words[j]; + instance.plemmas[j+1]=lemmas[j]; + } + + for(int j = 0; j < length; j++) { + is.setForm(0, j, instance.forms[j]); + is.setLemma(0, j, instance.plemmas[j]); + } + + instance.ppos = new String[length]; + + is.fillChars(instance, 0, ExtractorT2._CEND); + + this.tag(is, instance); + + for(int j = 0; j < words.length; j++) { + pposs[j] = instance.ppos[j+1]; + } + } catch(Exception e) { + e.printStackTrace(); + } + + return pposs; + + + } + + /* (non-Javadoc) + * @see is2.tools.Tool#apply(is2.data.SentenceData09) + */ + @Override + public SentenceData09 apply(SentenceData09 snt) { + + + SentenceData09 it = new SentenceData09(); + it.createWithRoot(snt); + it = tag(it); + SentenceData09 i09 = new SentenceData09(it); + i09.createSemantic(it); + return i09; + } + + + + /* (non-Javadoc) + * @see is2.tools.Train#writeModel(is2.util.OptionsSuper, is2.mtag2.Pipe, is2.data.ParametersFloat) + */ + @Override + public void writeModel(OptionsSuper options, IPipe pipe, is2.data.ParametersFloat params) { + try{ + ZipOutputStream zos = new ZipOutputStream(new BufferedOutputStream(new FileOutputStream(options.modelName))); + zos.putNextEntry(new ZipEntry("data")); + DataOutputStream dos = new DataOutputStream(new BufferedOutputStream(zos)); + + this.pipe.mf.writeData(dos); + + DB.println("number of parameters "+params.parameters.length); + dos.flush(); + + params.write(dos); + pipe.write(dos); + dos.flush(); + dos.close(); + + } catch(Exception e) { + e.printStackTrace(); + } + } + +} diff --git a/dependencyParser/basic/mate-tools/src/is2/tag/package.html b/dependencyParser/basic/mate-tools/src/is2/tag/package.html new file mode 100644 index 0000000..469fdf6 --- /dev/null +++ b/dependencyParser/basic/mate-tools/src/is2/tag/package.html @@ -0,0 +1,4 @@ +Package info +<br><br> +This parser includes a tagger into the dependency parser +<br> \ No newline at end of file diff --git a/dependencyParser/basic/mate-tools/src/is2/tools/IPipe.java b/dependencyParser/basic/mate-tools/src/is2/tools/IPipe.java new file mode 100644 index 0000000..d976074 --- /dev/null +++ b/dependencyParser/basic/mate-tools/src/is2/tools/IPipe.java @@ -0,0 +1,30 @@ +/** + * + */ +package is2.tools; + +import is2.data.Instances; +import is2.data.InstancesTagger; + +import java.io.DataOutputStream; +import java.io.File; + +/** + * @author Dr. Bernd Bohnet, 25.12.2010 + * + * + */ +public interface IPipe { + + public abstract Instances createInstances(String file); + + public abstract void initValues(); + + /** + * Initialize the features types. + */ + public abstract void initFeatures(); + + public abstract void write(DataOutputStream dos); + +} \ No newline at end of file diff --git a/dependencyParser/basic/mate-tools/src/is2/tools/Retrainable.java b/dependencyParser/basic/mate-tools/src/is2/tools/Retrainable.java new file mode 100644 index 0000000..67a2e56 --- /dev/null +++ b/dependencyParser/basic/mate-tools/src/is2/tools/Retrainable.java @@ -0,0 +1,25 @@ +package is2.tools; + +import is2.data.SentenceData09; + +/** + * Provides Methods for the retraining + * @author bohnetbd + * + */ +public interface Retrainable { + + /** + * Retrains with a update factor (upd). + * The retraining stops when the model was successful adapted or it gave up after the maximal iterations. + * + * @param sentence the data container of the new example. + * @param upd the update factor, e.g. 0.01 + * @param iterations maximal number of iterations that are tried to adapt the system. + * @return success = true -- else false + */ + public boolean retrain(SentenceData09 sentence, float upd, int iterations) ; + + boolean retrain(SentenceData09 sentence, float upd, int iterations, boolean print); + +} diff --git a/dependencyParser/basic/mate-tools/src/is2/tools/Tool.java b/dependencyParser/basic/mate-tools/src/is2/tools/Tool.java new file mode 100644 index 0000000..06246a2 --- /dev/null +++ b/dependencyParser/basic/mate-tools/src/is2/tools/Tool.java @@ -0,0 +1,25 @@ +/** + * + */ +package is2.tools; + +import is2.data.SentenceData09; + +/** + * @author Bernd Bohnet, 27.10.2010 + * + * Interface to all tools + */ +public interface Tool { + + + /** + * Uses the tool and applies it on the input sentence. + * The input is altered and has to include a root (token). + * + * @param i the input sentence + * @return The result of the performance without the root. + */ + SentenceData09 apply(SentenceData09 snt09); + +} diff --git a/dependencyParser/basic/mate-tools/src/is2/tools/ToolIO.java b/dependencyParser/basic/mate-tools/src/is2/tools/ToolIO.java new file mode 100644 index 0000000..279a4ff --- /dev/null +++ b/dependencyParser/basic/mate-tools/src/is2/tools/ToolIO.java @@ -0,0 +1,17 @@ +/** + * + */ +package is2.tools; + +import is2.data.SentenceData09; + +/** + * @author Bernd Bohnet, 27.10.2010 + * + * Interface to all tools + */ +public interface ToolIO { + + void readModel(); + +} diff --git a/dependencyParser/basic/mate-tools/src/is2/tools/Train.java b/dependencyParser/basic/mate-tools/src/is2/tools/Train.java new file mode 100644 index 0000000..234f937 --- /dev/null +++ b/dependencyParser/basic/mate-tools/src/is2/tools/Train.java @@ -0,0 +1,25 @@ +/** + * + */ +package is2.tools; + +import is2.data.Instances; +import is2.data.ParametersFloat; +import is2.util.OptionsSuper; + +/** + * @author Dr. Bernd Bohnet, 24.12.2010 + * + * + */ +public interface Train { + + public abstract void writeModel(OptionsSuper options, IPipe pipe, ParametersFloat params); + + public abstract void readModel(OptionsSuper options); + + public abstract void train(OptionsSuper options, IPipe pipe, ParametersFloat params, Instances is); + + public abstract void out(OptionsSuper options, IPipe pipe, ParametersFloat params); + +} \ No newline at end of file diff --git a/dependencyParser/basic/mate-tools/src/is2/util/Convert.java b/dependencyParser/basic/mate-tools/src/is2/util/Convert.java new file mode 100644 index 0000000..1ed2389 --- /dev/null +++ b/dependencyParser/basic/mate-tools/src/is2/util/Convert.java @@ -0,0 +1,455 @@ +/** + * + */ +package is2.util; + +import java.io.BufferedReader; +import java.io.BufferedWriter; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.InputStreamReader; +import java.io.OutputStreamWriter; +import java.io.Reader; +import java.nio.charset.Charset; +import java.util.ArrayList; + + +import is2.data.SentenceData09; +import is2.io.CONLLReader06; +import is2.io.CONLLReader08; +import is2.io.CONLLReader09; +import is2.io.CONLLWriter06; +import is2.io.CONLLWriter09; + +/** + * @author Dr. Bernd Bohnet, 01.03.2010 + * + * + */ +public class Convert { + + + + public static void main(String args[]) throws Exception { + + + if (args.length<2) { + + System.out.println("Usage"); + System.out.println(" java is2.util.Convert <in> <out> [-w06|-w0809|-yue] [-wordsonly]"); + + + } + + int todo =9; + boolean wordsOnly=false; + for(String a : args) { + if (a!=null && a.equals("-w06")) todo=6; + else if (a!=null && a.equals("-w0809")) todo=89; + else if (a!=null && a.equals("-yue")) todo=99; + else if (a!=null && a.equals("-utf8")) todo=8; + + if (a!=null && a.equals("-wordsonly")) wordsOnly=true; + + + } + + if (todo==9)convert(args[0],args[1]); + else if (todo==6) convert0906(args[0],args[1]); + else if (todo==8) convert8(args[0],args[1], args[2]); + else if (todo==89) convert0809(args[0],args[1]); + else if (todo==99) { + convertChnYue(args[0],args[1],wordsOnly); + } + + + } + + private static void convert8(String infile, String outfile, String format) { + try { + + System.out.println("availableCharsets: "+Charset.availableCharsets()); + + BufferedReader in = new BufferedReader(new InputStreamReader(new FileInputStream(infile), format)); + BufferedWriter out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outfile), "UTF8")); + ; + int ch; + + int count =0, wcount=0;; + while ((ch = in.read()) > -1) { + count++; + + if (Character.isDefined(ch)) { + + out.write(ch); + wcount++; + } + } + in.close(); + out.close(); + System.out.println("read "+count+" chars and wrote "+wcount+" utf8 chars"); + } + catch (Exception e) { + e.printStackTrace(); + } + + } + + public static void convert(String source, String target) throws Exception { + + CONLLReader06 reader = new CONLLReader06(source); + CONLLWriter09 writer = new CONLLWriter09(target); + + int str =0; + while (true) { + SentenceData09 i = reader.getNext(); + str++; + if (i == null) break; + + + String[] formsNoRoot = new String[i.length()-1]; + String[] posNoRoot = new String[formsNoRoot.length]; + String[] lemmas = new String[formsNoRoot.length]; + + String[] org_lemmas = new String[formsNoRoot.length]; + + String[] of = new String[formsNoRoot.length]; + String[] pf = new String[formsNoRoot.length]; + + String[] pposs = new String[formsNoRoot.length]; + String[] labels = new String[formsNoRoot.length]; + String[] fillp = new String[formsNoRoot.length]; + + int[] heads = new int[formsNoRoot.length]; + + + + for(int j = 0; j < formsNoRoot.length; j++) { + formsNoRoot[j] = i.forms[j+1]; + if (formsNoRoot[j].length()==0 ||formsNoRoot[j].equals("")) { + System.out.println("error forms "+str); + // System.exit(0); + formsNoRoot[j]=" "; + } + posNoRoot[j] = i.gpos[j+1]; + if (posNoRoot[j].length()==0 ||posNoRoot[j].equals(" ")) { + System.out.println("error pos "+str); + // System.exit(0); + } + pposs[j] = i.ppos[j+1]; + if (pposs[j].length()==0 ||pposs[j].equals(" ")) { + System.out.println("error pos "+str); + //System.exit(0); + } + + labels[j] = i.labels[j+1]; + if (labels[j].length()==0 ||labels[j].equals(" ")) { + System.out.println("error lab "+str); + // System.exit(0); + } + heads[j] = i.heads[j+1]; + if(heads[j]> posNoRoot.length) { + System.out.println("head out of range "+heads[j]+" "+heads.length+" "+str); + heads[j]=posNoRoot.length; + } + + lemmas[j] = i.plemmas[j+1]; + if (lemmas[j].length()==0 ||lemmas[j].equals(" ")) { + System.out.println("error lab "+str); + // System.exit(0); + } + org_lemmas[j] = i.lemmas[j+1]; + if (org_lemmas[j].length()==0 ||org_lemmas[j].equals(" ")) { + System.out.println("error lab "+str); + // System.exit(0); + } + of[j] = i.ofeats[j+1]; + pf[j] = i.pfeats[j+1]; + if (str==6099) { + // System.out.println(formsNoRoot[j]+"\t"+posNoRoot[j]+"\t"+pposs[j]+"\t"+labels[j]+"\t"+heads[j]); + } + + // (instance.fillp!=null) fillp[j] = instance.fillp[j+1]; + } + + SentenceData09 i09 = new SentenceData09(formsNoRoot, formsNoRoot, formsNoRoot,pposs, pposs, labels, heads,fillp,of, pf); + + //public SentenceData09(String[] forms, String[] lemmas, String[] olemmas,String[] gpos, String[] ppos, String[] labs, int[] heads, String[] fillpred) { + //SentenceData09 + // SentenceData09 i2 = new SentenceData09(i.forms, i.lemmas,i.org_lemmas,); + + writer.write(i09); + + + } + writer.finishWriting(); + + + } + + + + public static void convertChnYue(String source, String target, boolean wordsOnly) throws Exception { + + + BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(source),"UTF-8"),32768); + + CONLLWriter09 writer = new CONLLWriter09(target); + + int str =0; + while (true) { + + ArrayList<String[]> lines = new ArrayList<String[]>(); + + String line; + while((line = reader.readLine())!=null) { + + if (line.length()<2) break; + String split[] = line.split("\t"); + lines.add(split); + } + if (line ==null)break; + + str++; + + + String[] formsNoRoot = new String[lines.size()]; + String[] posNoRoot = new String[formsNoRoot.length]; + String[] lemmas = new String[formsNoRoot.length]; + + String[] org_lemmas = new String[formsNoRoot.length]; + + String[] of = new String[formsNoRoot.length]; + String[] pf = new String[formsNoRoot.length]; + + String[] pposs = new String[formsNoRoot.length]; + String[] labels = new String[formsNoRoot.length]; + String[] fillp = new String[formsNoRoot.length]; + + int[] heads = new int[formsNoRoot.length]; + + + + for(int j = 0; j < formsNoRoot.length; j++) { + formsNoRoot[j] = lines.get(j)[0]; + if (formsNoRoot[j].length()==0 ||formsNoRoot[j].equals("")) { + System.out.println("error forms "+str); + // System.exit(0); + formsNoRoot[j]="_"; + } + + posNoRoot[j] = lines.get(j)[1]; + if (posNoRoot[j].length()==0 ||posNoRoot[j].equals(" ")) { + System.out.println("error pos "+str); + // System.exit(0); + } + pposs[j] = "_"; + + labels[j] = lines.get(j)[3]; + if (labels[j].length()==0 ||labels[j].equals(" ")) { + System.out.println("error lab "+str); + labels[j] = "_"; + // System.exit(0); + } + heads[j] = Integer.parseInt(lines.get(j)[2])+1; + if(heads[j]> posNoRoot.length) { + System.out.println("head out of range "+heads[j]+" "+heads.length+" "+str); + heads[j]=posNoRoot.length; + } + + // 0 is root and not -1 + if (heads[j]==-1)heads[j]=0; + + lemmas[j] = "_"; + + org_lemmas[j] = "_"; + + of[j] = "_"; + pf[j] = "_"; + + if (wordsOnly) { + posNoRoot[j]="_"; + heads[j]=0; + labels[j] = "_"; + } + + // (instance.fillp!=null) fillp[j] = instance.fillp[j+1]; + } + + SentenceData09 i09 = new SentenceData09(formsNoRoot, lemmas, org_lemmas,posNoRoot, posNoRoot, labels, heads,fillp,of, pf); + + //public SentenceData09(String[] forms, String[] lemmas, String[] olemmas,String[] gpos, String[] ppos, String[] labs, int[] heads, String[] fillpred) { + //SentenceData09 + // SentenceData09 i2 = new SentenceData09(i.forms, i.lemmas,i.org_lemmas,); + + writer.write(i09); + + + } + writer.finishWriting(); + + + } + + + + /** + * Convert the 0 + * @param source + * @param target + * @throws Exception + */ + public static void convert0809(String source, String target) throws Exception { + + CONLLReader08 reader = new CONLLReader08(source); + CONLLWriter09 writer = new CONLLWriter09(target); + + int str =0; + while (true) { + SentenceData09 i = reader.getNext(); + str++; + if (i == null) break; + + + String[] formsNoRoot = new String[i.length()-1]; + String[] posNoRoot = new String[formsNoRoot.length]; + String[] lemmas = new String[formsNoRoot.length]; + + String[] org_lemmas = new String[formsNoRoot.length]; + + String[] of = new String[formsNoRoot.length]; + String[] pf = new String[formsNoRoot.length]; + + String[] pposs = new String[formsNoRoot.length]; + String[] labels = new String[formsNoRoot.length]; + String[] fillp = new String[formsNoRoot.length]; + + int[] heads = new int[formsNoRoot.length]; + + + + for(int j = 0; j < formsNoRoot.length; j++) { + formsNoRoot[j] = i.forms[j+1]; + if (formsNoRoot[j].length()==0 ||formsNoRoot[j].equals("")) { + System.out.println("error forms "+str); + // System.exit(0); + formsNoRoot[j]=" "; + } + posNoRoot[j] = i.gpos[j+1]; + if (posNoRoot[j].length()==0 ||posNoRoot[j].equals(" ")) { + System.out.println("error pos "+str); + // System.exit(0); + } + pposs[j] = i.ppos[j+1]; + if (pposs[j].length()==0 ||pposs[j].equals(" ")) { + System.out.println("error pos "+str); + //System.exit(0); + } + + labels[j] = i.labels[j+1]; + if (labels[j].length()==0 ||labels[j].equals(" ")) { + System.out.println("error lab "+str); + // System.exit(0); + } + heads[j] = i.heads[j+1]; + if(heads[j]> posNoRoot.length) { + System.out.println("head out of range "+heads[j]+" "+heads.length+" "+str); + heads[j]=posNoRoot.length; + } + + lemmas[j] = i.plemmas[j+1]; + if (lemmas[j].length()==0 ||lemmas[j].equals(" ")) { + System.out.println("error lab "+str); + // System.exit(0); + } + org_lemmas[j] = i.lemmas[j+1]; + // if (org_lemmas[j].length()==0 ||org_lemmas[j].equals(" ")) { + // System.out.println("error lab "+str); + // // System.exit(0); + // } +// of[j] = i.ofeats[j+1]; +// pf[j] = i.pfeats[j+1]; + if (str==6099) { + // System.out.println(formsNoRoot[j]+"\t"+posNoRoot[j]+"\t"+pposs[j]+"\t"+labels[j]+"\t"+heads[j]); + } + + // (instance.fillp!=null) fillp[j] = instance.fillp[j+1]; + } + + SentenceData09 i09 = new SentenceData09(formsNoRoot, org_lemmas, lemmas,pposs, pposs, labels, heads,fillp,of, pf); + + //public SentenceData09(String[] forms, String[] lemmas, String[] olemmas,String[] gpos, String[] ppos, String[] labs, int[] heads, String[] fillpred) { + //SentenceData09 + // SentenceData09 i2 = new SentenceData09(i.forms, i.lemmas,i.org_lemmas,); + + writer.write(i09); + + + } + writer.finishWriting(); + + + } + + + public static void convert0906(String source, String target) throws Exception { + + CONLLReader09 reader = new CONLLReader09(source); + CONLLWriter06 writer = new CONLLWriter06(target); + + + while (true) { + SentenceData09 i = reader.getNext(); + + if (i == null) break; + + + String[] formsNoRoot = new String[i.length()-1]; + String[] posNoRoot = new String[formsNoRoot.length]; + String[] lemmas = new String[formsNoRoot.length]; + + String[] org_lemmas = new String[formsNoRoot.length]; + + String[] of = new String[formsNoRoot.length]; + String[] pf = new String[formsNoRoot.length]; + + String[] pposs = new String[formsNoRoot.length]; + String[] labels = new String[formsNoRoot.length]; + String[] fillp = new String[formsNoRoot.length]; + + int[] heads = new int[formsNoRoot.length]; + + for(int j = 0; j < formsNoRoot.length; j++) { + formsNoRoot[j] = i.forms[j+1]; + posNoRoot[j] = i.gpos[j+1]; + pposs[j] = i.gpos[j+1]; + + labels[j] = i.labels[j+1]; + heads[j] = i.heads[j+1]; + lemmas[j] = i.plemmas[j+1]; + + org_lemmas[j] = i.lemmas[j+1]; + of[j] = i.ofeats[j+1]; + pf[j] = i.pfeats[j+1]; + + // (instance.fillp!=null) fillp[j] = instance.fillp[j+1]; + } + + SentenceData09 i09 = new SentenceData09(formsNoRoot, lemmas, org_lemmas,posNoRoot, pposs, labels, heads,fillp,of, pf); + + //public SentenceData09(String[] forms, String[] lemmas, String[] olemmas,String[] gpos, String[] ppos, String[] labs, int[] heads, String[] fillpred) { + //SentenceData09 + // SentenceData09 i2 = new SentenceData09(i.forms, i.lemmas,i.org_lemmas,); + + writer.write(i09); + + + } + writer.finishWriting(); + + + } + + + +} diff --git a/dependencyParser/basic/mate-tools/src/is2/util/Convert0409.java b/dependencyParser/basic/mate-tools/src/is2/util/Convert0409.java new file mode 100644 index 0000000..7fc1142 --- /dev/null +++ b/dependencyParser/basic/mate-tools/src/is2/util/Convert0409.java @@ -0,0 +1,182 @@ +/** + * + */ +package is2.util; + +import is2.data.SentenceData09; +import is2.io.CONLLReader04; +import is2.io.CONLLReader06; +import is2.io.CONLLReader09; +import is2.io.CONLLWriter06; +import is2.io.CONLLWriter09; + +/** + * @author Dr. Bernd Bohnet, 01.03.2010 + * + * + */ +public class Convert0409 { + + + + public static void main(String args[]) throws Exception { + + convert(args[0],args[1]); + + + } + + public static void convert(String source, String target) throws Exception { + + CONLLReader04 reader = new CONLLReader04(source); + CONLLWriter09 writer = new CONLLWriter09(target); + + int str =0; + while (true) { + SentenceData09 i = reader.getNext(); + str++; + if (i == null) break; + + + String[] formsNoRoot = new String[i.length()-1]; + String[] posNoRoot = new String[formsNoRoot.length]; + String[] lemmas = new String[formsNoRoot.length]; + + String[] org_lemmas = new String[formsNoRoot.length]; + + String[] of = new String[formsNoRoot.length]; + String[] pf = new String[formsNoRoot.length]; + + String[] pposs = new String[formsNoRoot.length]; + String[] labels = new String[formsNoRoot.length]; + String[] fillp = new String[formsNoRoot.length]; + + int[] heads = new int[formsNoRoot.length]; + + + + for(int j = 0; j < formsNoRoot.length; j++) { + formsNoRoot[j] = i.forms[j+1]; + if (formsNoRoot[j].length()==0 ||formsNoRoot[j].equals("")) { + System.out.println("error forms "+str); + // System.exit(0); + formsNoRoot[j]=" "; + } + posNoRoot[j] = i.gpos[j+1]; + if (posNoRoot[j].length()==0 ||posNoRoot[j].equals(" ")) { + System.out.println("error pos "+str); + // System.exit(0); + } + pposs[j] = i.ppos[j+1]; + if (pposs[j].length()==0 ||pposs[j].equals(" ")) { + System.out.println("error pos "+str); + //System.exit(0); + } + + labels[j] = i.labels[j+1]; + if (labels[j].length()==0 ||labels[j].equals(" ")) { + System.out.println("error lab "+str); + // System.exit(0); + } + heads[j] = i.heads[j+1]; + if(heads[j]> posNoRoot.length) { + System.out.println("head out of range "+heads[j]+" "+heads.length+" "+str); + heads[j]=posNoRoot.length; + } + + lemmas[j] = i.plemmas[j+1]; + if (lemmas[j].length()==0 ||lemmas[j].equals(" ")) { + System.out.println("error lab "+str); + // System.exit(0); + } + org_lemmas[j] = i.lemmas[j+1]; + if (org_lemmas[j].length()==0 ||org_lemmas[j].equals(" ")) { + System.out.println("error lab "+str); + // System.exit(0); + } + of[j] = i.ofeats[j+1]; + pf[j] = i.pfeats[j+1]; + if (str==6099) { + // System.out.println(formsNoRoot[j]+"\t"+posNoRoot[j]+"\t"+pposs[j]+"\t"+labels[j]+"\t"+heads[j]); + } + + // (instance.fillp!=null) fillp[j] = instance.fillp[j+1]; + } + + SentenceData09 i09 = new SentenceData09(formsNoRoot, lemmas, org_lemmas,pposs, pposs, labels, heads,fillp,of, pf); + + //public SentenceData09(String[] forms, String[] lemmas, String[] olemmas,String[] gpos, String[] ppos, String[] labs, int[] heads, String[] fillpred) { + //SentenceData09 + // SentenceData09 i2 = new SentenceData09(i.forms, i.lemmas,i.org_lemmas,); + + writer.write(i09); + + + } + writer.finishWriting(); + + + } + + + public static void convert0906(String source, String target) throws Exception { + + CONLLReader09 reader = new CONLLReader09(source); + CONLLWriter06 writer = new CONLLWriter06(target); + + + while (true) { + SentenceData09 i = reader.getNext(); + + if (i == null) break; + + + String[] formsNoRoot = new String[i.length()-1]; + String[] posNoRoot = new String[formsNoRoot.length]; + String[] lemmas = new String[formsNoRoot.length]; + + String[] org_lemmas = new String[formsNoRoot.length]; + + String[] of = new String[formsNoRoot.length]; + String[] pf = new String[formsNoRoot.length]; + + String[] pposs = new String[formsNoRoot.length]; + String[] labels = new String[formsNoRoot.length]; + String[] fillp = new String[formsNoRoot.length]; + + int[] heads = new int[formsNoRoot.length]; + + for(int j = 0; j < formsNoRoot.length; j++) { + formsNoRoot[j] = i.forms[j+1]; + posNoRoot[j] = i.gpos[j+1]; + pposs[j] = i.ppos[j+1]; + + labels[j] = i.labels[j+1]; + heads[j] = i.heads[j+1]; + lemmas[j] = i.plemmas[j+1]; + + org_lemmas[j] = i.lemmas[j+1]; + of[j] = i.ofeats[j+1]; + pf[j] = i.pfeats[j+1]; + + // (instance.fillp!=null) fillp[j] = instance.fillp[j+1]; + } + + SentenceData09 i09 = new SentenceData09(formsNoRoot, lemmas, org_lemmas,posNoRoot, pposs, labels, heads,fillp,of, pf); + + //public SentenceData09(String[] forms, String[] lemmas, String[] olemmas,String[] gpos, String[] ppos, String[] labs, int[] heads, String[] fillpred) { + //SentenceData09 + // SentenceData09 i2 = new SentenceData09(i.forms, i.lemmas,i.org_lemmas,); + + writer.write(i09); + + + } + writer.finishWriting(); + + + } + + + +} diff --git a/dependencyParser/basic/mate-tools/src/is2/util/ConvertADJ.java b/dependencyParser/basic/mate-tools/src/is2/util/ConvertADJ.java new file mode 100644 index 0000000..b30aabb --- /dev/null +++ b/dependencyParser/basic/mate-tools/src/is2/util/ConvertADJ.java @@ -0,0 +1,129 @@ +/** + * + */ +package is2.util; + +import is2.data.SentenceData09; +import is2.io.CONLLReader04; +import is2.io.CONLLReader06; +import is2.io.CONLLReader09; +import is2.io.CONLLWriter06; +import is2.io.CONLLWriter09; + +/** + * @author Dr. Bernd Bohnet, 01.03.2010 + * + * + */ +public class ConvertADJ { + + + + public static void main(String args[]) throws Exception { + + convert(args[0],args[1]); + + + } + + public static void convert(String source, String target) throws Exception { + + CONLLReader09 reader = new CONLLReader09(source); +// CONLLWriter09 writer = new CONLLWriter09(target); + int adj=0,argadj=0; + int rb=0,argrb=0; + int str =0; + while (true) { + SentenceData09 i = reader.getNext(); + str++; + if (i == null) break; + + + for (int k =0;k<i.length();k++) { + + if (i.gpos[k].startsWith("JJ")) adj++; + if (i.gpos[k].startsWith("RB")) rb++; + + if (i.argposition!=null) { + for(int p=0;p<i.argposition.length;p++) { + if(i.argposition[p]!=null) + for(int a=0;a<i.argposition[p].length;a++) { + if(i.argposition[p][a]==k && i.gpos[k].startsWith("JJ")) argadj ++; + if(i.argposition[p][a]==k && i.gpos[k].startsWith("RB")) argrb ++; + } + + } + } + // (instance.fillp!=null) fillp[j] = instance.fillp[j+1]; + } + + + + } + System.out.println("adj "+adj+ " "+argadj); + System.out.println("rb "+rb+ " "+argrb); + + } + + + public static void convert0906(String source, String target) throws Exception { + + CONLLReader09 reader = new CONLLReader09(source); + CONLLWriter06 writer = new CONLLWriter06(target); + + + while (true) { + SentenceData09 i = reader.getNext(); + + if (i == null) break; + + + String[] formsNoRoot = new String[i.length()-1]; + String[] posNoRoot = new String[formsNoRoot.length]; + String[] lemmas = new String[formsNoRoot.length]; + + String[] org_lemmas = new String[formsNoRoot.length]; + + String[] of = new String[formsNoRoot.length]; + String[] pf = new String[formsNoRoot.length]; + + String[] pposs = new String[formsNoRoot.length]; + String[] labels = new String[formsNoRoot.length]; + String[] fillp = new String[formsNoRoot.length]; + + int[] heads = new int[formsNoRoot.length]; + + for(int j = 0; j < formsNoRoot.length; j++) { + formsNoRoot[j] = i.forms[j+1]; + posNoRoot[j] = i.gpos[j+1]; + pposs[j] = i.ppos[j+1]; + + labels[j] = i.labels[j+1]; + heads[j] = i.heads[j+1]; + lemmas[j] = i.plemmas[j+1]; + + org_lemmas[j] = i.lemmas[j+1]; + of[j] = i.ofeats[j+1]; + pf[j] = i.pfeats[j+1]; + + // (instance.fillp!=null) fillp[j] = instance.fillp[j+1]; + } + + SentenceData09 i09 = new SentenceData09(formsNoRoot, lemmas, org_lemmas,posNoRoot, pposs, labels, heads,fillp,of, pf); + + //public SentenceData09(String[] forms, String[] lemmas, String[] olemmas,String[] gpos, String[] ppos, String[] labs, int[] heads, String[] fillpred) { + //SentenceData09 + // SentenceData09 i2 = new SentenceData09(i.forms, i.lemmas,i.org_lemmas,); + + writer.write(i09); + + + } + writer.finishWriting(); + + + } + + + +} diff --git a/dependencyParser/basic/mate-tools/src/is2/util/ConvertLowerCase0909.java b/dependencyParser/basic/mate-tools/src/is2/util/ConvertLowerCase0909.java new file mode 100644 index 0000000..e8f19f3 --- /dev/null +++ b/dependencyParser/basic/mate-tools/src/is2/util/ConvertLowerCase0909.java @@ -0,0 +1,89 @@ +/** + * + */ +package is2.util; + +import is2.data.SentenceData09; +import is2.io.CONLLReader06; +import is2.io.CONLLReader09; +import is2.io.CONLLWriter06; +import is2.io.CONLLWriter09; + +/** + * @author Dr. Bernd Bohnet, 01.03.2010 + * + * + */ +public class ConvertLowerCase0909 { + + + + public static void main(String args[]) throws Exception { + + + + CONLLReader09 reader = new CONLLReader09(args[0]); + CONLLWriter09 writer = new CONLLWriter09(args[1]); + + int str =0; + while (true) { + SentenceData09 i = reader.getNext(); + str++; + if (i == null) break; + + SentenceData09 i09 = new SentenceData09(i); + i09.createSemantic(i); + + for(int k=0;k<i09.length();k++) { + i09.lemmas[k]=i09.lemmas[k].toLowerCase(); + i09.plemmas[k]=i09.plemmas[k].toLowerCase(); + + } + + writer.write(i09); + + + } + writer.finishWriting(); + + + } + + public static void convert(String source, String target) throws Exception { + + CONLLReader09 reader = new CONLLReader09(source); + CONLLWriter09 writer = new CONLLWriter09(target); + + int str =0; + while (true) { + SentenceData09 i = reader.getNext(); + str++; + if (i == null) break; + + SentenceData09 i09 = new SentenceData09(i); + i09.createSemantic(i); + + for(int k=0;k<i09.length();k++) { + i09.lemmas[k]=i09.lemmas[k].toLowerCase(); + i09.plemmas[k]=i09.plemmas[k].toLowerCase(); + + } + + //public SentenceData09(String[] forms, String[] lemmas, String[] olemmas,String[] gpos, String[] ppos, String[] labs, int[] heads, String[] fillpred) { + //SentenceData09 + // SentenceData09 i2 = new SentenceData09(i.forms, i.lemmas,i.org_lemmas,); + + writer.write(i09); + + + } + writer.finishWriting(); + + + } + + + + + +} diff --git a/dependencyParser/basic/mate-tools/src/is2/util/ConvertTiger2CoNLL.java b/dependencyParser/basic/mate-tools/src/is2/util/ConvertTiger2CoNLL.java new file mode 100644 index 0000000..bb528f7 --- /dev/null +++ b/dependencyParser/basic/mate-tools/src/is2/util/ConvertTiger2CoNLL.java @@ -0,0 +1,124 @@ +/** + * + */ +package is2.util; + + +import java.io.BufferedReader; +import java.io.BufferedWriter; +import java.io.FileInputStream; +import java.io.IOException; +import java.io.InputStreamReader; +import java.util.StringTokenizer; + +/** + * @author Dr. Bernd Bohnet, 17.01.2010 + * + * This class removes all information from a conll 2009 file except of columns 1 and 2 + * that contain the word id and the word form. + */ +public class ConvertTiger2CoNLL { + + public static void main (String[] args) throws IOException { + + + OptionsSuper options = new OptionsSuper(args,null); + + if (options.trainfile!= null){ + System.err.println("included sentences "+clean(options.trainfile, options.outfile, options.start, options.count)); + } + else System.err.println("Please proivde the file name -train <file-name>"); + + } + + /** + * @param trainfile + * @throws IOException + */ + private static int clean(String file, String outFile, int start, int numberOfSentences) throws IOException { + + System.err.println("writting to "+outFile); + System.err.println("start "+start+" to "+(start+numberOfSentences)); + int state=0; + + BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(file),"UTF-8"),32768); + BufferedWriter writer = new BufferedWriter(new java.io.OutputStreamWriter (new java.io.FileOutputStream (outFile),"UTF-8"),32768); + String l =null; + try { + + int id =1, snt=0,cnt=0; + + while( (l = reader.readLine())!=null) { + + + if (l.startsWith("#BOS")) { + state=1; //BOS + id=1; + snt++; + continue; + } + if (l.startsWith("#EOS") && state==1) { + state=2; //BOS + cnt++; + + writer.newLine(); + } + + if (start>snt || (start+numberOfSentences)<=snt) { + state=3; + } + + if (l.startsWith("#5")||l.startsWith("#6")||l.startsWith("#7")) continue; + if ((start+numberOfSentences)<=snt) break; + + if (state==3) continue; + + + if (state==1) { + + l = l.replace("\t\t", "\t"); + l = l.replace("\t\t", "\t"); + + StringTokenizer t = new StringTokenizer(l,"\t"); + int count=0; + + writer.write(""+id+"\t"); + + while (t.hasMoreTokens()) { + if (count==0) { + writer.write(t.nextToken()+"\t"); + } else if (count==1) { + writer.write(t.nextToken()+"\t_\t"); + } else if (count==2) { + writer.write(t.nextToken()+"\t_\t"); + } else if (count==3) { + writer.write(t.nextToken().replace(".", "|")+"\t_\t"); + } + else { + t.nextToken(); + } + count++; + } + writer.write("_\t_\t_\t_\t_\t_\t_\t_\t_"); + writer.newLine(); + } + id++; + } + writer.flush(); + writer.close(); + reader.close(); + + return cnt; + } catch (IOException e) { + e.printStackTrace(); + } + + + return -1; + + } + + + + +} diff --git a/dependencyParser/basic/mate-tools/src/is2/util/DB.java b/dependencyParser/basic/mate-tools/src/is2/util/DB.java new file mode 100755 index 0000000..8218ea5 --- /dev/null +++ b/dependencyParser/basic/mate-tools/src/is2/util/DB.java @@ -0,0 +1,81 @@ +package is2.util; + +import java.util.Calendar; +import java.util.GregorianCalendar; + + +public class DB { + + + private static final String ARROW = " -> "; + private static final String LEER = " " ; + private static final String BIG = " " ; + + private static boolean debug = true; + + final static public void println (Object err) { + + if (!debug) return; + + StackTraceElement[] ste = new Exception().getStackTrace(); + + StringBuffer msg = new StringBuffer(); + msg.append((getDate().append(LEER).substring(0,10))); + msg.append(' '); + msg.append(ste[1].getClassName()+" "+ste[1].getLineNumber()); + msg.append(':'); + msg.append(ste[1].getMethodName()); + msg.append(ARROW); + + int l = 55-msg.length(); + if (l < 0) l =0; + msg.append(BIG.substring(0, l)); + + +// if ((m_depth >= 0) && (m_depth < (BIG.length()) )) { +// vDebugMessage.append(BIG.substring(0, m_depth*2)); +// } + + msg.append(err); + + System.err.println(msg); + + + } + + final static public void prints (Object err) { + + if (!debug) return; + System.err.println(err); + + } + + + final private static StringBuffer getDate() { +// if (Preferences.s_debug <= BDebug.FAIL) return s_sb; + + GregorianCalendar s_cal = new GregorianCalendar(); + StringBuffer sb = new StringBuffer(); +// sb.append(s_cal.get(Calendar.HOUR_OF_DAY)); +// sb.append('_'); + sb.append(s_cal.get(Calendar.MINUTE)); + sb.append('.'); + sb.append(s_cal.get(Calendar.SECOND)); + sb.append('.'); + sb.append(s_cal.get(Calendar.MILLISECOND)); + + return sb; + } + + public static void setDebug(boolean b) { + debug=b; + + } + + public static boolean getDebug() { + + return debug; + } + + +} diff --git a/dependencyParser/basic/mate-tools/src/is2/util/Edges.java b/dependencyParser/basic/mate-tools/src/is2/util/Edges.java new file mode 100644 index 0000000..af1a658 --- /dev/null +++ b/dependencyParser/basic/mate-tools/src/is2/util/Edges.java @@ -0,0 +1,206 @@ +/** + * + */ +package is2.util; + +import is2.data.PipeGen; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; +import java.util.Comparator; +import java.util.HashMap; +import java.util.Map.Entry; + +/** + * @author Dr. Bernd Bohnet, 13.05.2009; + * + * + */ +public final class Edges { + + + private static short[][][] edges; + private static HashMap<Short,Integer> labelCount = new HashMap<Short,Integer>(); + + private static HashMap<String,Integer> slabelCount = new HashMap<String,Integer>(); + + + static short[] def = new short[1]; + + private Edges () {} + + /** + * @param length + */ + public static void init(int length) { + edges = new short[length][length][]; + } + + + public static void findDefault(){ + + int best =0; + + + + for(Entry<Short,Integer> e : labelCount.entrySet()) { + + + if (best<e.getValue()) { + best = e.getValue(); + def[0]=e.getKey(); + } + } + + + // labelCount=null; + // String[] types = new String[mf.getFeatureCounter().get(PipeGen.REL)]; + // for (Entry<String, Integer> e : MFO.getFeatureSet().get(PipeGen.REL).entrySet()) types[e.getValue()] = e.getKey(); + + is2.util.DB.println("set default label to "+def[0]+" " ); + + // System.out.println("found default "+def[0]); + + } + + + final static public void put(int pos1, int pos2, short label) { + putD(pos1, pos2,label); + // putD(pos2, pos1,!dir, label); + } + + + final static public void putD(int pos1, int pos2, short label) { + + Integer lc = labelCount.get(label); + if (lc==null) labelCount.put(label, 1); + else labelCount.put(label, lc+1); + + String key = pos1+"-"+pos2+label; + Integer lcs = slabelCount.get(key); + if (lcs==null) slabelCount.put(key, 1); + else slabelCount.put(key, lcs+1); + + if (edges[pos1][pos2]==null) { + edges[pos1][pos2]=new short[1]; + edges[pos1][pos2][0]=label; + +// edgesh[pos1][pos2][dir?0:1] = new TIntHashSet(2); +// edgesh[pos1][pos2][dir?0:1].add(label); + } else { + short labels[] = edges[pos1][pos2]; + for(short l : labels) { + //contains label already? + if(l==label) return; + } + + short[] nlabels = new short[labels.length+1]; + System.arraycopy(labels, 0, nlabels, 0, labels.length); + nlabels[labels.length]=label; + edges[pos1][pos2]=nlabels; + + // edgesh[pos1][pos2][dir?0:1].add(label); + } + } + + final static public short[] get(int pos1, int pos2) { + + if (pos1<0 || pos2<0 || edges[pos1][pos2]==null) return def; + return edges[pos1][pos2]; + } + + + /** + * @param dis + */ + static public void write(DataOutputStream d) throws IOException { + + int len = edges.length; + d.writeShort(len); + + for(int p1 =0;p1<len;p1++) { + for(int p2 =0;p2<len;p2++) { + if (edges[p1][p2]==null) d.writeShort(0); + else { + d.writeShort(edges[p1][p2].length); + for(int l =0;l<edges[p1][p2].length;l++) { + d.writeShort(edges[p1][p2][l]); + } + + } + } + } + + d.writeShort(def[0]); + + } + + + /** + * @param dis + */ + public static void read(DataInputStream d) throws IOException { + int len = d.readShort(); + + edges = new short[len][len][]; + for(int p1 =0;p1<len;p1++) { + for(int p2 =0;p2<len;p2++) { + int ll = d.readShort(); + if (ll==0) { + edges[p1][p2]=null; + } else { + edges[p1][p2] = new short[ll]; + for(int l =0;l<ll;l++) { + edges[p1][p2][l]=d.readShort(); + } + } + } + } + + def[0]= d.readShort(); + + } + + public static class C implements Comparator<Short> { + + public C() { + super(); + } + + String _key; + + public C(String key) { + super(); + _key=key; + } + + /* (non-Javadoc) + * @see java.util.Comparator#compare(java.lang.Object, java.lang.Object) + */ + @Override + public int compare(Short l1, Short l2) { + + // int c1 = labelCount.get(l1); + // int c2 = labelCount.get(l2); + // if (true) return c1==c2?0:c1>c2?-1:1; + + int x1 = slabelCount.get(_key+l1.shortValue()); + int x2 = slabelCount.get(_key+l2.shortValue()); + // System.out.println(x1+" "+x2); + + + return x1==x2?0:x1>x2?-1:1; + + + + } + + + + + + } + + +} diff --git a/dependencyParser/basic/mate-tools/src/is2/util/Evaluator.java b/dependencyParser/basic/mate-tools/src/is2/util/Evaluator.java new file mode 100644 index 0000000..c527303 --- /dev/null +++ b/dependencyParser/basic/mate-tools/src/is2/util/Evaluator.java @@ -0,0 +1,616 @@ +package is2.util; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.Comparator; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Hashtable; +import java.util.Map.Entry; + +//import org.apache.commons.math.stat.inference.TestUtils; + + +import is2.data.Parse; +import is2.data.SentenceData09; +import is2.io.CONLLReader09; + + +public class Evaluator { + + + public static void main(String[] args) { + + Options options = new Options(args); + + if (options.eval && options.significant1==null ) { + + Results r = evaluate(options.goldfile, options.outfile); + + } + /* + else if (options.significant1!=null && options.significant2!=null ) { + + System.out.println("compare1 "+options.significant1); + System.out.println("compare2 "+options.significant2); + System.out.println("gold "+options.goldfile); + + Results r1 = evaluate(options.goldfile, options.significant1,false); + + System.out.println("file 1 done "); + + Results r2 = evaluate(options.goldfile, options.significant2,false); + + double[] s1 = new double[r1.correctHead.size()]; + double[] s2 = new double[r1.correctHead.size()]; + + for(int k=0;k<r1.correctHead.size();k++) { + s1[k] = r1.correctHead.get(k); + s2[k] = r2.correctHead.get(k); + } + + try { + double p = TestUtils.pairedTTest(s1, s2); + System.out.print("significant to "+p); + } catch (Exception e) { + e.printStackTrace(); + } + +// significant(options.significant1, options.significant2) ; + + + } + */ + else if (options.significant1!=null) { + Results r = evaluate(options.goldfile, options.outfile,true); +// significant(options.significant1, options.significant2) ; + + } + + + } + + + /** + * + * @param act_file + * @param pred_file + * @param what top, pos, length, mor + */ + public static void evaluateTagger (String act_file, String pred_file, String what) { + + + CONLLReader09 goldReader = new CONLLReader09(act_file); + + CONLLReader09 predictedReader = new CONLLReader09(); + predictedReader.startReading(pred_file); + + Hashtable<String,Integer> errors = new Hashtable<String,Integer>(); + Hashtable<String,StringBuffer> words = new Hashtable<String,StringBuffer>(); + + int total = 0, numsent = 0, corrT=0; + SentenceData09 goldInstance = goldReader.getNext(); + SentenceData09 predInstance = predictedReader.getNext(); + + + HashMap<Integer,int[]> correctL = new HashMap<Integer,int[]>(); + HashMap<String,int[]> pos = new HashMap<String,int[]>(); + HashMap<String,int[]> mor = new HashMap<String,int[]>(); + + float correctM = 0, allM=0;; + + while(goldInstance != null) { + + int instanceLength = goldInstance.length(); + + if (instanceLength != predInstance.length()) + System.out.println("Lengths do not match on sentence "+numsent); + + String gold[] = goldInstance.gpos; + String pred[] = predInstance.ppos; + + String goldM[] = goldInstance.ofeats; + String predM[] = predInstance.pfeats; + + + // NOTE: the first item is the root info added during nextInstance(), so we skip it. + + for (int i = 1; i < instanceLength; i++) { + + int[] cwr = correctL.get(i); + if (cwr ==null) { + cwr = new int[2]; + correctL.put(i, cwr); + } + cwr[1]++; + int[] correctPos = pos.get(gold[i]); + if (correctPos==null) { + correctPos = new int[2]; + pos.put(gold[i], correctPos); + } + correctPos[1]++; + + int[] correctMor = mor.get(goldM[i]); + if (correctMor==null) { + correctMor = new int[2]; + mor.put(goldM[i], correctMor); + } + + if ((goldM[i].equals("_")&&predM[i]==null) || goldM[i].equals(predM[i])) { + correctM++; + correctMor[0]++; + } + allM++; + correctMor[1]++; + + if (gold[i].equals(pred[i])) { + corrT++; + cwr[0]++; + correctPos[0]++; + } else { + String key = "gold: '"+gold[i]+"' pred: '"+pred[i]+"'"; + Integer cnt = errors.get(key); + StringBuffer errWrd = words.get(key); + if (cnt==null) { + errors.put(key,1); + words.put(key, new StringBuffer().append(goldInstance.forms[i])); + } + else { + errors.put(key,cnt+1); + errWrd.append(" "+goldInstance.forms[i]); + } + } + + + } + total += instanceLength - 1; // Subtract one to not score fake root token + + + numsent++; + + goldInstance = goldReader.getNext(); + predInstance = predictedReader.getNext(); + } + + + + + + // System.out.println("error gold:"+goldPos[i]+" pred:"+predPos[i]+" "+goldInstance.forms[i]+" snt "+numsent+" i:"+i); + ArrayList<Entry<String, Integer>> opsl = new ArrayList<Entry<String, Integer>>(); + for(Entry<String, Integer> e : errors.entrySet()) { + opsl.add(e); + } + + Collections.sort(opsl, new Comparator<Entry<String, Integer>>(){ + + @Override + public int compare(Entry<String, Integer> o1, + Entry<String, Integer> o2) { + + return o1.getValue()==o2.getValue()?0:o1.getValue()>o2.getValue()?-1:1; + } + + + }); + + + int cnt=0; + if (what.contains("top") ) { + System.out.println("top most errors:"); + for(Entry<String, Integer> e : opsl) { + cnt++; + if(e.getValue()>10) System.out.println(e.getKey()+" "+e.getValue()+" context: "+words.get(e.getKey())); + } + } + + if (what.contains("length")) { + for(int k=0;k<60;k++) { + int[] cwr = correctL.get(k); + if (cwr == null) continue; + System.out.print(k+":"+cwr[0]+":"+cwr[1]+":"+(((float)Math.round(10000*(float)((float)cwr[0])/(float)cwr[1]))/100)+" "); + } + System.out.println(); + } + + if (what.contains("pos")) { + for(Entry<String,int[]> e : pos.entrySet()) { + + System.out.print(e.getKey()+":"+e.getValue()[0]+":"+e.getValue()[1]+":"+ + (((float)Math.round(10000*((float)e.getValue()[0])/((float)e.getValue()[1])))/100)+" "); + + } + System.out.print(""); + } + System.out.println(); + if (what.contains("mor")) { + for(Entry<String,int[]> e : mor.entrySet()) { + + System.out.print(e.getKey()+":"+e.getValue()[0]+":"+e.getValue()[1]+":"+ + (((float)Math.round(10000*((float)e.getValue()[0])/((float)e.getValue()[1])))/100)+" "); + + } + System.out.print(""); + } + System.out.println("\nTokens: " + total+" Correct: " + corrT+" "+(float)corrT/total+" Correct M.:"+(int)correctM+ " morphology "+(correctM/total)); + } + + + + + public static int errors(SentenceData09 s, boolean uas) { + + int errors =0; + for (int k =1;k<s.length();k++) { + + if (s.heads[k] != s.pheads[k] && (uas || ! s.labels[k].equals(s.plabels[k]))) { + errors++; + } + } + return errors; + } + + public static int errors(SentenceData09 s1, SentenceData09 s2, HashMap<String,Integer> r1,HashMap<String,Integer> r2) { + + + + int errors =0; + for (int k =1;k<s1.length();k++) { + + if (s1.heads[k] != s1.pheads[k] || (! s1.labels[k].equals(s1.plabels[k]))) { + + if (s2.heads[k] != s2.pheads[k] || (! s2.labels[k].equals(s2.plabels[k]))) { + + // equal do nothing + + } else { + + Integer cnt = r1.get(s1.labels[k]); + if (cnt==null) cnt=0; + cnt++; + r1.put(s1.labels[k],cnt); + + + } + + } + + if (s2.heads[k] != s2.pheads[k] || (! s2.labels[k].equals(s2.plabels[k]))) { + + if (s1.heads[k] != s1.pheads[k] || (! s1.labels[k].equals(s1.plabels[k]))) { + + // equal do nothing + + } else { + + Integer cnt = r2.get(s2.labels[k]); + if (cnt==null) cnt=0; + cnt++; + r2.put(s2.labels[k],cnt); + + + } + + } + } + return errors; + } + + + public static final String PUNCT ="!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~"; + + public static class Results { + + public int total; + public int corr; + public float las; + public float ula; + public float lpas; + public float upla; + + ArrayList<Double> correctHead; + } + + public static Results evaluate (String act_file, String pred_file) { + return evaluate (act_file, pred_file,true); + } + public static Results evaluate (String act_file, String pred_file, boolean printEval) { + return evaluate ( act_file, pred_file, printEval, false); + } + + + public static Results evaluate (String act_file, String pred_file, boolean printEval, boolean sig) { + + CONLLReader09 goldReader = new CONLLReader09(act_file, -1); + CONLLReader09 predictedReader = new CONLLReader09(pred_file, -1); + + int total = 0, corr = 0, corrL = 0, Ptotal=0, Pcorr = 0, PcorrL = 0, BPtotal=0, BPcorr = 0, BPcorrL = 0, corrLableAndPos=0, corrHeadAndPos=0; + int corrLableAndPosP=0, corrHeadAndPosP=0,corrLableAndPosC=0; + int numsent = 0, corrsent = 0, corrsentL = 0, Pcorrsent = 0, PcorrsentL = 0,sameProj=0;; + int proj=0, nonproj=0, pproj=0, pnonproj=0, nonProjOk=0, nonProjWrong=0; + + int corrOne = 0; + + int correctChnWoPunc =0, correctLChnWoPunc=0,CPtotal=0; + SentenceData09 goldInstance = goldReader.getNext(); + + SentenceData09 predInstance = predictedReader.getNext(); + HashMap<String,Integer> label = new HashMap<String,Integer>(); + HashMap<String,Integer> labelCount = new HashMap<String,Integer>(); + HashMap<String,Integer> labelCorrect = new HashMap<String,Integer>(); + HashMap<String,Integer> falsePositive = new HashMap<String,Integer>(); + + // does the node have the correct head? + ArrayList<Double> correctHead = new ArrayList<Double>(); + + while(goldInstance != null) { + + int instanceLength = goldInstance.length(); + + if (instanceLength != predInstance.length()) + System.out.println("Lengths do not match on sentence "+numsent); + + int[] goldHeads = goldInstance.heads; + String[] goldLabels = goldInstance.labels; + int[] predHeads = predInstance.pheads; + String[] predLabels = predInstance.plabels; + + boolean whole = true; + boolean wholeL = true; + + boolean Pwhole = true; + boolean PwholeL = true; + + + int tlasS=0, totalS=0,corrLabels=0, XLabels=0; + + // NOTE: the first item is the root info added during nextInstance(), so we skip it. + + + + int punc=0, bpunc=0,totalChnWoPunc=0; + for (int i = 1; i < instanceLength; i++) { + + + + Parse p = new Parse(predHeads.length); + for (int k=0;k<p.heads.length;k++) p.heads[k]=(short) predHeads[k]; + + Parse g = new Parse(predHeads.length); + for (int k=0;k<g.heads.length;k++) g.heads[k]=(short) goldHeads[k]; + + + + + + { + Integer count = labelCount.get(goldLabels[i]); + if (count==null)count = 0; + + count++; + + labelCount.put(goldLabels[i], count); + + if(goldLabels[i].equals(predLabels[i])) { + Integer correct = labelCorrect.get(goldLabels[i]); + if (correct ==null) correct =0; + correct ++; + labelCorrect.put(goldLabels[i], correct); + + } else { + Integer fp = falsePositive.get(predLabels[i]); + if (fp ==null) fp =0; + fp ++; + falsePositive.put(predLabels[i], fp); + } + + + } + + { + + } + + + if (goldLabels[i].startsWith("PMOD")) XLabels++; + + boolean tlas =false; + if (predHeads[i] == goldHeads[i]) { + corr++; + + if (goldInstance.gpos[i].equals(predInstance.ppos[i])) corrHeadAndPos ++; + if (goldLabels[i].equals(predLabels[i])) { + corrL++; + // if (predLabels[i].startsWith("PMOD")) + corrLabels++; + // else correctHead.add(0); + if (goldInstance.gpos[i].equals(predInstance.ppos[i])) { + tlasS++; + tlas=true; + corrLableAndPos ++; + } + } + else { + // correctHead.add(0); + // System.out.println(numsent+" error gold "+goldLabels[i]+" "+predLabels[i]+" head "+goldHeads[i]+" child "+i); + wholeL = false; + } + } + else { + + //correctHead.add(0); + + // System.out.println(numsent+"error gold "+goldLabels[i]+" "+predLabels[i]+" head "+goldHeads[i]+" child "+i); + whole = false; wholeL = false; + + Integer count = label.get(goldLabels[i]); + + if (count==null)count = 0; + count++; + label.put(goldLabels[i], count); + + + + int d = Math.abs(goldInstance.heads[i]-i); + } + + + if( ! ("!\"#$%&''()*+,-./:;<=>?@[\\]^_{|}~``".contains(goldInstance.forms[i]))) { + + if (predHeads[i] == goldHeads[i]) { + BPcorr++; + + if (goldLabels[i].equals(predLabels[i])) { + BPcorrL++; + } + else { + // System.out.println(numsent+" error gold "+goldLabels[i]+" "+predLabels[i]+" head "+goldHeads[i]+" child "+i); + // PwholeL = false; + } + } else { + // System.out.println(numsent+"error gold "+goldLabels[i]+" "+predLabels[i]+" head "+goldHeads[i]+" child "+i); + //Pwhole = false; wholeL = false; + } + + } else bpunc++; + + if( ! (",.:''``".contains(goldInstance.forms[i]))) { + + + if (predHeads[i] == goldHeads[i]) { + if (goldInstance.gpos[i].equals(predInstance.ppos[i])) corrHeadAndPosP ++; + Pcorr++; + + if (goldLabels[i].equals(predLabels[i])) { + PcorrL++; + if (goldInstance.gpos[i].equals(predInstance.ppos[i])) corrLableAndPosP ++; + + } + else { + // System.out.println(numsent+" error gold "+goldLabels[i]+" "+predLabels[i]+" head "+goldHeads[i]+" child "+i); + PwholeL = false; + } + } else { + // System.out.println(numsent+"error gold "+goldLabels[i]+" "+predLabels[i]+" head "+goldHeads[i]+" child "+i); + Pwhole = false; PwholeL = false; + } + + } else punc++; + + + if( ! (goldInstance.gpos[i].toLowerCase().startsWith("pu"))) { + if (predHeads[i] == goldHeads[i]) { + correctChnWoPunc++; + + if (goldLabels[i].equals(predLabels[i])) { + correctLChnWoPunc++; + if (goldInstance.gpos[i].equals(predInstance.ppos[i])) corrLableAndPosC ++; + } + else { + // System.out.println(numsent+" error gold "+goldLabels[i]+" "+predLabels[i]+" head "+goldHeads[i]+" child "+i); + // PwholeL = false; + } + } else { + // System.out.println(numsent+"error gold "+goldLabels[i]+" "+predLabels[i]+" head "+goldHeads[i]+" child "+i); + // Pwhole = false; PwholeL = false; + } + + } else totalChnWoPunc++; + + + if (sig) { + if(tlas) System.out.println("1\t"); + else System.out.println("0\t"); + } + + } + total += ((instanceLength - 1)); // Subtract one to not score fake root token + + Ptotal += ((instanceLength - 1) - punc); + BPtotal += ((instanceLength - 1) - bpunc); + CPtotal += ((instanceLength - 1) - totalChnWoPunc); + if(whole) corrsent++; + if(wholeL) corrsentL++; + if(Pwhole) Pcorrsent++; + if(PwholeL) PcorrsentL++; + numsent++; + + goldInstance = goldReader.getNext(); + predInstance = predictedReader.getNext(); + correctHead.add((double) ((double)corrLabels/(instanceLength - 1))); + // System.out.println(""+((double)corrLabels/(instanceLength - 1))); + } + + Results r = new Results(); + + r.correctHead =correctHead; + int mult=100000, diff=1000; + + r.total = total; + r.corr = corr; + r.las =(float)Math.round(((double)corrL/total)*mult)/diff; + r.ula =(float)Math.round(((double)corr /total)*mult)/diff; + r.lpas =(float)Math.round(((double)corrLableAndPos/total)*mult)/diff; + r.upla =(float)Math.round(((double)corrHeadAndPos /total)*mult)/diff; + float tlasp = (float)Math.round(((double)corrLableAndPosP/Ptotal)*mult)/diff; + float tlasc = (float)Math.round(((double)corrLableAndPosC/Ptotal)*mult)/diff; + + // System.out.print("Total: " + total+" \tCorrect: " + corr+" "); + System.out.print(" LAS/Total/UAS/Total: " + r.las+"/" + (double)Math.round(((double)corrsentL/numsent)*mult)/diff+ + "/" + r.ula+"/" + (double)Math.round(((double)corrsent /numsent)*mult)/diff+" LPAS/UPAS "+r.lpas+"/"+r.upla); + + System.out.println("; without . " + (double)Math.round(((double)PcorrL/Ptotal)*mult)/diff+"/" + + (double)Math.round(((double)PcorrsentL/numsent)*mult)/diff+ + "/" + (double)Math.round(((double)Pcorr /Ptotal)*mult)/diff+"/" + + (double)Math.round(((double)Pcorrsent /numsent)*mult)/diff+" TLAS "+tlasp+ + " V2 LAS/UAS "+(double)Math.round(((double)BPcorrL/BPtotal)*mult)/diff+ + "/"+(double)Math.round(((double)BPcorr/BPtotal)*mult)/diff+ + " CHN LAS/UAS "+(double)Math.round(((double)correctLChnWoPunc/CPtotal)*mult)/diff+ + "/"+(double)Math.round(((double)correctChnWoPunc/CPtotal)*mult)/diff+" TLAS "+tlasc); + + float precisionNonProj = ((float)nonProjOk)/((float)nonProjOk+nonProjWrong); + float recallNonProj = ((float)nonProjOk)/((float)(nonproj)); + System.out.println("proj "+proj+" nonp "+nonproj+"; predicted proj "+pproj+" non "+pnonproj+"; nonp correct "+ + nonProjOk+" nonp wrong "+nonProjWrong+ + " precision=(nonProjOk)/(non-projOk+nonProjWrong): "+precisionNonProj+ + " recall=nonProjOk/nonproj="+recallNonProj+" F="+(2*precisionNonProj*recallNonProj)/(precisionNonProj+recallNonProj)); + + if (!printEval) return r; + + + HashMap<String,Integer> totalX = new HashMap<String,Integer>(); + HashMap<String,Integer> totalY = new HashMap<String,Integer>(); + + String A=" "; // & + System.out.println("label\ttp\tcount\trecall\t\ttp\tfp+tp\tprecision\t F-Score "); + + for(Entry<String, Integer> e : labelCount.entrySet()) { + + int tp = labelCorrect.get(e.getKey())==null?0:labelCorrect.get(e.getKey()).intValue(); + Integer count = labelCount.get(e.getKey()); + int fp = falsePositive.get(e.getKey())==null?0:falsePositive.get(e.getKey()).intValue(); + System.out.println(e.getKey()+"\t"+tp+"\t"+count+"\t"+roundPercent((float)tp/count)+"\t\t"+tp+"\t"+(fp+tp)+ + "\t"+roundPercent((float)tp/(fp+tp))+"\t\t"+roundPercent((((float)tp/count))+(float)tp/(fp+tp))/2F); //+totalD + } + + + + + return r; + } + + + public static float round (double v){ + + return Math.round(v*10000F)/10000F; + } + + public static float roundPercent (double v){ + + return Math.round(v*10000F)/100F; + } + + + + +} diff --git a/dependencyParser/basic/mate-tools/src/is2/util/EvaluatorTagger.java b/dependencyParser/basic/mate-tools/src/is2/util/EvaluatorTagger.java new file mode 100644 index 0000000..c1ee7df --- /dev/null +++ b/dependencyParser/basic/mate-tools/src/is2/util/EvaluatorTagger.java @@ -0,0 +1,736 @@ +package is2.util; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.Comparator; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Hashtable; +import java.util.Map.Entry; + + +import org.apache.commons.math.stat.inference.TestUtils; + +import is2.data.Parse; +import is2.data.SentenceData09; +import is2.io.CONLLReader09; + + +public class EvaluatorTagger { + + + public static int TAGGER = 1; + public static int what = 0; + + public static void main(String[] args) { + + Options options = new Options(args); + + what = options.tt; + + if (options.eval && options.significant1==null ) { + + Results r = evaluate(options.goldfile, options.outfile); + + } else if (options.significant1!=null && options.significant2!=null ) { + + System.out.println("compare1 "+options.significant1); + System.out.println("compare2 "+options.significant2); + System.out.println("gold "+options.goldfile); + + check( options.significant1, options.significant2, options.testfile); + + Results r1 = evaluate(options.goldfile, options.significant1,false); + + System.out.println("file 1 done "); + + Results r2 = evaluate(options.goldfile, options.significant2,false); + + double[] s1 = new double[r1.correctHead.size()]; + double[] s2 = new double[r1.correctHead.size()]; + + for(int k=0;k<r1.correctHead.size();k++) { + s1[k] = r1.correctHead.get(k); + s2[k] = r2.correctHead.get(k); + } + + try { + double p = TestUtils.pairedTTest(s1, s2); + System.out.print("significant to "+p); + } catch (Exception e) { + e.printStackTrace(); + } + +// significant(options.significant1, options.significant2) ; + + + } else if (options.significant1!=null) { + Results r = evaluate(options.goldfile, options.outfile,true); +// significant(options.significant1, options.significant2) ; + + } + + + } + + + private static void check(String s1, String s2, String pos) { + CONLLReader09 s1reader = new CONLLReader09(s1, -1); + SentenceData09 s1i = s1reader.getNext(); + CONLLReader09 s2reader = new CONLLReader09(s2, -1); + SentenceData09 s2i = s2reader.getNext(); + + + HashMap<String,HashMap<String,Integer> > labchanged = new HashMap<String,HashMap<String,Integer> > (); + + int snt =0; + + while(s1i != null) { + + snt ++; + int good =0,wrong=0; + + for(int w=1;w<s1i.length();w++) { + + // p(s1:head-pos wrong s2:head-pos good => dep-wrong => dep-good) + + if (s1i.gpos[s1i.heads[w]].equals(pos) && ! + ! s1i.ppos[s1i.heads[w]].equals(s1i.gpos[s1i.heads[w]]) && s2i.ppos[s2i.heads[w]].equals(s2i.gpos[s2i.heads[w]]) + ) { + + + HashMap<String,Integer> changed = labchanged.get(s2i.labels[w]); + if (changed ==null) { + changed= new HashMap<String,Integer>(); + labchanged.put(s2i.labels[w], changed); + } + if (! (s1i.plabels[w].equals(s1i.labels[w]) && s1i.pheads[w] == s1i.heads[w] )&& + (s2i.plabels[w].equals(s2i.labels[w]) && s2i.pheads[w] == s2i.heads[w] ) ) { + good ++; + Integer goodL = changed.get("G"); + if (goodL== null) goodL =0; + goodL+=1; + changed.put("G", goodL); + } + else { + wrong++; + Integer wrongL = changed.get("W"); + if (wrongL== null) wrongL =0; + wrongL+=1; + changed.put("W", wrongL); + } + + + + + + } + + } + + if (good!=0 || wrong!=0) + System.out.println(snt+" changed yes:"+good+" no:"+wrong); + s1i = s1reader.getNext(); + s2i = s2reader.getNext(); + } + System.out.println(""+labchanged); + + } + + + /** + * + * @param act_file + * @param pred_file + * @param what top, pos, length, mor + */ + public static void evaluateTagger (String act_file, String pred_file, String what) { + + + CONLLReader09 goldReader = new CONLLReader09(act_file); + + CONLLReader09 predictedReader = new CONLLReader09(); + predictedReader.startReading(pred_file); + + Hashtable<String,Integer> errors = new Hashtable<String,Integer>(); + Hashtable<String,StringBuffer> words = new Hashtable<String,StringBuffer>(); + + int total = 0, numsent = 0, corrT=0; + SentenceData09 goldInstance = goldReader.getNext(); + SentenceData09 predInstance = predictedReader.getNext(); + + + HashMap<Integer,int[]> correctL = new HashMap<Integer,int[]>(); + HashMap<String,int[]> pos = new HashMap<String,int[]>(); + HashMap<String,int[]> mor = new HashMap<String,int[]>(); + + float correctM = 0, allM=0;; + + while(goldInstance != null) { + + int instanceLength = goldInstance.length(); + + if (instanceLength != predInstance.length()) + System.out.println("Lengths do not match on sentence "+numsent); + + String gold[] = goldInstance.gpos; + String pred[] = predInstance.ppos; + + String goldM[] = goldInstance.ofeats; + String predM[] = predInstance.pfeats; + + + // NOTE: the first item is the root info added during nextInstance(), so we skip it. + + for (int i = 1; i < instanceLength; i++) { + + int[] cwr = correctL.get(i); + if (cwr ==null) { + cwr = new int[2]; + correctL.put(i, cwr); + } + cwr[1]++; + int[] correctPos = pos.get(gold[i]); + if (correctPos==null) { + correctPos = new int[2]; + pos.put(gold[i], correctPos); + } + correctPos[1]++; + + int[] correctMor = mor.get(goldM[i]); + if (correctMor==null) { + correctMor = new int[2]; + mor.put(goldM[i], correctMor); + } + + if ((goldM[i].equals("_")&&predM[i]==null) || goldM[i].equals(predM[i])) { + correctM++; + correctMor[0]++; + } + allM++; + correctMor[1]++; + + if (gold[i].equals(pred[i])) { + corrT++; + cwr[0]++; + correctPos[0]++; + } else { + String key = "gold: '"+gold[i]+"' pred: '"+pred[i]+"'"; + Integer cnt = errors.get(key); + StringBuffer errWrd = words.get(key); + if (cnt==null) { + errors.put(key,1); + words.put(key, new StringBuffer().append(goldInstance.forms[i])); + } + else { + errors.put(key,cnt+1); + errWrd.append(" "+goldInstance.forms[i]); + } + } + + + } + total += instanceLength - 1; // Subtract one to not score fake root token + + + numsent++; + + goldInstance = goldReader.getNext(); + predInstance = predictedReader.getNext(); + } + + + + + + // System.out.println("error gold:"+goldPos[i]+" pred:"+predPos[i]+" "+goldInstance.forms[i]+" snt "+numsent+" i:"+i); + ArrayList<Entry<String, Integer>> opsl = new ArrayList<Entry<String, Integer>>(); + for(Entry<String, Integer> e : errors.entrySet()) { + opsl.add(e); + } + + Collections.sort(opsl, new Comparator<Entry<String, Integer>>(){ + + @Override + public int compare(Entry<String, Integer> o1, + Entry<String, Integer> o2) { + + return o1.getValue()==o2.getValue()?0:o1.getValue()>o2.getValue()?-1:1; + } + + + }); + + + int cnt=0; + if (what.contains("top") ) { + System.out.println("top most errors:"); + for(Entry<String, Integer> e : opsl) { + cnt++; + if(e.getValue()>10) System.out.println(e.getKey()+" "+e.getValue()+" context: "+words.get(e.getKey())); + } + } + + if (what.contains("length")) { + for(int k=0;k<60;k++) { + int[] cwr = correctL.get(k); + if (cwr == null) continue; + System.out.print(k+":"+cwr[0]+":"+cwr[1]+":"+(((float)Math.round(10000*(float)((float)cwr[0])/(float)cwr[1]))/100)+" "); + } + System.out.println(); + } + + if (what.contains("pos")) { + for(Entry<String,int[]> e : pos.entrySet()) { + + System.out.print(e.getKey()+":"+e.getValue()[0]+":"+e.getValue()[1]+":"+ + (((float)Math.round(10000*((float)e.getValue()[0])/((float)e.getValue()[1])))/100)+" "); + + } + System.out.print(""); + } + System.out.println(); + if (what.contains("mor")) { + for(Entry<String,int[]> e : mor.entrySet()) { + + System.out.print(e.getKey()+":"+e.getValue()[0]+":"+e.getValue()[1]+":"+ + (((float)Math.round(10000*((float)e.getValue()[0])/((float)e.getValue()[1])))/100)+" "); + + } + System.out.print(""); + } + System.out.println("\nTokens: " + total+" Correct: " + corrT+" "+(float)corrT/total+" Correct M.:"+(int)correctM+ " morphology "+(correctM/total)); + } + + + + + public static int errors(SentenceData09 s, boolean uas) { + + int errors =0; + for (int k =1;k<s.length();k++) { + + if (s.heads[k] != s.pheads[k] && (uas || ! s.labels[k].equals(s.plabels[k]))) { + errors++; + } + } + return errors; + } + + public static int errors(SentenceData09 s1, SentenceData09 s2, HashMap<String,Integer> r1,HashMap<String,Integer> r2) { + + + + int errors =0; + for (int k =1;k<s1.length();k++) { + + if (s1.heads[k] != s1.pheads[k] || (! s1.labels[k].equals(s1.plabels[k]))) { + + if (s2.heads[k] != s2.pheads[k] || (! s2.labels[k].equals(s2.plabels[k]))) { + + // equal do nothing + + } else { + + Integer cnt = r1.get(s1.labels[k]); + if (cnt==null) cnt=0; + cnt++; + r1.put(s1.labels[k],cnt); + + + } + + } + + if (s2.heads[k] != s2.pheads[k] || (! s2.labels[k].equals(s2.plabels[k]))) { + + if (s1.heads[k] != s1.pheads[k] || (! s1.labels[k].equals(s1.plabels[k]))) { + + // equal do nothing + + } else { + + Integer cnt = r2.get(s2.labels[k]); + if (cnt==null) cnt=0; + cnt++; + r2.put(s2.labels[k],cnt); + + + } + + } + } + return errors; + } + + + public static final String PUNCT ="!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~"; + + public static class Results { + + public int total; + public int corr; + public float las; + public float ula; + public float lpas; + public float upla; + + ArrayList<Double> correctHead; + } + + public static Results evaluate (String act_file, String pred_file) { + return evaluate (act_file, pred_file,true); + } + public static Results evaluate (String act_file, String pred_file, boolean printEval) { + return evaluate ( act_file, pred_file, printEval, false); + } + + + public static Results evaluate (String act_file, String pred_file, boolean printEval, boolean sig) { + + CONLLReader09 goldReader = new CONLLReader09(act_file, -1); + CONLLReader09 predictedReader = new CONLLReader09(pred_file, -1); + + int total = 0, corr = 0, corrL = 0, Ptotal=0, Pcorr = 0, PcorrL = 0, BPtotal=0, BPcorr = 0, BPcorrL = 0, corrLableAndPos=0, corrHeadAndPos=0; + int corrLableAndPosP=0, corrHeadAndPosP=0,corrLableAndPosC=0; + int numsent = 0, corrsent = 0, corrsentL = 0, Pcorrsent = 0, PcorrsentL = 0,sameProj=0;; + int proj=0, nonproj=0, pproj=0, pnonproj=0, nonProjOk=0, nonProjWrong=0; + + int corrOne = 0; + + int correctChnWoPunc =0, correctLChnWoPunc=0,CPtotal=0; + SentenceData09 goldInstance = goldReader.getNext(); + + SentenceData09 predInstance = predictedReader.getNext(); + HashMap<String,Integer> label = new HashMap<String,Integer>(); + HashMap<String,Integer> labelCount = new HashMap<String,Integer>(); + HashMap<String,Integer> labelCorrect = new HashMap<String,Integer>(); + HashMap<String,Integer> falsePositive = new HashMap<String,Integer>(); + HashMap<String,HashMap<String,Integer> > confusion = new HashMap<String,HashMap<String,Integer> >(); + + HashMap<String,HashMap<String,Integer> > posLabelAssign = new HashMap<String,HashMap<String,Integer> >(); + + // does the node have the correct head? + ArrayList<Double> correctHead = new ArrayList<Double>(); + + while(goldInstance != null) { + + int instanceLength = goldInstance.length(); + + if (instanceLength != predInstance.length()) + System.out.println("Lengths do not match on sentence "+numsent); + + int[] goldHeads = goldInstance.heads; + + String[] goldLabels,predLabels; + if (what == TAGGER) { + goldLabels= goldInstance.gpos; + predLabels= predInstance.ppos; + } + else { + goldLabels = goldInstance.labels ; + predLabels = predInstance.plabels ; + } + + + int[] predHeads = predInstance.pheads; + + + boolean whole = true; + boolean wholeL = true; + + boolean Pwhole = true; + boolean PwholeL = true; + + + int tlasS=0, totalS=0,corrLabels=0, XLabels=0; + + // NOTE: the first item is the root info added during nextInstance(), so we skip it. + + + + int punc=0, bpunc=0,totalChnWoPunc=0; + for (int i = 1; i < instanceLength; i++) { + + + + Parse p = new Parse(predHeads.length); + for (int k=0;k<p.heads.length;k++) p.heads[k]=(short) predHeads[k]; + + Parse g = new Parse(predHeads.length); + for (int k=0;k<g.heads.length;k++) g.heads[k]=(short) goldHeads[k]; + + + + HashMap<String,Integer> labelsNum =posLabelAssign.get(goldInstance.gpos[goldInstance.heads[i]]); + if (labelsNum== null) { + labelsNum = new HashMap<String,Integer>(); + posLabelAssign.put(goldInstance.gpos[goldInstance.heads[i]], labelsNum); + } + + Integer num = labelsNum.get(goldInstance.labels[i]); + if (num==null) num =0; + num++; + labelsNum.put(goldInstance.labels[i],num); + + + + Integer count = labelCount.get(goldLabels[i]); + if (count==null)count = 0; + + count++; + + labelCount.put(goldLabels[i], count); + + if(goldLabels[i].equals(predLabels[i]) && (what==TAGGER || predHeads[i] == goldHeads[i] )) { + Integer correct = labelCorrect.get(goldLabels[i]); + if (correct ==null) correct =0; + correct ++; + labelCorrect.put(goldLabels[i], correct); + + } else { + + Integer fp = falsePositive.get(predLabels[i]); + if (fp ==null) fp =0; + fp ++; + falsePositive.put(predLabels[i], fp); + + HashMap<String,Integer> conf = confusion.get(goldLabels[i]); + if (conf == null) confusion.put(goldLabels[i], conf = new HashMap<String,Integer>()); + + conf.put(predLabels[i], conf.get(predLabels[i])==null?1:conf.get(predLabels[i])+1); + + + } + + + + + + + + + + boolean tlas =false; + if (predHeads[i] == goldHeads[i]) { + corr++; + + if (goldInstance.gpos[i].equals(predInstance.ppos[i])) corrHeadAndPos ++; + if (goldLabels[i].equals(predLabels[i])) { + corrL++; + // if (predLabels[i].startsWith("PMOD")) + corrLabels++; + // else correctHead.add(0); + if (goldInstance.gpos[i].equals(predInstance.ppos[i])) { + tlasS++; + tlas=true; + corrLableAndPos ++; + } + } + else { + // correctHead.add(0); + // System.out.println(numsent+" error gold "+goldLabels[i]+" "+predLabels[i]+" head "+goldHeads[i]+" child "+i); + wholeL = false; + } + } + else { + + //correctHead.add(0); + + // System.out.println(numsent+"error gold "+goldLabels[i]+" "+predLabels[i]+" head "+goldHeads[i]+" child "+i); + whole = false; wholeL = false; + + count = label.get(goldLabels[i]); + + if (count==null)count = 0; + count++; + label.put(goldLabels[i], count); + + + + int d = Math.abs(goldInstance.heads[i]-i); + } + + + if( ! ("!\"#$%&''()*+,-./:;<=>?@[\\]^_{|}~``".contains(goldInstance.forms[i]))) { + + if (predHeads[i] == goldHeads[i]) { + BPcorr++; + + if (goldLabels[i].equals(predLabels[i])) { + BPcorrL++; + } + else { + // System.out.println(numsent+" error gold "+goldLabels[i]+" "+predLabels[i]+" head "+goldHeads[i]+" child "+i); + // PwholeL = false; + } + } else { + // System.out.println(numsent+"error gold "+goldLabels[i]+" "+predLabels[i]+" head "+goldHeads[i]+" child "+i); + //Pwhole = false; wholeL = false; + } + + } else bpunc++; + + if( ! (",.:''``".contains(goldInstance.forms[i]))) { + + + if (predHeads[i] == goldHeads[i]) { + if (goldInstance.gpos[i].equals(predInstance.ppos[i])) corrHeadAndPosP ++; + Pcorr++; + + if (goldLabels[i].equals(predLabels[i])) { + PcorrL++; + if (goldInstance.gpos[i].equals(predInstance.ppos[i])) corrLableAndPosP ++; + + } + else { + // System.out.println(numsent+" error gold "+goldLabels[i]+" "+predLabels[i]+" head "+goldHeads[i]+" child "+i); + PwholeL = false; + } + } else { + // System.out.println(numsent+"error gold "+goldLabels[i]+" "+predLabels[i]+" head "+goldHeads[i]+" child "+i); + Pwhole = false; PwholeL = false; + } + + } else punc++; + + + if( ! (goldInstance.gpos[i].toLowerCase().startsWith("pu"))) { + if (predHeads[i] == goldHeads[i]) { + correctChnWoPunc++; + + if (goldLabels[i].equals(predLabels[i])) { + correctLChnWoPunc++; + if (goldInstance.gpos[i].equals(predInstance.ppos[i])) corrLableAndPosC ++; + } + else { + // System.out.println(numsent+" error gold "+goldLabels[i]+" "+predLabels[i]+" head "+goldHeads[i]+" child "+i); + // PwholeL = false; + } + } else { + // System.out.println(numsent+"error gold "+goldLabels[i]+" "+predLabels[i]+" head "+goldHeads[i]+" child "+i); + // Pwhole = false; PwholeL = false; + } + + } else totalChnWoPunc++; + + + if (sig) { + if(tlas) System.out.println("1\t"); + else System.out.println("0\t"); + } + + } + total += ((instanceLength - 1)); // Subtract one to not score fake root token + + Ptotal += ((instanceLength - 1) - punc); + BPtotal += ((instanceLength - 1) - bpunc); + CPtotal += ((instanceLength - 1) - totalChnWoPunc); + if(whole) corrsent++; + if(wholeL) corrsentL++; + if(Pwhole) Pcorrsent++; + if(PwholeL) PcorrsentL++; + numsent++; + + goldInstance = goldReader.getNext(); + predInstance = predictedReader.getNext(); + correctHead.add((double) ((double)corrLabels/(instanceLength - 1))); + // System.out.println(""+((double)corrLabels/(instanceLength - 1))); + } + + Results r = new Results(); + + r.correctHead =correctHead; + int mult=100000, diff=1000; + + r.total = total; + r.corr = corr; + r.las =(float)Math.round(((double)corrL/total)*mult)/diff; + r.ula =(float)Math.round(((double)corr /total)*mult)/diff; + r.lpas =(float)Math.round(((double)corrLableAndPos/total)*mult)/diff; + r.upla =(float)Math.round(((double)corrHeadAndPos /total)*mult)/diff; + float tlasp = (float)Math.round(((double)corrLableAndPosP/Ptotal)*mult)/diff; + float tlasc = (float)Math.round(((double)corrLableAndPosC/Ptotal)*mult)/diff; + + // System.out.print("Total: " + total+" \tCorrect: " + corr+" "); + System.out.print(" LAS/Total/UAS/Total: " + r.las+"/" + (double)Math.round(((double)corrsentL/numsent)*mult)/diff+ + "/" + r.ula+"/" + (double)Math.round(((double)corrsent /numsent)*mult)/diff+" LPAS/UPAS "+r.lpas+"/"+r.upla); + + System.out.println("; without . " + (double)Math.round(((double)PcorrL/Ptotal)*mult)/diff+"/" + + (double)Math.round(((double)PcorrsentL/numsent)*mult)/diff+ + "/" + (double)Math.round(((double)Pcorr /Ptotal)*mult)/diff+"/" + + (double)Math.round(((double)Pcorrsent /numsent)*mult)/diff+" TLAS "+tlasp+ + " V2 LAS/UAS "+(double)Math.round(((double)BPcorrL/BPtotal)*mult)/diff+ + "/"+(double)Math.round(((double)BPcorr/BPtotal)*mult)/diff+ + " CHN LAS/UAS "+(double)Math.round(((double)correctLChnWoPunc/CPtotal)*mult)/diff+ + "/"+(double)Math.round(((double)correctChnWoPunc/CPtotal)*mult)/diff+" TLAS "+tlasc); + + float precisionNonProj = ((float)nonProjOk)/((float)nonProjOk+nonProjWrong); + float recallNonProj = ((float)nonProjOk)/((float)(nonproj)); + System.out.println("proj "+proj+" nonp "+nonproj+"; predicted proj "+pproj+" non "+pnonproj+"; nonp correct "+ + nonProjOk+" nonp wrong "+nonProjWrong+ + " precision=(nonProjOk)/(non-projOk+nonProjWrong): "+precisionNonProj+ + " recall=nonProjOk/nonproj="+recallNonProj+" F="+(2*precisionNonProj*recallNonProj)/(precisionNonProj+recallNonProj)); + + if (!printEval) return r; + + + HashMap<String,Integer> totalX = new HashMap<String,Integer>(); + HashMap<String,Integer> totalY = new HashMap<String,Integer>(); + + String A=" "; // & + System.out.println("label\ttp\tcount\trecall\t\ttp\tfp+tp\tprecision\t F-Score "); + + for(Entry<String, Integer> e : labelCount.entrySet()) { + + int tp = labelCorrect.get(e.getKey())==null?0:labelCorrect.get(e.getKey()).intValue(); + Integer count = labelCount.get(e.getKey()); + int fp = falsePositive.get(e.getKey())==null?0:falsePositive.get(e.getKey()).intValue(); + System.out.println(e.getKey()+"\t"+tp+"\t"+count+"\t"+roundPercent((float)tp/count)+"\t\t"+tp+"\t"+(fp+tp)+ + "\t"+roundPercent((float)tp/(fp+tp))+"\t\t"+roundPercent((((float)tp/count))+(float)tp/(fp+tp))/2F); //+totalD + } + + for(Entry<String, HashMap<String, Integer>> e : confusion.entrySet()) { + HashMap<String, Integer> values = e.getValue(); + ArrayList<Entry<String, Integer>> entries = new ArrayList<Entry<String, Integer>>(values.entrySet()); + Collections.sort(entries, new Comparator<Entry<String, Integer>>() { + + + + @Override + public int compare(Entry<String, Integer> o1, Entry<String, Integer> o2) { + + return o2.getValue().compareTo(o1.getValue()); + } + + + } + ); + + + System.out.println(e.getKey()+"\t"+entries); + + + } + System.out.println(""+posLabelAssign); + + + + return r; + } + + + public static float round (double v){ + + return Math.round(v*10000F)/10000F; + } + + public static float roundPercent (double v){ + + return Math.round(v*10000F)/100F; + } + + + + +} diff --git a/dependencyParser/basic/mate-tools/src/is2/util/ExtractParagraphs.java b/dependencyParser/basic/mate-tools/src/is2/util/ExtractParagraphs.java new file mode 100644 index 0000000..a9fabca --- /dev/null +++ b/dependencyParser/basic/mate-tools/src/is2/util/ExtractParagraphs.java @@ -0,0 +1,87 @@ +package is2.util; + +import java.io.BufferedReader; +import java.io.BufferedWriter; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStreamReader; +import java.io.OutputStreamWriter; +import java.io.Reader; +import java.nio.channels.Channels; +import java.nio.channels.FileChannel; +import java.nio.charset.Charset; +import java.nio.charset.CharsetDecoder; +import java.util.StringTokenizer; + +public class ExtractParagraphs { + + /** + + * @param args + * @throws IOException + */ + public static void main(String args[]) throws IOException { + + if (args.length<1) { + System.out.println("Please provide a file name."); + System.exit(0); + } + + File file = new File(args[0]); + file.isDirectory(); + String[] dirs = file.list(); + + BufferedWriter write = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(args[1]),"UTF-8"),32768); + int cnt=0; + +for (String fileName : dirs) { + BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(args[0]+fileName),"UTF-8"),32768); + + + + + int state =0; + + String s; + while ((s = reader.readLine()) != null) { + + if (s.startsWith("<P>")||s.startsWith("<p>")) { + state=1; // paragraph start + continue; + } + + + + + if (s.startsWith("</P>")||s.startsWith("</p>")) { + state=2; // paragraph end + write.newLine(); + } + + boolean lastNL =false; + if (state==1) { + String sp[] = s.split("\\. "); + for(String p : sp) { + write.write(p); + // if (sp.length>1) write.newLine(); + } + cnt++; + } + } + + //if (cnt>5000) break; + + reader.close(); +} + write.flush(); + write.close(); + + System.out.println("Extract "+cnt+" lines "); + + + } + + +} diff --git a/dependencyParser/basic/mate-tools/src/is2/util/IntStack.java b/dependencyParser/basic/mate-tools/src/is2/util/IntStack.java new file mode 100644 index 0000000..e92c02c --- /dev/null +++ b/dependencyParser/basic/mate-tools/src/is2/util/IntStack.java @@ -0,0 +1,86 @@ +/** + * + */ +package is2.util; + + + +/** + * @author Dr. Bernd Bohnet, 01.06.2011 + * + * + */ +final public class IntStack { + + final public int[] stack; + public int position =-1; + + public IntStack(int size) { + if (size<=0) stack = new int[1]; + else stack = new int[size+1]; + } + + public IntStack(IntStack s) { + stack=s.stack; + position = s.position; + } + + + public int peek() { + return position==-1?-1:stack[position]; + } + + public void push(int i) { + // if (i ==2)new Exception().printStackTrace(); + stack[++position]=i; + } + + public int pop() { + return position==-1?-1:stack[position--]; + } + + public int size() { + return position+1; + } + + public boolean isEmpty() { + return position==-1?true:false; + } + + public int get(int p) { + return stack[p]; + } + + public void clear() { + position=-1; + } + + /** + * @param b + */ + public void addAll(IntStack b) { + + position=b.position; + if (position<0) return; + + for(int k=0; k<=position;k++) stack[k]=b.stack[k]; + + } + + public boolean contains(int s) {; + + for(int k=0; k<=position;k++) + if (stack[k]==s) return true; + + return false; + } + + public String toString() { + StringBuffer s = new StringBuffer(); + for(int k = position;k>=0;k--) { + s.append(k).append(":").append(this.stack[k]).append(" "); + } + return s.toString(); + } + +} diff --git a/dependencyParser/basic/mate-tools/src/is2/util/Long2Int.java b/dependencyParser/basic/mate-tools/src/is2/util/Long2Int.java new file mode 100644 index 0000000..d461df8 --- /dev/null +++ b/dependencyParser/basic/mate-tools/src/is2/util/Long2Int.java @@ -0,0 +1,81 @@ +package is2.util; + +import is2.data.Long2IntInterface; + + +/** + * @author Bernd Bohnet, 01.09.2009 + * + * Maps for the Hash Kernel the long values to the int values. + */ +final public class Long2Int implements Long2IntInterface { + + + public Long2Int() { + size=115911564; + } + + + public Long2Int(int s) { + size=s; + } + + + /** Integer counter for long2int */ + final private int size; //0x03ffffff //0x07ffffff + + + /* (non-Javadoc) + * @see is2.sp09k9992.Long2IntIterface#size() + */ + public int size() {return size;} + + /* (non-Javadoc) + * @see is2.sp09k9992.Long2IntIterface#start() + * has no meaning for this implementation + */ + final public void start() {} + + + /* (non-Javadoc) + * @see is2.sp09k9992.Long2IntIterface#l2i(long) + */ + final public int l2i(long l) { + if (l<0) return -1; + + // this works well LAS 88.138 + // int r= (int)(( l ^ (l&0xffffffff00000000L) >>> 29 ));//0x811c9dc5 ^ // 29 + // return Math.abs(r % size); + // this works a bit better and good with 0x03ffffff + // + /* + long r= l;//26 + l = (l>>12)&0xfffffffffffff000L; + r ^= l;//38 + l = (l>>11)&0xffffffffffffc000L; + r ^= l;//49 + l = (l>>9)& 0xffffffffffff0000L; //53 + r ^= l;//58 + l = (l>>7)&0xfffffffffffc0000L; //62 + r ^=l;//65 + int x = (int)r; + x = x % size; + // return x >= 0 ? x : -x ;// Math.abs(r % size); + + */ + // 26 0x03ffffff + // together with 0x07ffffff 27 88.372 + long r= l;// 27 + l = (l>>13)&0xffffffffffffe000L; + r ^= l; // 40 + l = (l>>11)&0xffffffffffff0000L; + r ^= l; // 51 + l = (l>>9)& 0xfffffffffffc0000L; //53 + r ^= l; // 60 + l = (l>>7)& 0xfffffffffff00000L; //62 + r ^=l; //67 + int x = ((int)r) % size; + + return x >= 0 ? x : -x ; + } +} diff --git a/dependencyParser/basic/mate-tools/src/is2/util/Options.java b/dependencyParser/basic/mate-tools/src/is2/util/Options.java new file mode 100644 index 0000000..5989483 --- /dev/null +++ b/dependencyParser/basic/mate-tools/src/is2/util/Options.java @@ -0,0 +1,129 @@ +package is2.util; + +import is2.util.OptionsSuper; + +import java.io.File; + + +public final class Options extends OptionsSuper { + + + + public Options (String[] args) { + + for(int i = 0; i < args.length; i++) { + String[] pair = args[i].split(":"); + + if (pair[0].equals("--help")) explain(); + else if (pair[0].equals("-train")) { + train = true; + trainfile = args[i+1]; + } else if (pair[0].equals("-eval")) { + eval = true; + goldfile =args[i+1]; i++; + } else if (pair[0].equals("-test")) { + test = true; + testfile = args[i+1]; i++; + } else if (pair[0].equals("-i")) { + numIters = Integer.parseInt(args[i+1]); i++; + } + else if (pair[0].equals("-out")) { + outfile = args[i+1]; i++; + } + else if (pair[0].equals("-decode")) { + decodeProjective = args[i+1].equals("proj"); i++; + } + else if (pair[0].equals("-confidence")) { + + conf = true; + } + + else if (pair[0].equals("-count")) { + count = Integer.parseInt(args[i+1]); i++; + } else if (pair[0].equals("-model")) { + modelName = args[i+1]; i++; + } + else if (pair[0].equals("-device")) { + device = args[i+1]; i++; + } else if (pair[0].equals("-tmp")) { + tmp = args[i+1]; i++; + } else if (pair[0].equals("-format")) { + //format = args[i+1]; + formatTask = Integer.parseInt(args[i+1]); i++; + } else if (pair[0].equals("-allfeatures")) { + allFeatures=true; + } else if (pair[0].equals("-nonormalize")) { + normalize=false; + }else if (pair[0].equals("-nframes")) { + //format = args[i+1]; + nbframes= args[i+1]; i++; + + + } else if (pair[0].equals("-pframes")) { + //format = args[i+1]; + pbframes= args[i+1]; i++; + } else if (pair[0].equals("-nopred")) { + nopred =true; + } else if (pair[0].equals("-divide")) { + keep =true; + } else if (pair[0].equals("-lexicon")) { + lexicon= args[i+1]; i++; + + } else super.addOption(args, i); + + } + + + + + + try { + + if (trainfile!=null) { + + if (keep && tmp!=null) { + trainforest = new File(tmp); + if (!trainforest.exists()) keep=false; + + } else + if (tmp!=null) { + trainforest = File.createTempFile("train", ".tmp", new File(tmp)); + trainforest.deleteOnExit(); + } + else { + trainforest = File.createTempFile("train", ".tmp"); //,new File("F:\\") + trainforest.deleteOnExit(); + } + + + } + + + } catch (java.io.IOException e) { + System.out.println("Unable to create tmp files for feature forests!"); + System.out.println(e); + System.exit(0); + } + } + + private void explain() { + System.out.println("Usage: "); + System.out.println("java -class mate.jar is2.parser.Parser [Options]"); + System.out.println(); + System.out.println("Example: "); + System.out.println(" java -class mate.jar is2.parser.Parser -model eps3.model -train corpora/conll08st/train/train.closed -test corpora/conll08st/devel/devel.closed -out b3.test -eval corpora/conll08st/devel/devel.closed -count 2000 -i 6"); + System.out.println(""); + System.out.println("Options:"); + System.out.println(""); + System.out.println(" -train <file> the corpus a model is trained on; default "+this.trainfile); + System.out.println(" -test <file> the input corpus for testing; default "+this.testfile); + System.out.println(" -out <file> the output corpus (result) of a test run; default "+this.outfile); + System.out.println(" -model <file> the parsing model for traing the model is stored in the files"); + System.out.println(" and for parsing the model is load from this file; default "+this.modelName); + System.out.println(" -i <number> the number of training iterations; good numbers are 10 for smaller corpora and 6 for bigger; default "+this.numIters); + System.out.println(" -count <number> the n first sentences of the corpus are take for the training default "+this.count); + System.out.println(" -format <number> conll format of the year 8 or 9; default "+this.formatTask); + + System.exit(0); + } +} diff --git a/dependencyParser/basic/mate-tools/src/is2/util/OptionsSuper.java b/dependencyParser/basic/mate-tools/src/is2/util/OptionsSuper.java new file mode 100755 index 0000000..0a40f73 --- /dev/null +++ b/dependencyParser/basic/mate-tools/src/is2/util/OptionsSuper.java @@ -0,0 +1,216 @@ +package is2.util; + +import is2.io.CONLLReader09; + +import java.io.File; + +public class OptionsSuper { + + public String trainfile = null; + public String testfile = null; + public File trainforest = null; + + public String nbframes = null; + public String pbframes = null; + + public boolean nopred = false; + public boolean upper = false; + + public boolean train = false; + public boolean eval = false; + public boolean test = false; + public boolean keep = false; + public boolean flt = false; + public boolean loadTaggerModels =false; + + public String modelName = "prs.mdl"; + public String modelTaggerName = null; + + public String useMapping = null; + public String device = "C:"; + public String tmp = null; + public boolean createForest = true; + public boolean decodeProjective = false; + public double decodeTH = 0.3d; + public String format = "CONLL"; + public int formatTask =9; + public int numIters = 10; + public int best = 1000; + public String outfile = "dp.conll"; + public String charset = "UTF-8"; + public String phraseTrain = null; + public String phraseTest = null; + public String goldfile = null; + public String gout = "sec23.gld"; + public String features = null; + public String lexicon = null; + public int hsize = 0x07ffffff; + public int maxLen = 2000; + public int maxForms = Integer.MAX_VALUE; + public int beam = 4; + public float prune = -100000000; + + public String third =""; + public String second =""; + public String first =""; + + public int cross=10; + + //public boolean secondOrder = true; + public boolean useRelationalFeatures = false; + public int count = 10000000; + public int cores = Integer.MAX_VALUE; + public int start = 0; + public int minOccureForms = 0; + public int tt=30; // tagger averaging + public boolean allFeatures =false; + public boolean normalize =false; + public boolean no2nd =false; + public boolean noLemmas=false; + public boolean few2nd =false,noLinear=false,noMorph=false; + public String clusterFile; + + // output confidence values + public boolean conf =false; + public String phraseFormat="penn"; // tiger | penn + public boolean average = true; + public boolean label =false; + public boolean stack=false; + public boolean oneRoot = false; + + public String significant1 =null,significant2 =null; + + + // horizontal stacking + public int minLength =0, maxLength =Integer.MAX_VALUE; + public boolean overwritegold =false; + + + public static final int MULTIPLICATIVE=1, SHIFT=2; + public int featureCreation = MULTIPLICATIVE; + + + public OptionsSuper (String[] args, String dummy) { + + for(int i = 0; i < args.length; i++) { + i = addOption(args,i); + } + + } + + public OptionsSuper() {} + + + public int addOption(String args[], int i) { + + if (args[i].equals("-train")) { + train = true; + trainfile = args[i+1]; + } else if (args[i].equals("-eval")) { + eval = true; + goldfile =args[i+1]; i++; + } else if (args[i].equals("-gout")) { + gout =args[i+1]; i++; + } else if (args[i].equals("-test")) { + test = true; + testfile = args[i+1]; i++; + } else if (args[i].equals("-sig1")) { + significant1 = args[i+1]; i++; + } else if (args[i].equals("-sig2")) { + significant2 = args[i+1]; i++; + } else if (args[i].equals("-i")) { + numIters = Integer.parseInt(args[i+1]); i++; + } else if (args[i].equals("-out")) { + outfile = args[i+1]; i++; + } else if (args[i].equals("-cluster")) { + clusterFile = args[i+1]; i++; + } + + else if (args[i].equals("-count")) { + count = Integer.parseInt(args[i+1]); i++; + } else if (args[i].equals("-model")) { + modelName = args[i+1]; i++; + } else if (args[i].equals("-tmodel")) { + this.modelTaggerName = args[i+1]; i++; + } else if (args[i].equals("-nonormalize")) { + normalize=false; + } else if (args[i].equals("-float")) { + flt =true; + } else if (args[i].equals("-hsize")) { + hsize= Integer.parseInt(args[i+1]); i++; + } else if (args[i].equals("-charset")) { + charset= args[++i]; + } else if (args[i].equals("-pstrain")) { + this.phraseTrain=args[i+1]; i++; + } else if (args[i].equals("-pstest")) { + this.phraseTest=args[i+1]; i++; + } else if (args[i].equals("-len")) { + maxLen= Integer.parseInt(args[i+1]); i++; + } else if (args[i].equals("-cores")) { + cores= Integer.parseInt(args[i+1]); i++; + } else if (args[i].equals("-start")) { + start= Integer.parseInt(args[i+1]); i++; + } else if (args[i].equals("-max")) { + maxLength= Integer.parseInt(args[i+1]); i++; + } else if (args[i].equals("-min")) { + minLength= Integer.parseInt(args[i+1]); i++; + } else if (args[i].equals("-noLemmas")) { + noLemmas= true; + } else if (args[i].equals("-noavg")) { + this.average= false; + } else if (args[i].equals("-label")) { + label= true; + } else if (args[i].equals("-stack")) { + stack= true; + } else if (args[i].equals("-overwritegold")) { + overwritegold = true; + } else if (args[i].equals("-format")) { + formatTask = Integer.parseInt(args[++i]); + } else if (args[i].equals("-tt")) { + tt = Integer.parseInt(args[++i]); + } else if (args[i].equals("-min-occure-forms")) { + minOccureForms = Integer.parseInt(args[++i]); + } else if (args[i].equals("-loadTaggerModels")) { + this.loadTaggerModels=true;; + + } else if (args[i].equals("-feature_creation")) { + this.featureCreation = args[++i].equals("shift")?SHIFT:MULTIPLICATIVE; + } + + return i; + + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("FLAGS ["); + sb.append("train-file: " + trainfile); + sb.append(" | "); + sb.append("test-file: " + testfile); + sb.append(" | "); + sb.append("gold-file: " + goldfile); + sb.append(" | "); + sb.append("output-file: " + outfile); + sb.append(" | "); + sb.append("model-name: " + modelName); + sb.append(" | "); + sb.append("train: " + train); + sb.append(" | "); + sb.append("test: " + test); + sb.append(" | "); + sb.append("eval: " + eval); + sb.append(" | "); + sb.append("training-iterations: " + numIters); + sb.append(" | "); + sb.append("decode-type: " + decodeProjective); + sb.append(" | "); + sb.append("create-forest: " + createForest); + sb.append(" | "); + sb.append("format: " + format); + + sb.append("]\n"); + return sb.toString(); + } + +} \ No newline at end of file diff --git a/dependencyParser/basic/mate-tools/src/is2/util/ParserEvaluator.java b/dependencyParser/basic/mate-tools/src/is2/util/ParserEvaluator.java new file mode 100644 index 0000000..260e4b7 --- /dev/null +++ b/dependencyParser/basic/mate-tools/src/is2/util/ParserEvaluator.java @@ -0,0 +1,94 @@ +package is2.util; + +import is2.data.SentenceData09; +import is2.io.CONLLReader09; + + +public class ParserEvaluator { + + + + public static final String PUNCT ="!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~"; + + public static class Results { + + public int total; + public int corr; + public float las; + public float ula; + + } + + public static Results evaluate (String act_file, String pred_file) throws Exception { + + CONLLReader09 goldReader = new CONLLReader09(act_file, -1); + CONLLReader09 predictedReader = new CONLLReader09(pred_file, -1); + + int total = 0, corr = 0, corrL = 0; + int numsent = 0, corrsent = 0, corrsentL = 0; + SentenceData09 goldInstance = goldReader.getNext(); + SentenceData09 predInstance = predictedReader.getNext(); + + while(goldInstance != null) { + + int instanceLength = goldInstance.length(); + + if (instanceLength != predInstance.length()) + System.out.println("Lengths do not match on sentence "+numsent); + + int[] goldHeads = goldInstance.heads; + String[] goldLabels = goldInstance.labels; + int[] predHeads = predInstance.pheads; + String[] predLabels = predInstance.plabels; + + boolean whole = true; + boolean wholeL = true; + + // NOTE: the first item is the root info added during nextInstance(), so we skip it. + + int punc=0; + for (int i = 1; i < instanceLength; i++) { + if (predHeads[i] == goldHeads[i]) { + corr++; + + if (goldLabels[i].equals(predLabels[i])) corrL++; + else { + // System.out.println(numsent+" error gold "+goldLabels[i]+" "+predLabels[i]+" head "+goldHeads[i]+" child "+i); + wholeL = false; + } + } + else { + // System.out.println(numsent+"error gold "+goldLabels[i]+" "+predLabels[i]+" head "+goldHeads[i]+" child "+i); + whole = false; wholeL = false; + } + } + total += ((instanceLength - 1) - punc); // Subtract one to not score fake root token + + if(whole) corrsent++; + if(wholeL) corrsentL++; + numsent++; + + goldInstance = goldReader.getNext(); + predInstance = predictedReader.getNext(); + } + + Results r = new Results(); + + r.total = total; + r.corr = corr; + r.las =(float)Math.round(((double)corrL/total)*100000)/1000; + r.ula =(float)Math.round(((double)corr /total)*100000)/1000; + System.out.print("Total: " + total+" \tCorrect: " + corr+" "); + System.out.println("LAS: " + (double)Math.round(((double)corrL/total)*100000)/1000+" \tTotal: " + (double)Math.round(((double)corrsentL/numsent)*100000)/1000+ + " \tULA: " + (double)Math.round(((double)corr /total)*100000)/1000+" \tTotal: " + (double)Math.round(((double)corrsent /numsent)*100000)/1000); + + return r; + } + + + public static float round (double v){ + + return Math.round(v*10000F)/10000F; + } + +} diff --git a/dependencyParser/basic/mate-tools/src/is2/util/Split.java b/dependencyParser/basic/mate-tools/src/is2/util/Split.java new file mode 100755 index 0000000..48eadbe --- /dev/null +++ b/dependencyParser/basic/mate-tools/src/is2/util/Split.java @@ -0,0 +1,94 @@ +package is2.util; + +import java.io.BufferedReader; +import java.io.FileInputStream; +import java.io.IOException; +import java.io.Reader; +import java.nio.channels.Channels; +import java.nio.channels.FileChannel; +import java.nio.charset.Charset; +import java.nio.charset.CharsetDecoder; +import java.util.StringTokenizer; + +public class Split { + + /** + * Splits a tokenized sentences into one word per line format: + * + * Input + * > I am an text . + * > Sentence two ... + * + * Output: + * I _ _ _ ... + * am _ _ _ ... + * ... + * + * @param args + * @throws IOException + */ + public static void main(String args[]) throws IOException { + + if (args.length!=1) { + System.out.println("Please provide a file name."); + System.exit(0); + } + + String filename = args[0]; +// Charset charset = Charset.forName("UTF-8"); + + FileInputStream in = new FileInputStream(filename); + FileChannel channel = in.getChannel(); + CharsetDecoder decoder = Charset.defaultCharset().newDecoder();//charset.newDecoder(); + Reader infile = Channels.newReader(channel , decoder, 16*1024); + BufferedReader bInfile = new BufferedReader(infile); + +// DataOutputStream dos = new DataOutputStream(new BufferedOutputStream(new FileOutputStream(options.modelName))); + + + String s; + while ((s = bInfile.readLine()) != null) { + + + // do the first tokens contain a colon? + int colon =0; + for(int k=0;k<12;k++) { + if (s.length()<=k) break; + if (s.charAt(k) == ':') { + + colon++; + break; + } + if (s.charAt(k) == ' ') break; + } + + String prefix =colon>0?s.substring(0,s.indexOf(":"))+"_":""; + + if (colon>0) { + s = s.substring(s.indexOf(":")+1); + } + + StringTokenizer t = new StringTokenizer(s); + int i=1; + boolean found=false; + while(t.hasMoreTokens()) { + found =true; + String tk =t.nextToken(); + if (tk.contains("=")) continue; + System.out.print(prefix+i+"\t"); + System.out.print(tk); + System.out.println("\t_\t_\t_\t_\t_\t_\t_\t_\t_\t_\t_\t_\t_"); + i++; + } + if (found) System.out.println(); + + } + bInfile.close(); + + + + + } + + +} diff --git a/dependencyParser/basic/mate-tools/src/is2/util/Split2.java b/dependencyParser/basic/mate-tools/src/is2/util/Split2.java new file mode 100644 index 0000000..1690a3d --- /dev/null +++ b/dependencyParser/basic/mate-tools/src/is2/util/Split2.java @@ -0,0 +1,70 @@ +package is2.util; + +import java.io.BufferedReader; +import java.io.BufferedWriter; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStreamReader; +import java.io.OutputStreamWriter; +import java.io.Reader; +import java.nio.channels.Channels; +import java.nio.channels.FileChannel; +import java.nio.charset.Charset; +import java.nio.charset.CharsetDecoder; +import java.util.StringTokenizer; + +public class Split2 { + + /** + * Splits a tokenized sentences into one word per line format: + * + * Input + * > I am an text . + * > Sentence two ... + * + * Output: + * I _ _ _ ... + * am _ _ _ ... + * ... + * + * @param args + * @throws IOException + */ + public static void main(String args[]) throws IOException { + + if (args.length<1) { + System.out.println("Please provide a file name."); + System.exit(0); + } + + + BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(args[0]),"UTF-8"),32768); + BufferedWriter write = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(args[1]),"ISO-8859-1")); + + + String s; + int cnt=0; + while ((s = reader.readLine()) != null) { + StringTokenizer t = new StringTokenizer(s); + while(t.hasMoreTokens()) { + String tk =t.nextToken(); + for(int c : tk.toCharArray()) { + if (c<0 && c>=255) System.out.println("contain sign "+c+" "+cnt); + } + write.write(tk); + write.newLine(); + cnt++; + } + write.newLine(); + } + reader.close(); + write.flush(); + write.close(); + + + + } + + +} diff --git a/dependencyParser/basic/mate-tools/src/is2/util/Split3.java b/dependencyParser/basic/mate-tools/src/is2/util/Split3.java new file mode 100644 index 0000000..03d920c --- /dev/null +++ b/dependencyParser/basic/mate-tools/src/is2/util/Split3.java @@ -0,0 +1,67 @@ +package is2.util; + +import java.io.BufferedReader; +import java.io.BufferedWriter; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStreamReader; +import java.io.OutputStreamWriter; +import java.io.Reader; +import java.nio.channels.Channels; +import java.nio.channels.FileChannel; +import java.nio.charset.Charset; +import java.nio.charset.CharsetDecoder; +import java.util.StringTokenizer; + +public class Split3 { + + /** + * Splits a tokenized sentences into one word per line format: + * + * Input + * > I am an text . + * > Sentence two ... + * + * Output: + * I _ _ _ ... + * am _ _ _ ... + * ... + * + * @param args + * @throws IOException + */ + public static void main(String args[]) throws IOException { + + if (args.length<1) { + System.out.println("Please provide a file name."); + System.exit(0); + } + + + BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(args[0]),"UTF-8"),32768); + BufferedWriter write = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(args[1]),"UTF-8"),32768); + + + String s; + int cnt=0; + while ((s = reader.readLine()) != null) { + StringTokenizer t = new StringTokenizer(s); + while(t.hasMoreTokens()) { + String tk =t.nextToken(); + write.write(tk); + write.newLine(); + cnt++; + } + write.newLine(); + } + reader.close(); + write.flush(); + write.close(); + + + + } + + +} diff --git a/dependencyParser/examples/README.txt b/dependencyParser/examples/README.txt deleted file mode 100644 index c5e773a..0000000 --- a/dependencyParser/examples/README.txt +++ /dev/null @@ -1,5 +0,0 @@ -test.csv contains an example input to the parser. -test.out contains the output generated by the parser given the example as the input. -d2 output.txt contains the value of the variable d2 printed out just before Decoder.decode is called in Parser.parse given the example as the input. -is output.txt contains the value of the variable is printed out just before Decoder.decode is called in Parser.parse given the example as the input. -edges output.txt contains the values of the variables Edges.edges and Edges.def printed out at the end of Parser's constructor given the example as the input. diff --git a/dependencyParser/examples/d2 output.txt b/dependencyParser/examples/d2 output.txt deleted file mode 100644 index 4637aa8..0000000 --- a/dependencyParser/examples/d2 output.txt +++ /dev/null @@ -1,4023 +0,0 @@ -typesLen = 32 -len = 15 -pl[0][0] = 0.0 -pl[0][1] = 0.0 -pl[0][2] = -0.010866272 -pl[0][3] = -0.043218352 -pl[0][4] = -0.075570434 -pl[0][5] = -0.10792251 -pl[0][6] = 0.038865875 -pl[0][7] = -0.1410935 -pl[0][8] = -0.16593723 -pl[0][9] = -0.18431185 -pl[0][10] = -0.07813574 -pl[0][11] = -0.22914958 -pl[0][12] = -0.26150167 -pl[0][13] = -0.29385376 -pl[0][14] = -0.25755194 -pl[1][0] = 0.0 -pl[1][1] = 0.0 -pl[1][2] = 0.0 -pl[1][3] = -0.06868441 -pl[1][4] = -0.13736881 -pl[1][5] = -0.20605323 -pl[1][6] = 0.0 -pl[1][7] = -0.2864833 -pl[1][8] = -0.057125658 -pl[1][9] = -0.3629666 -pl[1][10] = -0.09364338 -pl[1][11] = -0.48622873 -pl[1][12] = -0.55491316 -pl[1][13] = -0.62359756 -pl[1][14] = -0.2074638 -pl[2][0] = 0.0 -pl[2][1] = 0.0 -pl[2][2] = 0.0 -pl[2][3] = 0.0 -pl[2][4] = -0.05129477 -pl[2][5] = -0.10258954 -pl[2][6] = -0.12634124 -pl[2][7] = -0.1861538 -pl[2][8] = -0.13479765 -pl[2][9] = -0.25604704 -pl[2][10] = -0.09761818 -pl[2][11] = -0.34374037 -pl[2][12] = -0.39503515 -pl[2][13] = -0.44632992 -pl[2][14] = -0.2660829 -pl[3][0] = 0.0 -pl[3][1] = -0.019381773 -pl[3][2] = 0.0 -pl[3][3] = 0.0 -pl[3][4] = 0.0 -pl[3][5] = -0.05129477 -pl[3][6] = -0.084227495 -pl[3][7] = -0.13485903 -pl[3][8] = -0.1083162 -pl[3][9] = -0.20475228 -pl[3][10] = -0.083017066 -pl[3][11] = -0.2924456 -pl[3][12] = -0.34374037 -pl[3][13] = -0.39503515 -pl[3][14] = -0.23725143 -pl[4][0] = 0.0 -pl[4][1] = -0.038763545 -pl[4][2] = -0.022566656 -pl[4][3] = 0.0 -pl[4][4] = 0.0 -pl[4][5] = 0.0 -pl[4][6] = -0.042113747 -pl[4][7] = -0.08356427 -pl[4][8] = -0.08183474 -pl[4][9] = -0.15345752 -pl[4][10] = -0.06841596 -pl[4][11] = -0.24115087 -pl[4][12] = -0.29244563 -pl[4][13] = -0.3437404 -pl[4][14] = -0.20841992 -pl[5][0] = 0.0 -pl[5][1] = -0.05814532 -pl[5][2] = -0.04513331 -pl[5][3] = -0.022566656 -pl[5][4] = 0.0 -pl[5][5] = 0.0 -pl[5][6] = 0.0 -pl[5][7] = -0.032269493 -pl[5][8] = -0.055353288 -pl[5][9] = -0.10216274 -pl[5][10] = -0.05381486 -pl[5][11] = -0.18985608 -pl[5][12] = -0.24115086 -pl[5][13] = -0.29244563 -pl[5][14] = -0.17958842 -pl[6][0] = 0.0 -pl[6][1] = -0.040194526 -pl[6][2] = -0.06450388 -pl[6][3] = -0.043002583 -pl[6][4] = -0.021501292 -pl[6][5] = 0.0 -pl[6][6] = 0.0 -pl[6][7] = 0.0 -pl[6][8] = -0.066330016 -pl[6][9] = -0.073113225 -pl[6][10] = -0.04765781 -pl[6][11] = -0.14876442 -pl[6][12] = -0.20511504 -pl[6][13] = -0.26146567 -pl[6][14] = -0.10682573 -pl[7][0] = 0.0 -pl[7][1] = -0.07608842 -pl[7][2] = -0.069873534 -pl[7][3] = -0.04730688 -pl[7][4] = -0.024740225 -pl[7][5] = -0.0021735686 -pl[7][6] = 0.0 -pl[7][7] = 0.0 -pl[7][8] = 0.0 -pl[7][9] = -0.018598476 -pl[7][10] = -0.030110732 -pl[7][11] = -0.106291816 -pl[7][12] = -0.15758659 -pl[7][13] = -0.20888136 -pl[7][14] = -0.12787816 -pl[8][0] = 0.0 -pl[8][1] = -0.08318254 -pl[8][2] = -0.06289519 -pl[8][3] = -0.047171395 -pl[8][4] = -0.031447597 -pl[8][5] = -0.015723798 -pl[8][6] = -0.0021494746 -pl[8][7] = 0.0 -pl[8][8] = 0.0 -pl[8][9] = 0.0 -pl[8][10] = -0.014698882 -pl[8][11] = -0.12326215 -pl[8][12] = -0.19194657 -pl[8][13] = -0.26063097 -pl[8][14] = -0.06691221 -pl[9][0] = 0.0 -pl[9][1] = -0.10338253 -pl[9][2] = -0.10464167 -pl[9][3] = -0.082075015 -pl[9][4] = -0.05950836 -pl[9][5] = -0.036941703 -pl[9][6] = 0.0 -pl[9][7] = -0.012201479 -pl[9][8] = 0.0 -pl[9][9] = 0.0 -pl[9][10] = 0.0 -pl[9][11] = -0.03639857 -pl[9][12] = -0.08769334 -pl[9][13] = -0.1389881 -pl[9][14] = -0.0852123 -pl[10][0] = 0.0 -pl[10][1] = -0.11613673 -pl[10][2] = -0.035999577 -pl[10][3] = -0.029772816 -pl[10][4] = -0.023546053 -pl[10][5] = -0.017319292 -pl[10][6] = -0.0057317354 -pl[10][7] = -0.011092531 -pl[10][8] = -0.020143617 -pl[10][9] = 0.0 -pl[10][10] = 0.0 -pl[10][11] = 0.0 -pl[10][12] = -0.017717246 -pl[10][13] = -0.035434492 -pl[10][14] = -0.010797325 -pl[11][0] = 0.0 -pl[11][1] = -0.1344459 -pl[11][2] = -0.13636647 -pl[11][3] = -0.11379981 -pl[11][4] = -0.09123316 -pl[11][5] = -0.0686665 -pl[11][6] = 0.0 -pl[11][7] = -0.04392628 -pl[11][8] = -0.031063374 -pl[11][9] = -0.009158145 -pl[11][10] = 0.0 -pl[11][11] = 0.0 -pl[11][12] = 0.0 -pl[11][13] = -0.05129477 -pl[11][14] = -0.05766299 -pl[12][0] = 0.0 -pl[12][1] = -0.15382768 -pl[12][2] = -0.15893313 -pl[12][3] = -0.13636647 -pl[12][4] = -0.11379981 -pl[12][5] = -0.09123316 -pl[12][6] = 0.0 -pl[12][7] = -0.06649294 -pl[12][8] = -0.050445147 -pl[12][9] = -0.0317248 -pl[12][10] = -0.040165026 -pl[12][11] = 0.0 -pl[12][12] = 0.0 -pl[12][13] = 0.0 -pl[12][14] = -0.028831495 -pl[13][0] = 0.0 -pl[13][1] = -0.17320946 -pl[13][2] = -0.1814998 -pl[13][3] = -0.15893313 -pl[13][4] = -0.13636647 -pl[13][5] = -0.11379981 -pl[13][6] = 0.0 -pl[13][7] = -0.08905959 -pl[13][8] = -0.069826916 -pl[13][9] = -0.054291457 -pl[13][10] = -0.08033005 -pl[13][11] = -0.022566656 -pl[13][12] = 0.0 -pl[13][13] = 0.0 -pl[13][14] = 0.0 -pl[14][0] = 0.0 -pl[14][1] = -0.27354294 -pl[14][2] = 0.009959197 -pl[14][3] = -1.7022714E-4 -pl[14][4] = -0.010299649 -pl[14][5] = -0.020429071 -pl[14][6] = -0.08399554 -pl[14][7] = -0.0144728385 -pl[14][8] = -0.11811297 -pl[14][9] = 0.021364588 -pl[14][10] = -0.050320618 -pl[14][11] = 0.020258844 -pl[14][12] = 0.010129422 -pl[14][13] = 0.0 -pl[14][14] = 0.0 -lab[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.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, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0] -lab[0][1] = [-100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.0857121, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0] -lab[0][2] = [-100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.060610943, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.09019457, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0] -lab[0][3] = [-100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.059856206, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.088372804, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0] -lab[0][4] = [-100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.08843574, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.10066992, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0] -lab[0][5] = [-100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.07532123, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.09154862, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0] -lab[0][6] = [-100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, 0.14257567, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.035747826, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, 0.04456647, -100.0] -lab[0][7] = [-100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.08668655, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.07716806, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0] -lab[0][8] = [-100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.048678666, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0] -lab[0][9] = [-100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.11443109, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.075755596, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0] -lab[0][10] = [-100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.064376086, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0] -lab[0][11] = [-100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.067867786, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.10572456, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0] -lab[0][12] = [-100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.07676454, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.07319089, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0] -lab[0][13] = [-100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.15070356, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.092133135, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0] -lab[0][14] = [-100.0, -100.0, -100.0, -100.0, 0.010659548, -100.0, -100.0, -100.0, -100.0, 0.021760488, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, 0.031423494, -100.0, -0.06268892, -100.0, -100.0, -100.0, -100.0, -100.0] -lab[1][0] = [-100.0, -100.0, -100.0, -100.0, -0.0072993548, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0] -lab[1][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.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, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0] -lab[1][2] = [-100.0, -100.0, -100.0, -100.0, 0.007805228, 0.06354494, -100.0, -100.0, -0.027950497, -100.0, 0.008368777, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, 0.0017291368, -100.0, -100.0, -100.0, 0.012703567, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0] -lab[1][3] = [-100.0, -100.0, -100.0, -100.0, -0.011061878, -0.033676945, -100.0, -100.0, -0.03869218, -100.0, 0.014225116, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, 0.002365287, -100.0, -100.0, -100.0, 0.0063459743, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0] -lab[1][4] = [-100.0, -100.0, -100.0, -100.0, -0.0057480163, -0.032733124, -100.0, -100.0, -0.018860167, -100.0, 0.007058848, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.0018841489, -100.0, -100.0, -100.0, -7.932577E-4, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0] -lab[1][5] = [-100.0, -100.0, -100.0, -100.0, -0.008187501, -0.07466402, -100.0, -100.0, -0.04258529, -100.0, 0.012807902, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.004619921, -100.0, -100.0, -100.0, 0.04837003, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0] -lab[1][6] = [-100.0, -100.0, -100.0, -100.0, -0.0072772917, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0] -lab[1][7] = [-100.0, -100.0, -100.0, -100.0, -0.0061553996, -0.07721132, -100.0, -100.0, -0.025096273, -100.0, -0.0038240058, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, 0.003359705, -100.0, -100.0, -100.0, 0.124412775, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0] -lab[1][8] = [-100.0, -100.0, -100.0, -100.0, -0.055956498, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0] -lab[1][9] = [-100.0, -100.0, -100.0, -100.0, -0.0029725265, -0.096099176, -100.0, -100.0, -0.03457125, -100.0, 0.013646577, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.002417894, -100.0, -100.0, -100.0, 0.048483256, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0] -lab[1][10] = [-100.0, -100.0, -100.0, -100.0, -0.019577898, -0.05434969, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, 0.011361387, -100.0, -0.016742414, -100.0, -100.0, -100.0, 0.0030374874, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0] -lab[1][11] = [-100.0, -100.0, -100.0, -100.0, -0.0022678282, -0.05511328, -100.0, -100.0, -0.01873274, -100.0, 0.0031329177, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.006130168, -100.0, -100.0, -100.0, 0.01606226, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0] -lab[1][12] = [-100.0, -100.0, -100.0, -100.0, 0.0066373865, -0.085802294, -100.0, -100.0, -0.017907545, -100.0, 0.008771209, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.0022111083, -100.0, -100.0, -100.0, -0.0019399584, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0] -lab[1][13] = [-100.0, -100.0, -100.0, -100.0, -0.0061764345, -0.08351106, -100.0, -100.0, -0.013618027, -100.0, -0.0072948383, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.009102309, -100.0, -100.0, -100.0, 0.05033239, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0] -lab[1][14] = [-100.0, -100.0, -100.0, -100.0, -100.0, -0.051086202, -100.0, -100.0, -100.0, -100.0, -100.0, -0.15393955, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.012258048] -lab[2][0] = [-100.0, -100.0, -100.0, -100.0, 0.031287532, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0] -lab[2][1] = [-100.0, -100.0, -100.0, -100.0, 0.019715436, 0.01835772, -100.0, -100.0, -0.021147477, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.021325154, -100.0, -100.0, -100.0, -0.011986047, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.025321336, -100.0, -100.0, -100.0] -lab[2][2] = [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.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, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0] -lab[2][3] = [-100.0, -100.0, -100.0, -100.0, -0.008683903, -0.0071144216, -100.0, -0.07223273, 0.007157893, -100.0, 0.0109011335, -100.0, -0.0032681033, -100.0, -100.0, -0.025956124, -100.0, -0.00907862, -100.0, -100.0, -100.0, -0.005509577, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, 0.007406844, -0.0073494264] -lab[2][4] = [-100.0, -100.0, -100.0, -100.0, -0.017639821, -0.07690126, -100.0, -7.0552714E-4, -0.043969035, -100.0, 0.011751435, -100.0, -0.002466971, -100.0, -100.0, -0.026199987, -100.0, -0.013000479, -100.0, -100.0, -100.0, 0.0011172746, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, 0.004351847, 0.009639561] -lab[2][5] = [-100.0, -100.0, -100.0, -100.0, -0.03488801, -0.10307334, -100.0, -0.0684557, 0.020158656, -100.0, -0.006975678, -100.0, -0.012064556, -100.0, -100.0, -0.023857245, -100.0, -0.013141723, -100.0, -100.0, -100.0, 0.0014515971, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, 0.007406844, -0.012931901] -lab[2][6] = [-100.0, -100.0, -100.0, -100.0, 0.029374115, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.03291245, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0] -lab[2][7] = [-100.0, -100.0, -100.0, -100.0, -0.06484228, -0.08482167, -100.0, -0.07136143, 0.052072287, -100.0, -0.045210756, -100.0, 0.0022105137, -100.0, -100.0, -0.031402368, -100.0, -0.0041569127, -100.0, -100.0, -100.0, -0.019917594, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, 0.011107417, -0.0064372392] -lab[2][8] = [-100.0, -100.0, -100.0, -100.0, -0.010947768, -0.16124275, -100.0, -100.0, -0.020897083, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.00955688, -100.0, -100.0, -100.0, 0.017641533, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.01904033, -100.0, -100.0, -100.0] -lab[2][9] = [-100.0, -100.0, -100.0, -100.0, 0.11203786, 0.08516422, -100.0, -0.067602776, 0.017576952, -100.0, 0.0030263364, -100.0, -7.4397936E-4, -100.0, -100.0, -0.029012637, -100.0, -0.017234312, -100.0, -100.0, -100.0, -0.029723631, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, 0.01241862, -0.013692742] -lab[2][10] = [-100.0, -100.0, -100.0, -100.0, 0.061739136, -0.06816518, -0.017635567, 0.03411534, 0.027354993, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.0042059096, -100.0, -100.0, -100.0, -0.046784803, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0] -lab[2][11] = [-100.0, -100.0, -100.0, -100.0, 0.0780552, 0.09361959, -100.0, -0.04189497, 0.054181423, -100.0, 0.014132376, -100.0, -0.02349671, -100.0, -100.0, -0.030720538, -100.0, -0.016635802, -100.0, -100.0, -100.0, -0.04262755, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, 0.0134480735, -0.009904164] -lab[2][12] = [-100.0, -100.0, -100.0, -100.0, 0.050173625, 0.12472234, -100.0, 0.02470325, -0.0433001, -100.0, 0.025236022, -100.0, -0.017199075, -100.0, -100.0, -0.036560286, -100.0, -0.0158622, -100.0, -100.0, -100.0, -0.049050692, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, 0.016003763, -0.0027452079] -lab[2][13] = [-100.0, -100.0, -100.0, -100.0, 0.094317816, 0.09077047, -100.0, -0.04724109, -0.014309814, -100.0, -6.103539E-4, -100.0, -0.007984497, -100.0, -100.0, -0.03456169, -100.0, -0.01148505, -100.0, -100.0, -100.0, -0.0407275, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, 0.0090789925, -0.00904469] -lab[2][14] = [-100.0, -100.0, -100.0, -100.0, 0.13055271, 0.00994876, -100.0, 0.027116202, -0.006811875, -100.0, -100.0, -0.03950805, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, 0.012288794, 0.011942935, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.008141532] -lab[3][0] = [-100.0, -100.0, -100.0, -100.0, 0.015727764, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0] -lab[3][1] = [-100.0, -100.0, -100.0, -100.0, 0.026589936, 0.015837692, -100.0, -100.0, -0.018502066, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.013287211, -100.0, -100.0, -100.0, -0.011986047, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.019401088, -100.0, -100.0, -100.0] -lab[3][2] = [-100.0, -100.0, -100.0, -100.0, -0.07458202, -0.001280698, -100.0, -0.007731626, -0.0056997146, -100.0, -0.014050994, -100.0, -0.020443644, -100.0, -100.0, -0.0304739, -100.0, -0.06522928, -100.0, -100.0, -100.0, -0.009457436, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.004204633, -0.0056973123] -lab[3][3] = [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.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, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0] -lab[3][4] = [-100.0, -100.0, -100.0, -100.0, -0.090102285, -0.08245421, -100.0, 0.20142533, 0.1338391, -100.0, -0.0064666253, -100.0, 0.004834483, -100.0, -100.0, -0.013569326, -100.0, -0.01595074, -100.0, -100.0, -100.0, -0.026188968, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.0026644845, -0.008290936] -lab[3][5] = [-100.0, -100.0, -100.0, -100.0, -0.048254117, -0.11579309, -100.0, 0.1175178, 0.11143502, -100.0, -0.004636286, -100.0, 1.8035388E-4, -100.0, -100.0, -0.014182787, -100.0, -0.01650513, -100.0, -100.0, -100.0, -0.007539835, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, 0.0017236789, -0.0094553] -lab[3][6] = [-100.0, -100.0, -100.0, -100.0, 0.025279988, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.010607917, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0] -lab[3][7] = [-100.0, -100.0, -100.0, -100.0, 0.015750844, -0.13357572, -100.0, -0.028501447, -0.044795267, -100.0, -0.043282006, -100.0, 0.0054771937, -100.0, -100.0, -0.017991487, -100.0, -0.009471957, -100.0, -100.0, -100.0, -0.027596768, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, 0.006738336, -0.0046989387] -lab[3][8] = [-100.0, -100.0, -100.0, -100.0, 0.04237008, -0.105790615, -100.0, -100.0, -1.0734936E-4, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, 0.005038883, -100.0, -100.0, -100.0, -0.023716997, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.022824557, -100.0, -100.0, -100.0] -lab[3][9] = [-100.0, -100.0, -100.0, -100.0, 0.08682765, -0.007630133, -100.0, 0.058125526, -0.0100971535, -100.0, -0.010686963, -100.0, -0.004728324, -100.0, -100.0, -0.021554107, -100.0, -0.023323614, -100.0, -100.0, -100.0, -0.040496103, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, 0.0063773906, -0.00847455] -lab[3][10] = [-100.0, -100.0, -100.0, -100.0, 0.11950284, -0.036674343, -0.020355824, 0.049630567, -0.018184561, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.010001851, -100.0, -100.0, -100.0, -0.024856072, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0] -lab[3][11] = [-100.0, -100.0, -100.0, -100.0, 0.17998444, -0.045073137, -100.0, -0.011935525, -0.12302958, -100.0, -8.2165695E-4, -100.0, -0.015568759, -100.0, -100.0, -0.023021586, -100.0, -0.021753242, -100.0, -100.0, -100.0, -0.04285603, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, 0.0020304294, -0.0046989387] -lab[3][12] = [-100.0, -100.0, -100.0, -100.0, 0.19373284, 0.035355195, -100.0, 0.061362393, -0.13824204, -100.0, 0.01226894, -100.0, -0.011150414, -100.0, -100.0, -0.023918848, -100.0, -0.013573138, -100.0, -100.0, -100.0, -0.04558915, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, 0.0111303255, -0.0065263407] -lab[3][13] = [-100.0, -100.0, -100.0, -100.0, 0.22340338, -0.010336123, -100.0, -0.004239533, -0.092604324, -100.0, -0.009156614, -100.0, -0.0033510108, -100.0, -100.0, -0.021037031, -100.0, -0.0128913205, -100.0, -100.0, -100.0, -0.03615597, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, 0.0030377628, -0.0064372392] -lab[3][14] = [-100.0, -100.0, -100.0, -100.0, 0.09862638, -0.003327651, -100.0, 0.010758149, -0.02587586, -100.0, -100.0, -0.09787384, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, 0.0065550525, 0.02006538, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.008141532] -lab[4][0] = [-100.0, -100.0, -100.0, -100.0, 6.7530514E-4, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0] -lab[4][1] = [-100.0, -100.0, -100.0, -100.0, 0.03028285, 0.009687788, -100.0, -100.0, -0.026619883, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.020499956, -100.0, -100.0, -100.0, -0.012858687, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.018374441, -100.0, -100.0, -100.0] -lab[4][2] = [-100.0, -100.0, -100.0, -100.0, -0.030117743, -0.0038273223, -100.0, -0.007731626, 0.0012443475, -100.0, -0.018306747, -100.0, -0.024662271, -100.0, -100.0, -0.025412116, -100.0, -0.060929243, -100.0, -100.0, -100.0, -0.0025727116, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.016990807, 0.0040139747] -lab[4][3] = [-100.0, -100.0, -100.0, -100.0, 0.04373014, -0.017481847, -100.0, -0.007979904, -4.2995065E-4, -100.0, -0.011803215, -100.0, -0.020359626, -100.0, -100.0, -0.015568075, -100.0, -0.06102489, -100.0, -100.0, -100.0, -0.004197329, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.032539077, -0.0020389904] -lab[4][4] = [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.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, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0] -lab[4][5] = [-100.0, -100.0, -100.0, -100.0, -0.09336954, -0.11855941, -100.0, 0.08626966, 0.23081473, -100.0, -0.012153118, -100.0, 0.0037080436, -100.0, -100.0, -0.019139193, -100.0, -0.01388609, -100.0, -100.0, -100.0, -0.005913306, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, 0.0017236789, -0.0064372392] -lab[4][6] = [-100.0, -100.0, -100.0, -100.0, 0.042744786, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.02801525, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0] -lab[4][7] = [-100.0, -100.0, -100.0, -100.0, -0.010518864, -0.13629837, -100.0, -0.052703075, 0.038320504, -100.0, -0.03710283, -100.0, 0.006216524, -100.0, -100.0, -0.015964117, -100.0, -0.008941913, -100.0, -100.0, -100.0, -0.02213252, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, 0.006738336, -0.0046989387] -lab[4][8] = [-100.0, -100.0, -100.0, -100.0, 0.051309794, -0.09528896, -100.0, -100.0, 0.016631264, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.01614249, -100.0, -100.0, -100.0, -0.008856785, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.020097349, -100.0, -100.0, -100.0] -lab[4][9] = [-100.0, -100.0, -100.0, -100.0, 0.058439884, -0.010352795, -100.0, 0.030757695, 0.0748779, -100.0, -0.0067891935, -100.0, 0.0015209867, -100.0, -100.0, -0.020485468, -100.0, -0.022793567, -100.0, -100.0, -100.0, -0.032615256, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, 0.0063773906, -0.00847455] -lab[4][10] = [-100.0, -100.0, -100.0, -100.0, 0.11859293, -0.040470853, -0.014690354, 0.02903986, -0.011157115, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.021043513, -100.0, -100.0, -100.0, -0.031460863, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0] -lab[4][11] = [-100.0, -100.0, -100.0, -100.0, 0.15236738, -0.047795787, -100.0, -0.03789837, -0.039913785, -100.0, 0.0011355523, -100.0, -0.006762338, -100.0, -100.0, -0.024428759, -100.0, -0.021223197, -100.0, -100.0, -100.0, -0.03739178, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, 0.007406844, -0.0046989387] -lab[4][12] = [-100.0, -100.0, -100.0, -100.0, 0.17069574, 0.011971382, -100.0, 0.04367266, -0.061951343, -100.0, 0.0017905473, -100.0, -0.0069729253, -100.0, -100.0, -0.017813757, -100.0, -0.016009092, -100.0, -100.0, -100.0, -0.0404248, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, 0.004485974, -0.0065263407] -lab[4][13] = [-100.0, -100.0, -100.0, -100.0, 0.24953745, -0.0031109904, -100.0, -0.036849722, -0.01940545, -100.0, -0.014683241, -100.0, 0.0021319445, -100.0, -100.0, -0.019291952, -100.0, -0.020483337, -100.0, -100.0, -100.0, -0.03292536, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, 0.0030377628, -0.007985065] -lab[4][14] = [-100.0, -100.0, -100.0, -100.0, 0.07949358, -0.009257822, -100.0, 0.009853234, -0.022547951, -100.0, -100.0, -0.10290189, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, 0.008654622, 0.030426882, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.01004408] -lab[5][0] = [-100.0, -100.0, -100.0, -100.0, 0.007786015, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0] -lab[5][1] = [-100.0, -100.0, -100.0, -100.0, 0.02771602, 0.028148944, -100.0, -100.0, -0.018647132, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.020499956, -100.0, -100.0, -100.0, -0.011986047, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.019807553, -100.0, -100.0, -100.0] -lab[5][2] = [-100.0, -100.0, -100.0, -100.0, -0.034447014, -0.0032718359, -100.0, -0.007979904, -0.008797215, -100.0, -0.015350549, -100.0, -0.021705361, -100.0, -100.0, -0.025106095, -100.0, -0.06388942, -100.0, -100.0, -100.0, -0.008526931, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.012114166, -0.0025690359] -lab[5][3] = [-100.0, -100.0, -100.0, -100.0, 0.02968784, -9.501487E-4, -100.0, -0.007731626, -0.001721808, -100.0, -0.012374148, -100.0, -0.020352686, -100.0, -100.0, -0.02302433, -100.0, -0.05969121, -100.0, -100.0, -100.0, -0.0029919485, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.021506028, 9.690776E-4] -lab[5][4] = [-100.0, -100.0, -100.0, -100.0, 0.0413489, -0.0037748502, -100.0, -0.009773591, 0.015026659, -100.0, -0.003453567, -100.0, -0.01806766, -100.0, -100.0, -0.015624217, -100.0, -0.06542269, -100.0, -100.0, -100.0, -0.011077607, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.015954167, -0.00413757] -lab[5][5] = [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.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, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0] -lab[5][6] = [-100.0, -100.0, -100.0, -100.0, 0.009874955, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, 0.0063589364, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0] -lab[5][7] = [-100.0, -100.0, -100.0, -100.0, -0.013725653, -0.09517634, -100.0, -0.032420676, 0.056893967, -100.0, -0.035141923, -100.0, 0.01755903, -100.0, -100.0, -0.025872728, -100.0, -0.0060505494, -100.0, -100.0, -100.0, -0.029148407, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, 0.006738336, -0.0057169683] -lab[5][8] = [-100.0, -100.0, -100.0, -100.0, 0.043727666, -0.13072446, -100.0, -100.0, 0.010142995, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.01695753, -100.0, -100.0, -100.0, -0.0043309685, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.021955507, -100.0, -100.0, -100.0] -lab[5][9] = [-100.0, -100.0, -100.0, -100.0, 0.046453465, 0.0113611175, -100.0, 0.038369372, 0.10987423, -100.0, -0.014727177, -100.0, 0.0025815582, -100.0, -100.0, -0.023696663, -100.0, -0.020068578, -100.0, -100.0, -100.0, -0.04906127, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, 0.0063773906, -0.006955822] -lab[5][10] = [-100.0, -100.0, -100.0, -100.0, 0.11681521, -0.041773185, -0.014802043, 0.02339334, 0.0023333384, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.025621016, -100.0, -100.0, -100.0, -0.035384513, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0] -lab[5][11] = [-100.0, -100.0, -100.0, -100.0, 0.12570891, -0.016102754, -100.0, -0.024745505, -0.0016095638, -100.0, -0.0036058084, -100.0, -0.009599689, -100.0, -100.0, -0.025307972, -100.0, -0.023301505, -100.0, -100.0, -100.0, -0.051421203, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, 0.007406844, -0.0046989387] -lab[5][12] = [-100.0, -100.0, -100.0, -100.0, 0.14795728, 0.02616579, -100.0, 0.066588216, -0.0341523, -100.0, -9.7153184E-5, -100.0, -0.0046272306, -100.0, -100.0, -0.022008631, -100.0, -0.015033025, -100.0, -100.0, -100.0, -0.055872314, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, 0.009962534, -0.0065263407] -lab[5][13] = [-100.0, -100.0, -100.0, -100.0, 0.22414888, 0.0060834433, -100.0, -0.008835591, 0.01732592, -100.0, -0.018156439, -100.0, 8.6487085E-4, -100.0, -100.0, -0.023486823, -100.0, -0.020483337, -100.0, -100.0, -100.0, -0.04710021, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, 0.0030377628, -0.0064372392] -lab[5][14] = [-100.0, -100.0, -100.0, -100.0, 0.08878266, -0.009180344, -100.0, 0.006302624, -0.018893935, -100.0, -100.0, -0.09531936, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, 0.010326847, 0.029544532, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.008141532] -lab[6][0] = [-100.0, -100.0, -100.0, -100.0, 0.023033261, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0] -lab[6][1] = [-100.0, -100.0, -100.0, -100.0, 0.20864604, -0.05089548, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.03976683, -100.0, -100.0, -100.0, -100.0, -100.0, -0.02282291, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0] -lab[6][2] = [-100.0, -100.0, -100.0, -100.0, 0.12736312, -100.0, -0.038424324, -100.0, -100.0, -100.0, 0.13986121, -100.0, -0.012428051, -100.0, -100.0, -0.05530557, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, 0.0043633413, -100.0] -lab[6][3] = [-100.0, -100.0, -100.0, -100.0, -0.0046778144, -100.0, 0.1888846, -100.0, -100.0, -100.0, -0.0020437245, -100.0, -0.013033396, -100.0, -100.0, -0.056855615, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.0037650405, -100.0] -lab[6][4] = [-100.0, -100.0, -100.0, -100.0, 0.007994813, -100.0, 0.1550787, -100.0, -100.0, -100.0, -0.0059514716, -100.0, 0.011946373, -100.0, -100.0, -0.06274183, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.0023011658, -100.0] -lab[6][5] = [-100.0, -100.0, -100.0, -100.0, 0.0034305025, -100.0, 0.12060462, -100.0, -100.0, -100.0, 6.3503464E-4, -100.0, 0.0068051666, -100.0, -100.0, -0.051002603, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.0055534686, -100.0] -lab[6][6] = [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.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, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0] -lab[6][7] = [-100.0, -100.0, -100.0, -100.0, 0.024960238, -100.0, 0.05161933, -100.0, -100.0, -100.0, 0.21018952, -100.0, 0.022909997, -100.0, -100.0, 0.0025447046, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, 0.0024014926, -100.0] -lab[6][8] = [-100.0, -100.0, -100.0, -100.0, 0.034076728, 0.13676485, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.009304508, -100.0, -100.0, -100.0, -100.0, -100.0, 7.967291E-4, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0] -lab[6][9] = [-100.0, -100.0, -100.0, -100.0, -0.07555324, -100.0, 0.09267018, -100.0, -100.0, -100.0, 0.04892666, -100.0, 0.038491517, -100.0, -100.0, 0.027027639, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, 0.009365095, -100.0] -lab[6][10] = [-100.0, -100.0, -100.0, -100.0, 0.017195653, 0.0024830988, 0.03209228, -100.0, -100.0, -100.0, -0.04074017, -100.0, -0.03358294, -100.0, -100.0, 0.06644424, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0] -lab[6][11] = [-100.0, -100.0, -100.0, -100.0, 0.013968601, -100.0, 0.04216479, -100.0, -100.0, -100.0, 0.047949035, -100.0, 0.039137743, -100.0, -100.0, -0.01925468, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, 0.016810946, -100.0] -lab[6][12] = [-100.0, -100.0, -100.0, -100.0, 0.014872201, -100.0, 0.04419685, -100.0, -100.0, -100.0, 0.12845795, -100.0, 0.0055937013, -100.0, -100.0, -0.028737731, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, 0.006175855, -100.0] -lab[6][13] = [-100.0, -100.0, -100.0, -100.0, -0.056315172, -100.0, 0.04807967, -100.0, -100.0, -100.0, 0.118796006, -100.0, 0.06304423, -100.0, -100.0, -0.0020268823, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, 0.011274287, -100.0] -lab[6][14] = [-100.0, -100.0, -100.0, -100.0, 0.037810247, 0.069284454, 0.010218109, -100.0, -100.0, -100.0, 0.042182103, -0.016194848, 0.0046266606, -100.0, 0.018700384, 0.024961736, -100.0, -100.0, -100.0, -100.0, 0.019210849, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, 0.019267486, -0.008150559] -lab[7][0] = [-100.0, -100.0, -100.0, -100.0, 0.0020415904, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0] -lab[7][1] = [-100.0, -100.0, -100.0, -100.0, 0.048857834, 0.024895584, -100.0, -100.0, -0.016711766, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.020600632, -100.0, -100.0, -100.0, -0.0146774035, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.019822594, -100.0, -100.0, -100.0] -lab[7][2] = [-100.0, -100.0, -100.0, -100.0, -0.06337702, -0.0052916403, -100.0, -0.007072131, -0.005676318, -100.0, -0.012953629, -100.0, -0.019245291, -100.0, -100.0, -0.028318094, -100.0, -0.067467794, -100.0, -100.0, -100.0, -0.0020377673, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.009418382, -0.00918054] -lab[7][3] = [-100.0, -100.0, -100.0, -100.0, -0.008698676, -0.0031118554, -100.0, -0.00723242, -0.007731178, -100.0, -0.013173097, -100.0, -0.019161275, -100.0, -100.0, -0.024943981, -100.0, -0.060471296, -100.0, -100.0, -100.0, -0.0037860493, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.020058166, -0.00875127] -lab[7][4] = [-100.0, -100.0, -100.0, -100.0, 0.002013328, 1.0998105E-4, -100.0, -0.01068812, 0.014536993, -100.0, -0.016048206, -100.0, -0.018137963, -100.0, -100.0, -0.01768755, -100.0, -0.06665342, -100.0, -100.0, -100.0, -0.01007092, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.012615616, -0.009968513] -lab[7][5] = [-100.0, -100.0, -100.0, -100.0, 0.0070634056, 0.0023023428, -100.0, -0.008646155, 0.0076258294, -100.0, -0.0068513555, -100.0, -0.016451048, -100.0, -100.0, -0.023988038, -100.0, -0.06636638, -100.0, -100.0, -100.0, -0.004222147, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.0097232275, -0.0076227635] -lab[7][6] = [-100.0, -100.0, -100.0, -100.0, -0.031167299, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.027433395, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0] -lab[7][7] = [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.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, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0] -lab[7][8] = [-100.0, -100.0, -100.0, -100.0, 0.0049104257, -0.14811467, -100.0, -100.0, -0.0015818988, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.018902455, -100.0, -100.0, -100.0, 0.0035807902, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.007338235, -100.0, -100.0, -100.0] -lab[7][9] = [-100.0, -100.0, -100.0, -100.0, 0.06587316, 0.14371991, -100.0, -0.049351946, -0.04048246, -100.0, 0.011947182, -100.0, -6.2810676E-4, -100.0, -100.0, -0.01602333, -100.0, -0.022502404, -100.0, -100.0, -100.0, -0.053128764, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, 0.020960134, -0.0073063895] -lab[7][10] = [-100.0, -100.0, -100.0, -100.0, 0.009259071, -0.076612204, -0.020510068, 0.044047967, 0.0503408, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.017946027, -100.0, -100.0, -100.0, -0.036746453, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0] -lab[7][11] = [-100.0, -100.0, -100.0, -100.0, 0.037588913, 0.10905088, -100.0, -0.030460993, 0.003721512, -100.0, 0.006805576, -100.0, -0.012384878, -100.0, -100.0, -0.014599603, -100.0, -0.026002733, -100.0, -100.0, -100.0, -0.07514333, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, 0.020023372, -0.005568089] -lab[7][12] = [-100.0, -100.0, -100.0, -100.0, -0.003176908, 0.1564925, -100.0, 0.08989608, -0.021242943, -100.0, 0.010067976, -100.0, -0.013922423, -100.0, -100.0, -0.02416636, -100.0, -0.024662182, -100.0, -100.0, -100.0, -0.07240346, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, 0.023381695, -0.00648179] -lab[7][13] = [-100.0, -100.0, -100.0, -100.0, 0.051657975, 0.13402489, -100.0, 0.020865025, 0.013104109, -100.0, -0.0068195877, -100.0, -0.011332986, -100.0, -100.0, -0.019492686, -100.0, -0.026033364, -100.0, -100.0, -100.0, -0.066130616, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, 0.016456924, -0.0073063895] -lab[7][14] = [-100.0, -100.0, -100.0, -100.0, 0.08149053, -3.2838946E-4, -100.0, 0.025150903, -0.01035606, -100.0, -100.0, -0.0402803, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, 0.01197523, 0.018398318, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.008141532] -lab[8][0] = [-100.0, -100.0, -100.0, -100.0, -0.010298952, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0] -lab[8][1] = [-100.0, -100.0, -100.0, -100.0, 0.07720715, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0] -lab[8][2] = [-100.0, -100.0, -100.0, -100.0, -0.009475322, -0.020047832, -100.0, -100.0, -0.029767666, -100.0, -0.023018487, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.07760017, -100.0, -100.0, -100.0, -0.0069597554, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0] -lab[8][3] = [-100.0, -100.0, -100.0, -100.0, -0.0177695, -0.01584079, -100.0, -100.0, -0.034220427, -100.0, -0.024995474, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.06809402, -100.0, -100.0, -100.0, -0.0069597554, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0] -lab[8][4] = [-100.0, -100.0, -100.0, -100.0, -0.016846146, -0.017320994, -100.0, -100.0, -0.030368356, -100.0, -0.023107952, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.07637689, -100.0, -100.0, -100.0, -0.009199989, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0] -lab[8][5] = [-100.0, -100.0, -100.0, -100.0, -0.019849148, -0.016790282, -100.0, -100.0, -0.0298011, -100.0, -0.026457291, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.06959498, -100.0, -100.0, -100.0, -0.009199989, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0] -lab[8][6] = [-100.0, -100.0, -100.0, -100.0, -0.0316555, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0] -lab[8][7] = [-100.0, -100.0, -100.0, -100.0, -0.03086719, -0.012185813, -100.0, -100.0, -0.028345747, -100.0, -0.031858526, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.080215685, -100.0, -100.0, -100.0, -0.010004969, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0] -lab[8][8] = [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.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, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0] -lab[8][9] = [-100.0, -100.0, -100.0, -100.0, 0.024622455, -0.04244198, -100.0, -100.0, -0.0021945783, -100.0, -0.0017560016, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.01365146, -100.0, -100.0, -100.0, 0.034700513, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0] -lab[8][10] = [-100.0, -100.0, -100.0, -100.0, -0.0067202644, 0.010890665, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, 0.012986096, -100.0, 0.025612151, -100.0, -100.0, -100.0, -0.009904071, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0] -lab[8][11] = [-100.0, -100.0, -100.0, -100.0, 0.0264671, -0.084497094, -100.0, -100.0, 0.011075877, -100.0, -0.008343452, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.017636344, -100.0, -100.0, -100.0, 0.00929617, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0] -lab[8][12] = [-100.0, -100.0, -100.0, -100.0, 0.028509734, -0.105624385, -100.0, -100.0, 0.0039734393, -100.0, -3.0099647E-4, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.009284925, -100.0, -100.0, -100.0, -0.025048574, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0] -lab[8][13] = [-100.0, -100.0, -100.0, -100.0, 0.022118228, -0.066294305, -100.0, -100.0, 0.011478871, -100.0, -0.024278225, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.021096548, -100.0, -100.0, -100.0, 0.037493646, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0] -lab[8][14] = [-100.0, -100.0, -100.0, -100.0, -100.0, -0.016817383, -100.0, -100.0, -100.0, -100.0, -100.0, -0.13833265, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.012782506] -lab[9][0] = [-100.0, -100.0, -100.0, -100.0, 4.385016E-4, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0] -lab[9][1] = [-100.0, -100.0, -100.0, -100.0, 0.030603452, 0.019662967, -100.0, -100.0, -0.026710683, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.020499956, -100.0, -100.0, -100.0, -0.011986047, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.019753616, -100.0, -100.0, -100.0] -lab[9][2] = [-100.0, -100.0, -100.0, -100.0, -0.060118802, -0.00852822, -100.0, -0.0085925935, 0.0017758107, -100.0, -0.0132168485, -100.0, -0.022021595, -100.0, -100.0, -0.026063943, -100.0, -0.06923627, -100.0, -100.0, -100.0, -0.0060219583, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.013042967, -0.011748734] -lab[9][3] = [-100.0, -100.0, -100.0, -100.0, -0.005694381, -0.0072280634, -100.0, -0.010656882, 9.6388E-4, -100.0, -0.010890223, -100.0, -0.020138862, -100.0, -100.0, -0.02506855, -100.0, -0.06293549, -100.0, -100.0, -100.0, -0.0031594145, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.022359546, -0.012946464] -lab[9][4] = [-100.0, -100.0, -100.0, -100.0, 0.012697235, -0.0040062284, -100.0, -0.012450568, 0.023232052, -100.0, -0.01436099, -100.0, -0.019115552, -100.0, -100.0, -0.017668435, -100.0, -0.06911761, -100.0, -100.0, -100.0, -0.011040136, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.014916998, -0.012959486] -lab[9][5] = [-100.0, -100.0, -100.0, -100.0, 0.003959284, -0.005127607, -100.0, -0.012003781, 0.02289455, -100.0, -0.0071145743, -100.0, -0.019540751, -100.0, -100.0, -0.02506855, -100.0, -0.06379605, -100.0, -100.0, -100.0, -0.00631301, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.017563405, -0.014828853] -lab[9][6] = [-100.0, -100.0, -100.0, -100.0, -0.019865207, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.020328699, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0] -lab[9][7] = [-100.0, -100.0, -100.0, -100.0, -0.033953886, -0.0018636595, -100.0, -0.007731626, -3.6249845E-4, -100.0, -0.007401729, -100.0, -0.02232414, -100.0, -100.0, -0.03200184, -100.0, -0.073828295, -100.0, -100.0, -100.0, -0.0077059413, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.012270593, -0.011864145] -lab[9][8] = [-100.0, -100.0, -100.0, -100.0, 0.03954214, -0.0033379826, -100.0, -100.0, -0.0149728265, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.022576116, -100.0, -100.0, -100.0, -0.016223626, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.013277006, -100.0, -100.0, -100.0] -lab[9][9] = [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.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, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0] -lab[9][10] = [-100.0, -100.0, -100.0, -100.0, 0.20875499, -0.06758808, -0.01329644, 0.021231992, 0.074203275, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.010264425, -100.0, -100.0, -100.0, -0.040378038, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0] -lab[9][11] = [-100.0, -100.0, -100.0, -100.0, 0.11447072, 0.016000146, -100.0, 0.12571457, 0.10625105, -100.0, 0.004082323, -100.0, -0.0062507754, -100.0, -100.0, -0.01677507, -100.0, -0.018420275, -100.0, -100.0, -100.0, -0.058186896, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, 0.0071156574, 0.002163982] -lab[9][12] = [-100.0, -100.0, -100.0, -100.0, 0.032018445, 0.024125308, -100.0, 0.2455853, 0.056142658, -100.0, -0.0011152485, -100.0, -0.002792284, -100.0, -100.0, -0.02547044, -100.0, -0.015865061, -100.0, -100.0, -100.0, -0.06419294, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, 0.010473982, -0.00648179] -lab[9][13] = [-100.0, -100.0, -100.0, -100.0, 0.11447777, 6.697993E-4, -100.0, 0.16682132, 0.09476111, -100.0, -0.02744541, -100.0, 0.0057364157, -100.0, -100.0, -0.025195219, -100.0, -0.021623705, -100.0, -100.0, -100.0, -0.056456704, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, 4.941136E-4, -0.00817554] -lab[9][14] = [-100.0, -100.0, -100.0, -100.0, 0.10525579, -0.008929347, -100.0, 0.03029225, -0.01102661, -100.0, -100.0, -0.07904691, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, 0.0047041643, 0.02301877, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.008141532] -lab[10][0] = [-100.0, -100.0, -100.0, -100.0, -9.267228E-4, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0] -lab[10][1] = [-100.0, -100.0, -100.0, -100.0, 0.086413674, 8.654366E-4, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.013165251, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.017005188, -100.0, -100.0, -100.0] -lab[10][2] = [-100.0, -100.0, -100.0, -100.0, -0.022829698, -0.0071389154, -0.029467646, -0.004115135, -0.018250464, -100.0, -0.018737962, -100.0, -0.0094045475, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.0066792443, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0] -lab[10][3] = [-100.0, -100.0, -100.0, -100.0, -0.024376234, -0.0060840566, -0.040475503, -0.0011310256, -0.012411635, -100.0, -0.021031396, -100.0, -0.009896848, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.0076555787, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0] -lab[10][4] = [-100.0, -100.0, -100.0, -100.0, -0.019265706, -0.0060840566, -0.044232056, -0.004807427, -0.018619878, -100.0, -0.013958687, -100.0, -0.010507663, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.0076555787, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0] -lab[10][5] = [-100.0, -100.0, -100.0, -100.0, -0.02919563, -0.0060840566, -0.04374403, -0.002909442, -0.012196044, -100.0, -0.01655533, -100.0, -0.011610778, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.0076555787, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0] -lab[10][6] = [-100.0, -100.0, -100.0, -100.0, -0.014946022, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.026508257, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0] -lab[10][7] = [-100.0, -100.0, -100.0, -100.0, -0.031692307, -0.007922365, -0.023501813, -0.0058935503, -0.021940108, -100.0, -0.027975522, -100.0, -0.011811018, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.008111444, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0] -lab[10][8] = [-100.0, -100.0, -100.0, -100.0, 0.08409503, 0.008447876, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.02651535, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.014948052, -100.0, -100.0, -100.0] -lab[10][9] = [-100.0, -100.0, -100.0, -100.0, -0.03174676, -0.0072506266, -0.025777975, -0.0070578745, -0.023986494, -100.0, -0.019441407, -100.0, -0.011610778, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.0076555787, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0] -lab[10][10] = [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.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, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0] -lab[10][11] = [-100.0, -100.0, -100.0, -100.0, -0.020492751, -0.011677122, -0.014922382, -0.008271219, 0.07524326, -100.0, -0.0102564655, -100.0, -0.03576118, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.05996136, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0] -lab[10][12] = [-100.0, -100.0, -100.0, -100.0, 0.011622721, 0.032384023, -0.0026711538, 0.0038835537, -4.5388937E-5, -100.0, 0.008428662, -100.0, -0.014357973, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.04065571, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0] -lab[10][13] = [-100.0, -100.0, -100.0, -100.0, 0.0073663713, 0.030481348, -0.010437234, -9.3441224E-4, 0.039967984, -100.0, 0.0064717443, -100.0, -0.024461718, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.046183094, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0] -lab[10][14] = [-100.0, -100.0, -100.0, -100.0, 0.01587913, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.06235354, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, 0.016389329, -100.0, -100.0, -100.0, -0.02086558, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0] -lab[11][0] = [-100.0, -100.0, -100.0, -100.0, 0.004183382, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0] -lab[11][1] = [-100.0, -100.0, -100.0, -100.0, -0.0076409145, 0.024953196, -100.0, -100.0, -0.028889697, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.020499956, -100.0, -100.0, -100.0, -0.011986047, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.01859772, -100.0, -100.0, -100.0] -lab[11][2] = [-100.0, -100.0, -100.0, -100.0, -0.060003787, -0.014070317, -100.0, -0.0059156157, 0.010306167, -100.0, -0.015206532, -100.0, -0.019881038, -100.0, -100.0, -0.028339827, -100.0, -0.067398205, -100.0, -100.0, -100.0, 0.008997908, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.018300084, -0.007920352] -lab[11][3] = [-100.0, -100.0, -100.0, -100.0, -0.01894506, -0.013162743, -100.0, -0.007979904, -0.0016385664, -100.0, -0.018153787, -100.0, -0.017998304, -100.0, -100.0, -0.021245552, -100.0, -0.05939291, -100.0, -100.0, -100.0, -0.004197329, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.032008335, -0.00921024] -lab[11][4] = [-100.0, -100.0, -100.0, -100.0, -0.0025721304, -0.009940909, -100.0, -0.009773591, 0.020629605, -100.0, -0.023574987, -100.0, 0.0029413053, -100.0, -100.0, -0.01590158, -100.0, -0.06557504, -100.0, -100.0, -100.0, -0.0120780505, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.02265994, -0.010470008] -lab[11][5] = [-100.0, -100.0, -100.0, -100.0, -0.004847251, -0.016105207, -100.0, -0.013647844, 0.020292103, -100.0, -0.012678393, -100.0, -0.02244311, -100.0, -100.0, -0.021245552, -100.0, -0.060949195, -100.0, -100.0, -100.0, -0.0073509244, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.027212191, -0.014650679] -lab[11][6] = [-100.0, -100.0, -100.0, -100.0, -0.033746358, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.023005461, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0] -lab[11][7] = [-100.0, -100.0, -100.0, -100.0, -0.05617983, -0.011991441, -100.0, -0.009326804, 0.011956559, -100.0, -0.018397594, -100.0, -0.01995382, -100.0, -100.0, -0.030099161, -100.0, -0.07172404, -100.0, -100.0, -100.0, -0.0029683935, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.020174116, -0.015947435] -lab[11][8] = [-100.0, -100.0, -100.0, -100.0, 0.005519841, 9.0104673E-4, -100.0, -100.0, -0.019728117, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.020637562, -100.0, -100.0, -100.0, -0.016223626, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.013563827, -100.0, -100.0, -100.0] -lab[11][9] = [-100.0, -100.0, -100.0, -100.0, 0.015746564, -0.0070220693, -100.0, -0.007731626, 0.022043357, -100.0, -0.016831335, -100.0, -0.014862879, -100.0, -100.0, -0.026977727, -100.0, -0.064945415, -100.0, -100.0, -100.0, -0.00923226, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.014802031, -0.008515398] -lab[11][10] = [-100.0, -100.0, -100.0, -100.0, 0.17183895, -0.019662648, -0.02055108, -0.022982247, -0.05656849, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.029510943, -100.0, -100.0, -100.0, -0.01362725, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0] -lab[11][11] = [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.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, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0] -lab[11][12] = [-100.0, -100.0, -100.0, -100.0, 0.004987302, 0.11272088, -100.0, 0.13417284, 0.046005733, -100.0, -0.011221319, -100.0, -0.009711958, -100.0, -100.0, -0.029535037, -100.0, -0.010512706, -100.0, -100.0, -100.0, -0.047170322, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, 0.013259491, -0.0056126397] -lab[11][13] = [-100.0, -100.0, -100.0, -100.0, 0.120297045, 0.09330137, -100.0, 0.070799686, 0.040355153, -100.0, -0.039030172, -100.0, -7.0239895E-4, -100.0, -100.0, -0.032085977, -100.0, -0.011256315, -100.0, -100.0, -100.0, -0.027810505, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, 0.00633472, -0.008622873] -lab[11][14] = [-100.0, -100.0, -100.0, -100.0, 0.11600753, -0.005624147, -100.0, 0.03412821, -0.012586624, -100.0, -100.0, -0.075249486, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, 0.019362854, 0.013571097, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.008141532] -lab[12][0] = [-100.0, -100.0, -100.0, -100.0, 0.0020547423, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0] -lab[12][1] = [-100.0, -100.0, -100.0, -100.0, 0.0396342, -0.015539667, -100.0, -100.0, -0.025371484, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.024309423, -100.0, -100.0, -100.0, -0.011986047, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.027883962, -100.0, -100.0, -100.0] -lab[12][2] = [-100.0, -100.0, -100.0, -100.0, -0.05916558, -0.016076984, -100.0, -0.005667337, 0.0051087197, -100.0, -0.016055794, -100.0, -0.027272215, -100.0, -100.0, -0.026044102, -100.0, -0.07120015, -100.0, -100.0, -100.0, -0.0015342243, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.021045266, -0.008740985] -lab[12][3] = [-100.0, -100.0, -100.0, -100.0, 0.0031062858, -0.013976154, -100.0, -0.009553928, -0.005194581, -100.0, -0.013632725, -100.0, -0.026658138, -100.0, -100.0, -0.0232241, -100.0, -0.060299862, -100.0, -100.0, -100.0, -0.0088612195, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.029549452, -0.011608116] -lab[12][4] = [-100.0, -100.0, -100.0, -100.0, 0.00867251, -0.011926816, -100.0, -0.010248993, 0.01097198, -100.0, -0.018405842, -100.0, -0.026264463, -100.0, -100.0, -0.014724364, -100.0, -0.07129672, -100.0, -100.0, -100.0, -0.010854144, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.023430107, -0.01412765] -lab[12][5] = [-100.0, -100.0, -100.0, -100.0, 0.0054890797, -0.012925926, -100.0, -0.010225224, 0.0135046225, -100.0, -0.013068038, -100.0, -0.02711486, -100.0, -100.0, -0.0232241, -100.0, -0.06496835, -100.0, -100.0, -100.0, -0.0061270185, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.02475331, -0.020265082] -lab[12][6] = [-100.0, -100.0, -100.0, -100.0, -0.02469039, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.018911082, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0] -lab[12][7] = [-100.0, -100.0, -100.0, -100.0, -0.034386136, -0.01227389, -100.0, -0.004852564, 0.005298138, -100.0, -0.015678015, -100.0, -0.02966849, -100.0, -100.0, -0.03331035, -100.0, -0.076273516, -100.0, -100.0, -100.0, -3.9869107E-4, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.020319534, -0.0150832] -lab[12][8] = [-100.0, -100.0, -100.0, -100.0, 0.042473763, -0.026352536, -100.0, -100.0, -0.017569697, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.020599995, -100.0, -100.0, -100.0, -0.016223626, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.017437482, -100.0, -100.0, -100.0] -lab[12][9] = [-100.0, -100.0, -100.0, -100.0, 0.02230397, -0.010012049, -100.0, -0.009553928, 0.017520748, -100.0, -0.014661487, -100.0, -0.024577547, -100.0, -100.0, -0.03023924, -100.0, -0.073132485, -100.0, -100.0, -100.0, -0.007911795, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.021642737, -0.017785992] -lab[12][10] = [-100.0, -100.0, -100.0, -100.0, 0.2285694, -0.026922856, -0.020569138, -0.02599477, -0.012410844, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.038398586, -100.0, -100.0, -100.0, -0.012401053, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0] -lab[12][11] = [-100.0, -100.0, -100.0, -100.0, -0.04830719, -0.014254008, -100.0, -0.0038235525, 0.016373483, -100.0, -0.0115593225, -100.0, -0.024683233, -100.0, -100.0, -0.033282496, -100.0, -0.06943184, -100.0, -100.0, -100.0, -0.0022925064, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.0191256, -0.019381609] -lab[12][12] = [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.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, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0] -lab[12][13] = [-100.0, -100.0, -100.0, -100.0, 0.068326406, 0.13544416, -100.0, 0.0998629, 0.097386986, -100.0, -0.034251586, -100.0, -0.0054424014, -100.0, -100.0, -0.019764677, -100.0, -0.03183618, -100.0, -100.0, -100.0, -0.04539673, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, 0.009344805, -0.0098096] -lab[12][14] = [-100.0, -100.0, -100.0, -100.0, 0.08549086, -0.004960265, -100.0, 0.010753985, -0.007879022, -100.0, -100.0, -0.12814987, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, 0.007242377, 0.008014331, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.008141532] -lab[13][0] = [-100.0, -100.0, -100.0, -100.0, 0.0020547423, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0] -lab[13][1] = [-100.0, -100.0, -100.0, -100.0, 0.05739301, 0.020208525, -100.0, -100.0, -0.02736584, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.020499956, -100.0, -100.0, -100.0, -0.011986047, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.021537926, -100.0, -100.0, -100.0] -lab[13][2] = [-100.0, -100.0, -100.0, -100.0, -0.019036207, -0.01617592, -100.0, -0.0059156157, 0.0020330462, -100.0, -0.014504712, -100.0, -0.021567954, -100.0, -100.0, -0.023315748, -100.0, -0.0683606, -100.0, -100.0, -100.0, 3.295847E-4, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.015582237, -0.016198281] -lab[13][3] = [-100.0, -100.0, -100.0, -100.0, 0.03114741, -0.01407509, -100.0, -0.009802206, -0.005134943, -100.0, -0.010012224, -100.0, -0.020953877, -100.0, -100.0, -0.023286957, -100.0, -0.062059816, -100.0, -100.0, -100.0, -0.0021215002, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.022727123, -0.0130320545] -lab[13][4] = [-100.0, -100.0, -100.0, -100.0, 0.03841355, -0.011122017, -100.0, -0.011595893, 0.02051436, -100.0, -0.015433424, -100.0, -0.019930566, -100.0, -100.0, -0.015886845, -100.0, -0.06907656, -100.0, -100.0, -100.0, -0.009811342, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.015284575, -0.014291821] -lab[13][5] = [-100.0, -100.0, -100.0, -100.0, 0.037527163, -0.011974635, -100.0, -0.011149107, 0.019251764, -100.0, -0.007873704, -100.0, -0.019512307, -100.0, -100.0, -0.023286957, -100.0, -0.06205247, -100.0, -100.0, -100.0, -0.005275096, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.01793098, -0.01646095] -lab[13][6] = [-100.0, -100.0, -100.0, -100.0, -0.02906044, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.021853115, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0] -lab[13][7] = [-100.0, -100.0, -100.0, -100.0, 0.0051080245, -0.012372827, -100.0, -0.009326804, 0.0060452437, -100.0, -0.013101375, -100.0, -0.022065936, -100.0, -100.0, -0.02896975, -100.0, -0.073357634, -100.0, -100.0, -100.0, -5.846833E-4, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.015330794, -0.015957894] -lab[13][8] = [-100.0, -100.0, -100.0, -100.0, 0.08354042, 0.003999633, -100.0, -100.0, -0.0148448525, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.020637562, -100.0, -100.0, -100.0, -0.016223626, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.009822253, -100.0, -100.0, -100.0] -lab[13][9] = [-100.0, -100.0, -100.0, -100.0, 0.06996338, -0.010110986, -100.0, -0.011149107, 0.018004304, -100.0, -0.01152831, -100.0, -0.016974993, -100.0, -100.0, -0.032456063, -100.0, -0.06277614, -100.0, -100.0, -100.0, -0.008038912, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.019617168, -0.018978095] -lab[13][10] = [-100.0, -100.0, -100.0, -100.0, 0.1966709, -0.037076153, -0.022834187, -0.030513555, 0.010913024, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.029907519, -100.0, -100.0, -100.0, -0.012401054, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0] -lab[13][11] = [-100.0, -100.0, -100.0, -100.0, -0.022209378, -0.013499531, -100.0, -0.0038235525, 0.013696095, -100.0, -0.009977228, -100.0, -0.018342398, -100.0, -100.0, -0.029386675, -100.0, -0.07173414, -100.0, -100.0, -100.0, -0.00394613, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.014987734, -0.017867286] -lab[13][12] = [-100.0, -100.0, -100.0, -100.0, 0.09764857, -0.020975709, -100.0, -0.013096463, 0.01657707, -100.0, -0.010012224, -100.0, -0.018349338, -100.0, -100.0, -0.030115183, -100.0, -0.071751185, -100.0, -100.0, -100.0, -0.0040298626, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.018266436, -0.013942889] -lab[13][13] = [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.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, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0] -lab[13][14] = [-100.0, -100.0, -100.0, -100.0, 0.056084678, -0.012318356, -100.0, 0.014322455, -0.014129913, -100.0, -100.0, -0.14917272, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, 0.0063895416, 0.028424421, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.009038948] -lab[14][0] = [-100.0, -100.0, -100.0, -100.0, -0.008927362, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0] -lab[14][1] = [-100.0, -100.0, -100.0, -100.0, 0.028905792, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.08073401, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0] -lab[14][2] = [-100.0, -100.0, -100.0, -100.0, -0.016127275, -0.011781214, -0.029326014, -100.0, -0.0073180962, -100.0, -0.036407348, -100.0, -0.02709568, -100.0, -100.0, -100.0, -100.0, 0.010117588, -100.0, -100.0, -100.0, -0.027180063, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0] -lab[14][3] = [-100.0, -100.0, -100.0, -100.0, -0.014929585, -0.01646292, 0.010563016, -100.0, -0.003801383, -100.0, -0.021647654, -100.0, -0.04209665, -100.0, -100.0, -100.0, -100.0, 0.02020907, -100.0, -100.0, -100.0, -0.023904413, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0] -lab[14][4] = [-100.0, -100.0, -100.0, -100.0, -0.021154426, -0.016442642, 0.0037343476, -100.0, -0.0045591975, -100.0, -0.034271818, -100.0, -0.041392848, -100.0, -100.0, -100.0, -100.0, -0.042646084, -100.0, -100.0, -100.0, -0.021064406, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0] -lab[14][5] = [-100.0, -100.0, -100.0, -100.0, -0.011393564, -0.03390301, 0.009589337, -100.0, -0.01744324, -100.0, -0.007175665, -100.0, -0.043987717, -100.0, -100.0, -100.0, -100.0, 0.035264224, -100.0, -100.0, -100.0, -0.02660139, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0] -lab[14][6] = [-100.0, -100.0, -100.0, -100.0, -0.0271488, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.03853228, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0] -lab[14][7] = [-100.0, -100.0, -100.0, -100.0, -0.019168273, -0.011024953, -0.03493552, -100.0, -0.003224189, -100.0, -0.025564909, -100.0, -0.028018715, -100.0, -100.0, -100.0, -100.0, 0.015027219, -100.0, -100.0, -100.0, -0.02618499, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0] -lab[14][8] = [-100.0, -100.0, -100.0, -100.0, -0.015771415, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.074303724, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0] -lab[14][9] = [-100.0, -100.0, -100.0, -100.0, -0.014042193, -0.020506615, -0.037382524, -100.0, -0.011863008, -100.0, -0.026074145, -100.0, -0.038123965, -100.0, -100.0, -100.0, -100.0, 0.018390698, -100.0, -100.0, -100.0, -0.025254652, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0] -lab[14][10] = [-100.0, -100.0, -100.0, -100.0, 0.04561069, -100.0, -0.019445466, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.10429093, -100.0, -100.0, -100.0, 0.0013721561, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0] -lab[14][11] = [-100.0, -100.0, -100.0, -100.0, -0.0128257405, -0.011499481, -0.01790243, -100.0, -0.0073180962, -100.0, -0.03406727, -100.0, -0.032254595, -100.0, -100.0, -100.0, -100.0, 0.03551333, -100.0, -100.0, -100.0, -0.02621014, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0] -lab[14][12] = [-100.0, -100.0, -100.0, -100.0, -0.005733858, -0.014030532, -0.007075153, -100.0, -0.003224189, -100.0, -0.034181435, -100.0, -0.038144123, -100.0, -100.0, -100.0, -100.0, -0.08827253, -100.0, -100.0, -100.0, -0.026157081, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0] -lab[14][13] = [-100.0, -100.0, -100.0, -100.0, -0.0042990698, -0.015845833, -0.013813869, -100.0, 0.0018438096, -100.0, -0.028911412, -100.0, -0.035165127, -100.0, -100.0, -100.0, -100.0, -0.041419115, -100.0, -100.0, -100.0, -0.027013248, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0] -lab[14][14] = [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.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, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0] -fv = a feature vector -sib[0][1][0] = [0.1009304] -sib[0][1][1] = [0.1009304] -sib[0][2][0] = [0.077498816, -0.18321107] -sib[0][2][1] = [0.0, 3.6234892E-4] -sib[0][2][2] = [0.077498816, -0.18321107] -sib[0][3][0] = [0.09607812, -0.16572231] -sib[0][3][1] = [9.148505E-12, 3.6234892E-4] -sib[0][3][2] = [0.002879443, -0.002180265] -sib[0][3][3] = [0.09607812, -0.16572231] -sib[0][4][0] = [0.09607812, -0.16775823] -sib[0][4][1] = [9.148505E-12, 3.6234892E-4] -sib[0][4][2] = [0.002879443, 0.013257431] -sib[0][4][3] = [0.0036714405, -0.012758426] -sib[0][4][4] = [0.09607812, -0.16775823] -sib[0][5][0] = [0.07752588, -0.19025701] -sib[0][5][1] = [0.0, 3.6234892E-4] -sib[0][5][2] = [0.002879443, -0.0053304173] -sib[0][5][3] = [0.0036714405, -0.019903192] -sib[0][5][4] = [0.0, -0.017437585] -sib[0][5][5] = [0.07752588, -0.19025701] -sib[0][6][0] = [0.37733674, 0.0030680192, 0.060625646] -sib[0][6][1] = [0.0, 4.400658E-11, -0.0086955335] -sib[0][6][2] = [0.0026465259, 8.476209E-4, 0.0] -sib[0][6][3] = [0.0020373724, -0.0043442375, 0.0050378544] -sib[0][6][4] = [0.004083242, -0.008529572, 0.0050378544] -sib[0][6][5] = [-0.00261556, -0.0063765747, -0.0016225355] -sib[0][6][6] = [0.37733674, 0.0030680192, 0.060625646] -sib[0][7][0] = [0.05387699, -0.17501158] -sib[0][7][1] = [0.0, 3.6234892E-4] -sib[0][7][2] = [0.002879443, 0.0081029795] -sib[0][7][3] = [0.0138752125, -0.012863668] -sib[0][7][4] = [0.0023320774, -0.008248902] -sib[0][7][5] = [-2.8348272E-4, -0.01896391] -sib[0][7][6] = [-0.08313296, -0.008190515] -sib[0][7][7] = [0.05387699, -0.17501158] -sib[0][8][0] = [0.11001998] -sib[0][8][1] = [1.4472277E-11] -sib[0][8][2] = [0.0032793367] -sib[0][8][3] = [0.0036714405] -sib[0][8][4] = [0.0] -sib[0][8][5] = [-0.00261556] -sib[0][8][6] = [-0.08946653] -sib[0][8][7] = [0.0] -sib[0][8][8] = [0.11001998] -sib[0][9][0] = [0.012241538, -0.18679896] -sib[0][9][1] = [0.0, 3.6234892E-4] -sib[0][9][2] = [0.002879443, -0.00530215] -sib[0][9][3] = [0.0036714405, -0.01240495] -sib[0][9][4] = [0.0, -0.0077901836] -sib[0][9][5] = [-0.00261556, -0.018505193] -sib[0][9][6] = [-0.08946653, -0.014085354] -sib[0][9][7] = [-0.0014011511, -0.027908202] -sib[0][9][8] = [0.0, 9.841713E-4] -sib[0][9][9] = [0.012241538, -0.18679896] -sib[0][10][0] = [0.07278153] -sib[0][10][1] = [4.5836373E-11] -sib[0][10][2] = [0.004280594] -sib[0][10][3] = [0.0036714405] -sib[0][10][4] = [0.0] -sib[0][10][5] = [-0.00261556] -sib[0][10][6] = [-0.08946653] -sib[0][10][7] = [0.0020818603] -sib[0][10][8] = [7.797135E-11] -sib[0][10][9] = [-0.0012656527] -sib[0][10][10] = [0.07278153] -sib[0][11][0] = [0.09697626, -0.17547522] -sib[0][11][1] = [-2.0503228E-10, 3.6234892E-4] -sib[0][11][2] = [0.002879443, 0.03612773] -sib[0][11][3] = [0.0036714405, 0.013015134] -sib[0][11][4] = [0.0, 0.017629903] -sib[0][11][5] = [-0.00261556, -0.00237903] -sib[0][11][6] = [-0.08946653, -0.019980194] -sib[0][11][7] = [-0.0014011511, 5.599223E-4] -sib[0][11][8] = [-0.0028200145, 0.008869357] -sib[0][11][9] = [0.0, -0.002049474] -sib[0][11][10] = [-0.0022987006, -0.03887186] -sib[0][11][11] = [0.09697626, -0.17547522] -sib[0][12][0] = [0.07289503, -0.15863656] -sib[0][12][1] = [9.148505E-12, -0.015169687] -sib[0][12][2] = [0.002879443, -0.0036189742] -sib[0][12][3] = [0.0036714405, -0.0075441077] -sib[0][12][4] = [0.0, -0.002929342] -sib[0][12][5] = [-0.00261556, -0.022938276] -sib[0][12][6] = [-0.08667535, -0.014085353] -sib[0][12][7] = [-0.0014011511, -0.029324945] -sib[0][12][8] = [9.148505E-12, 9.841713E-4] -sib[0][12][9] = [0.0, -0.027787007] -sib[0][12][10] = [0.0021417032, -0.03531133] -sib[0][12][11] = [0.002296214, -0.026198987] -sib[0][12][12] = [0.07289503, -0.15863656] -sib[0][13][0] = [0.022648372, -0.15350725] -sib[0][13][1] = [0.0, 3.6234892E-4] -sib[0][13][2] = [0.002879443, -0.026968949] -sib[0][13][3] = [-0.0014464923, -0.034926094] -sib[0][13][4] = [0.0, -0.03031133] -sib[0][13][5] = [-0.00261556, -0.04102634] -sib[0][13][6] = [-0.08667535, -0.016529191] -sib[0][13][7] = [-0.0014011511, -0.043380998] -sib[0][13][8] = [0.0, 9.841713E-4] -sib[0][13][9] = [0.0, -0.043879043] -sib[0][13][10] = [0.0021417032, -0.0357359] -sib[0][13][11] = [0.002296214, -0.035447378] -sib[0][13][12] = [0.0015939093, -0.057777908] -sib[0][13][13] = [0.022648372, -0.15350725] -sib[0][14][0] = [0.31167406, 0.15251747, 0.018790457, 0.012185015] -sib[0][14][1] = [-0.0030729363, -1.1884883E-10, 9.4561983E-4, 0.0039847502] -sib[0][14][2] = [0.005333848, -0.004690854, -0.0023448789, -0.013482017] -sib[0][14][3] = [0.004724694, -0.0049285507, 0.0, -7.5240387E-4] -sib[0][14][4] = [0.0010532537, -0.0049285507, 8.7857735E-4, 0.013280388] -sib[0][14][5] = [-0.0015623064, -0.0049285507, 6.6842075E-4, 0.011406964] -sib[0][14][6] = [-0.08946653, -0.02312115, 7.354752E-12, -2.2225347E-12] -sib[0][14][7] = [-2.5238388E-4, -0.005386516, 0.0039864522, 0.002022608] -sib[0][14][8] = [-0.0030729363, -0.0064442162, -0.0020600068, 0.003577187] -sib[0][14][9] = [-7.0605893E-6, -0.0063338643, -0.0023448789, -0.012578556] -sib[0][14][10] = [1.4686887E-11, 0.0043251663, 3.665739E-4, 0.0026315032] -sib[0][14][11] = [0.013265651, -0.0038110844, 0.0, -0.009902528] -sib[0][14][12] = [0.0015868493, -0.006571561, 0.0, -0.008799822] -sib[0][14][13] = [-7.0605893E-6, -0.0060651805, 0.0, 0.0010815861] -sib[0][14][14] = [0.31167406, 0.15251747, 0.018790457, 0.012185015] -sib[1][0][0] = [-0.14506936] -sib[1][0][1] = [-0.14506936] -sib[1][2][1] = [0.8223301, 0.15931079, 0.35679403, 0.096370235, 0.16478507, 0.05396487] -sib[1][2][2] = [0.8223301, 0.15931079, 0.35679403, 0.096370235, 0.16478507, 0.05396487] -sib[1][3][1] = [0.7328315, 0.071922556, 0.3353346, -0.084273316, 0.18448874, 0.063882634] -sib[1][3][2] = [-0.17718247, -0.048298623, -0.08761847, -0.08399954, -0.028174773, -0.016735515] -sib[1][3][3] = [0.7328315, 0.071922556, 0.3353346, -0.084273316, 0.18448874, 0.063882634] -sib[1][4][1] = [0.74362266, 0.074151605, 0.33832115, -0.08473284, 0.18674353, 0.061846726] -sib[1][4][2] = [-0.18171725, -0.042668555, -0.090021595, -0.11272397, -0.03076177, -0.0012978215] -sib[1][4][3] = [-0.1923438, -0.04521106, -0.065176874, -0.017205017, -0.07633624, -0.009437358] -sib[1][4][4] = [0.74362266, 0.074151605, 0.33832115, -0.08473284, 0.18674353, 0.061846726] -sib[1][5][1] = [0.7273429, 0.06951806, 0.37647092, -0.11422935, 0.11937228, 0.02388254] -sib[1][5][2] = [-0.17346698, -0.03045045, -0.09098843, -0.0948249, -0.015072234, -0.019885667] -sib[1][5][3] = [-0.1865165, -0.025386048, -0.06763257, -0.027074134, -0.06819977, -0.016582124] -sib[1][5][4] = [-0.18198171, -0.036187537, -0.056837518, 0.0044096145, -0.06264385, -0.027142761] -sib[1][5][5] = [0.7273429, 0.06951806, 0.37647092, -0.11422935, 0.11937228, 0.02388254] -sib[1][6][1] = [0.13799278] -sib[1][6][2] = [0.026691256] -sib[1][6][3] = [0.007929184] -sib[1][6][4] = [0.01669214] -sib[1][6][5] = [0.012944166] -sib[1][6][6] = [0.13799278] -sib[1][7][1] = [0.70997274, 0.09760554, 0.48473144, 0.03187166, 0.1530679, 0.03221134] -sib[1][7][2] = [-0.18709238, -0.048056874, -0.09347163, -0.062301688, -0.031794682, -0.0064522717] -sib[1][7][3] = [-0.17118181, -0.054923926, -0.06860041, 0.059358608, -0.015151251, -0.009542598] -sib[1][7][4] = [-0.17118181, -0.054923926, -0.059294213, 0.06307418, -0.010485761, -0.017954078] -sib[1][7][5] = [-0.1714512, -0.05614167, -0.066502064, 0.07803505, -0.031801704, -0.028669087] -sib[1][7][6] = [-0.0066187354, 0.0, 0.0, 0.04309825, -0.009898367, -0.009960687] -sib[1][7][7] = [0.70997274, 0.09760554, 0.48473144, 0.03187166, 0.1530679, 0.03221134] -sib[1][8][1] = [0.14466164] -sib[1][8][2] = [-0.0014932856] -sib[1][8][3] = [-0.0049484395] -sib[1][8][4] = [-0.010908695] -sib[1][8][5] = [-0.047897436] -sib[1][8][6] = [-0.07205967] -sib[1][8][7] = [-0.03267007] -sib[1][8][8] = [0.14466164] -sib[1][9][1] = [0.7941633, 0.14351022, 0.40630633, 0.101728044, 0.22039162, 0.025832525] -sib[1][9][2] = [-0.1469763, -0.06074291, -0.09695857, -0.12046871, 0.024239575, -0.019857401] -sib[1][9][3] = [-0.16942596, -0.052692678, -0.068992, -0.003081635, 0.002428099, -0.00908388] -sib[1][9][4] = [-0.16942596, -0.052692678, -0.0596858, 6.339379E-4, 0.007093591, -0.01749536] -sib[1][9][5] = [-0.16969535, -0.05391042, -0.06808764, 0.012101205, -4.7506066E-4, -0.02821037] -sib[1][9][6] = [-0.00875906, 0.0, -9.955837E-4, 0.028349187, 0.0074102087, -0.015855527] -sib[1][9][7] = [-0.15999229, -0.05038492, -0.079725966, -0.124766536, -0.031653732, -0.040038418] -sib[1][9][8] = [-0.021489913, -0.0033509294, 0.0, 0.0039077005, -7.73577E-4, 9.841713E-4] -sib[1][9][9] = [0.7941633, 0.14351022, 0.40630633, 0.101728044, 0.22039162, 0.025832525] -sib[1][10][1] = [0.40872738, 0.73735535, 0.11837222, 0.14335588, 0.06470696] -sib[1][10][2] = [-0.059155826, -0.08133857, -5.3938874E-4, 0.021138674, -0.051489163] -sib[1][10][3] = [-0.0576928, -0.08749205, 0.04564517, -0.06835486, -0.02692426] -sib[1][10][4] = [-0.0483866, -0.08749205, 0.04419522, -0.055656735, -0.03858459] -sib[1][10][5] = [-0.052616727, -0.08993608, 0.04401492, -0.052504648, -0.03858459] -sib[1][10][6] = [-0.0025701378, 0.0070631346, 0.013442162, -0.01039378, -0.0028068458] -sib[1][10][7] = [-0.057052415, -0.07474424, -5.647867E-4, -0.058527604, -0.05342383] -sib[1][10][8] = [-0.021949403, -0.020818597, 0.015592818, -0.0013685953, -0.005767775] -sib[1][10][9] = [-0.047719967, -0.0930448, 0.040142223, -0.019073889, -0.030611292] -sib[1][10][10] = [0.40872738, 0.73735535, 0.11837222, 0.14335588, 0.06470696] -sib[1][11][1] = [0.79462796, 0.12613454, 0.3748815, 0.09253451, 0.22781485, 0.065622464] -sib[1][11][2] = [-0.21084513, -0.06989765, -0.09474037, -0.126323, -0.02342927, 0.02157248] -sib[1][11][3] = [-0.20293489, -0.06394496, -0.06758666, -0.01732459, -0.0059071695, 0.016336206] -sib[1][11][4] = [-0.20293489, -0.06394496, -0.058280464, -0.013609019, -0.0035066297, 0.007924724] -sib[1][11][5] = [-0.20130599, -0.0651627, -0.06548831, 0.0054604346, -0.005950439, -0.012084208] -sib[1][11][6] = [-0.00875906, 0.0, 0.0, 0.03143002, -0.017132381, -0.021750366] -sib[1][11][7] = [-0.18423724, -0.05743317, -0.07596734, -0.11873575, -0.01840756, -0.01157029] -sib[1][11][8] = [-0.029544512, -0.00955603, 0.0, 0.06702636, 0.033138227, 0.0050735637] -sib[1][11][9] = [-0.19347359, -0.05170956, -0.075242564, -0.056771394, -0.027734496, -0.008300344] -sib[1][11][10] = [-0.09004499, 0.052916653, -0.013810598, -0.021381833, 0.014406228, -0.03887186] -sib[1][11][11] = [0.79462796, 0.12613454, 0.3748815, 0.09253451, 0.22781485, 0.065622464] -sib[1][12][1] = [0.784679, 0.11406528, 0.4023752, 0.077483386, 0.25407618, 0.070968404] -sib[1][12][2] = [-0.16144344, -0.058469675, -0.09971817, -0.13266534, -0.012766752, -0.018174225] -sib[1][12][3] = [-0.19172621, -0.05747579, -0.07180204, -0.005855644, -0.0067007844, -0.0042230384] -sib[1][12][4] = [-0.19584893, -0.05747579, -0.062495854, -0.002140074, -0.0020352905, -0.012634519] -sib[1][12][5] = [-0.19611831, -0.061888117, -0.0697037, 0.011901378, -0.001139537, -0.03264345] -sib[1][12][6] = [-0.01732036, 0.0, 0.0, 0.024115551, -0.023440033, -0.015855527] -sib[1][12][7] = [-0.17722084, -0.050481066, -0.08330333, -0.124951646, -0.051222946, -0.041455157] -sib[1][12][8] = [-0.060714513, -0.00955603, -0.005931367, 0.09389506, 0.004548329, -0.0028116223] -sib[1][12][9] = [-0.1857457, -0.03476999, -0.08091978, -0.06731631, -0.048553277, -0.03403788] -sib[1][12][10] = [-0.08174297, 0.03556207, -0.010301546, -0.011050482, -0.06616042, -0.03531133] -sib[1][12][11] = [-0.16741519, -0.041634258, -0.09653928, -0.11845435, -0.07660295, -0.04021944] -sib[1][12][12] = [0.784679, 0.11406528, 0.4023752, 0.077483386, 0.25407618, 0.070968404] -sib[1][13][1] = [0.8033916, 0.14681372, 0.4034932, 0.04889268, 0.23028061, 0.072416954] -sib[1][13][2] = [-0.15708967, -0.05103388, -0.09755864, -0.11520136, 0.010333281, -0.041524198] -sib[1][13][3] = [-0.17943211, -0.04492206, -0.069642514, 0.0077984845, 0.019408828, -0.031605024] -sib[1][13][4] = [-0.17943211, -0.050039995, -0.06250434, 0.011514056, 0.024074322, -0.040016502] -sib[1][13][5] = [-0.17942515, -0.0556522, -0.06754417, 0.024334319, 0.0020352225, -0.050731517] -sib[1][13][6] = [-0.023741333, 0.0, 0.0, 0.02395995, -0.021758288, -0.018299362] -sib[1][13][7] = [-0.17054209, -0.04390209, -0.081143804, -0.108708866, -0.043814924, -0.055511214] -sib[1][13][8] = [-0.06968277, -0.007558679, -0.005931367, 0.08285634, -0.020528413, -0.0028116223] -sib[1][13][9] = [-0.16852425, -0.027382981, -0.07876025, -0.052584186, -0.08898652, -0.050129913] -sib[1][13][10] = [-0.07044368, 0.04071981, -0.008472457, -0.009528046, -0.06525004, -0.0357359] -sib[1][13][11] = [-0.16452362, -0.02551473, -0.09586862, -0.1323378, -0.07599212, -0.049467836] -sib[1][13][12] = [-0.122956105, -0.022348002, -0.073540114, -0.08561526, -0.10653714, -0.069373325] -sib[1][13][13] = [0.8033916, 0.14681372, 0.4034932, 0.04889268, 0.23028061, 0.072416954] -sib[1][14][1] = [-0.1488827, 0.73145366, -0.038691726] -sib[1][14][2] = [-0.057306655, -0.06834161, -0.013022164] -sib[1][14][3] = [0.07321883, -0.06438151, -0.010292105] -sib[1][14][4] = [0.057945795, -0.06438151, -0.0088003315] -sib[1][14][5] = [0.027987286, -0.07644719, -0.008058093] -sib[1][14][6] = [0.26787516, 0.009855585, -8.11261E-4] -sib[1][14][7] = [-0.05378393, -0.10175465, -0.008854454] -sib[1][14][8] = [-0.010961269, 0.0331846, -0.0051823417] -sib[1][14][9] = [-0.08712432, -0.08935531, -0.014929943] -sib[1][14][10] = [-0.07270897, -0.04884997, -0.0023863493] -sib[1][14][11] = [-0.045111306, -0.0765708, -0.01041195] -sib[1][14][12] = [-0.03154144, -0.070103265, -0.0088003315] -sib[1][14][13] = [-0.058957256, -0.07688024, -0.0064464738] -sib[1][14][14] = [-0.1488827, 0.73145366, -0.038691726] -sib[2][0][0] = [-0.07002016] -sib[2][0][1] = [-0.004894569] -sib[2][0][2] = [-0.07002016] -sib[2][1][1] = [-0.023300149, -0.07763119, -0.06833927, -0.15426117, -0.08973858, -0.2105893] -sib[2][1][2] = [-0.023300149, -0.07763119, -0.06833927, -0.15426117, -0.08973858, -0.2105893] -sib[2][3][2] = [0.0030667265, 0.055973124, 0.16185215, 0.102194816, -0.15181133, -0.069784425, -0.09858685, -0.18661639, -0.033880048, -0.050956592, -0.11497596] -sib[2][3][3] = [0.0030667265, 0.055973124, 0.16185215, 0.102194816, -0.15181133, -0.069784425, -0.09858685, -0.18661639, -0.033880048, -0.050956592, -0.11497596] -sib[2][4][2] = [0.017022148, 0.006996327, 0.16085127, 0.10461412, -0.19781941, -0.099051535, -0.1054311, -0.22328228, -0.033880048, -0.058684338, -0.12042834] -sib[2][4][3] = [-0.045596465, -0.056390677, -0.050062075, -0.097261526, -0.0134103205, -0.02489933, -0.017836481, 0.012028221, -0.0024191486, -0.010112673, -0.006688064] -sib[2][4][4] = [0.017022148, 0.006996327, 0.16085127, 0.10461412, -0.19781941, -0.099051535, -0.1054311, -0.22328228, -0.033880048, -0.058684338, -0.12042834] -sib[2][5][2] = [-0.0038128698, 0.0023627656, 0.09348002, 0.088334285, -0.22731593, -0.060901817, -0.09670297, -0.22777005, -0.033880048, -0.058684338, -0.15839253] -sib[2][5][3] = [-0.00989531, -0.025851687, 0.007153724, -0.10584166, -0.027832221, -0.025866164, -0.011156052, 0.00627356, -0.0024191486, -0.014139971, -0.011174329] -sib[2][5][4] = [-0.06930705, -0.057231218, -0.09708246, -0.0747798, 0.005082002, -0.024477692, -0.006208457, -0.007032466, -0.0015446771, -0.010112673, -0.019423649] -sib[2][5][5] = [-0.0038128698, 0.0023627656, 0.09348002, 0.088334285, -0.22731593, -0.060901817, -0.09670297, -0.22777005, -0.033880048, -0.058684338, -0.15839253] -sib[2][6][2] = [0.0856092, 0.023162715] -sib[2][6][3] = [0.074589275, -0.012859605] -sib[2][6][4] = [0.023362318, -0.012741394] -sib[2][6][5] = [-0.003970602, -0.020858906] -sib[2][6][6] = [0.0856092, 0.023162715] -sib[2][7][2] = [-0.02798745, 0.030450236, 0.12717563, 0.07096413, -0.08121491, 0.047358803, -0.04972786, -0.12838377, -0.030403443, -0.04421254, -0.15006372] -sib[2][7][3] = [-0.025541667, -0.05538957, 0.0556802, -0.08896982, 0.052671146, -0.026833996, -0.0056346385, 0.054540448, -0.005096597, -0.008215474, -0.0067933043] -sib[2][7][4] = [-0.05304926, -0.070425056, -0.020544259, -0.07220218, 0.061470177, -0.025445525, -0.0056346385, 0.03468742, -0.0042221253, -0.009944886, -0.010234964] -sib[2][7][5] = [-0.06928063, -0.07644652, -0.069272436, -0.0689533, 0.077528775, -0.025445525, -0.008135341, 0.030741397, -0.0042221253, -0.01183651, -0.020949975] -sib[2][7][6] = [-0.0025985183, 0.001627638, -0.052818563, -0.008561299, 0.04309825, -0.004009964, 0.0026703556, -0.02746283, -1.643592E-11, -9.703423E-4, -0.008190515] -sib[2][7][7] = [-0.02798745, 0.030450236, 0.12717563, 0.07096413, -0.08121491, 0.047358803, -0.04972786, -0.12838377, -0.030403443, -0.04421254, -0.15006372] -sib[2][8][2] = [0.076986805, -0.016464042, 0.08880119, 0.03479346, -0.19845805, -0.12528196] -sib[2][8][3] = [0.051009394, -0.009787562, 0.047646087, -0.003885689, 0.0010148, -0.009085627] -sib[2][8][4] = [0.020872638, -0.021129338, 0.048127007, -0.0024972174, 0.002350955, -0.0037509361] -sib[2][8][5] = [-0.043528356, -0.023956222, 0.047775924, -0.010181325, -0.009281956, -0.009085627] -sib[2][8][6] = [-0.12178734, 4.2700802E-4, -0.059341986, -0.022653384, -0.0117155025, -0.009019228] -sib[2][8][7] = [-0.0075305547, -0.023150373, 0.09874402, -0.004103143, -0.006852805, -0.0077615865] -sib[2][8][8] = [0.076986805, -0.016464042, 0.08880119, 0.03479346, -0.19845805, -0.12528196] -sib[2][9][2] = [-0.020520642, 0.076354906, 0.1944994, 0.15515459, -0.011358529, -0.031066343, -0.09887106, -0.11063344, -0.032141745, -0.051495682, -0.15644252] -sib[2][9][3] = [-0.027242858, -0.053158324, 0.07393179, -0.10852734, -0.0051501845, -0.02722559, -0.033271253, 0.0025097397, -0.009558577, -0.0056730197, -0.0063345856] -sib[2][9][4] = [-0.05229169, -0.0681938, -0.0029649083, -0.07044635, -9.7006967E-4, -0.025837118, -0.034270104, -0.018459626, -0.008684105, -0.0056730197, -0.009776246] -sib[2][9][5] = [-0.06603368, -0.07421527, -0.037945807, -0.06719745, 0.011594927, -0.027031107, -0.036770806, -0.017832227, -0.008684105, -0.0056730197, -0.020491257] -sib[2][9][6] = [-0.009841235, 4.2700802E-4, -0.03250438, -0.017214263, 0.032508813, -0.009003615, 0.004312259, -0.023045013, 0.009281213, -0.0061465385, -0.014085354] -sib[2][9][7] = [0.061626144, -0.07034968, -0.03195047, -0.09455538, -0.120078005, -0.03296606, -0.049614057, -0.026877865, -0.004828308, -0.013543218, -0.028570222] -sib[2][9][8] = [0.11295945, -0.022145407, -0.0019896077, 0.04971677, -0.01857473, -3.880954E-4, 0.013332176, -0.03681626, -0.0020619298, -0.00273389, 0.003756082] -sib[2][9][9] = [-0.020520642, 0.076354906, 0.1944994, 0.15515459, -0.011358529, -0.031066343, -0.09887106, -0.11063344, -0.032141745, -0.051495682, -0.15644252] -sib[2][10][2] = [0.13180268, 0.11493771, -0.0047045387, 0.15951079, -0.15873712, -0.11043491, -0.0255826] -sib[2][10][3] = [0.008182732, -0.0071631013, -0.0205923, -0.015757592, -0.014230743, -0.033518903, 0.03614378] -sib[2][10][4] = [-0.051778182, -0.018504877, -0.020471526, 0.0016789434, -0.011928141, -0.030058809, 0.021001622] -sib[2][10][5] = [-0.07603834, -0.02133176, -0.017493805, 0.0027531967, -0.01069214, -0.030058809, 0.015227638] -sib[2][10][6] = [-0.04895925, -0.0037904466, -0.0105781695, -0.0013920688, 8.9861406E-4, -0.0010366742, 0.0064062] -sib[2][10][7] = [-0.044887293, -0.05752436, -0.016226107, -0.01911595, -0.018176608, -0.041148964, 0.032745954] -sib[2][10][8] = [0.051647864, -0.04317956, -0.022725593, 0.05492984, 0.005214537, 7.999297E-4, 0.049496748] -sib[2][10][9] = [0.080191016, 0.0143312, -0.0070167757, 0.00965486, -0.010810163, -0.024215773, 0.047102004] -sib[2][10][10] = [0.13180268, 0.11493771, -0.0047045387, 0.15951079, -0.15873712, -0.11043491, -0.0255826] -sib[2][11][2] = [0.010808839, 0.058979243, 0.20192263, 0.15561938, -0.020552063, -0.062491164, -0.10430702, -0.068041086, -0.030403443, -0.05217783, -0.11665259] -sib[2][11][3] = [2.20889E-4, -0.0644106, 0.07165513, -0.12014822, -0.015950715, -0.025820244, -0.040056784, 0.05870781, -0.0059317155, -0.008525055, 0.019085499] -sib[2][11][4] = [-0.029053152, -0.079446085, -0.013565132, -0.10395525, -0.01521303, -0.024431773, -0.040056784, 0.040202104, -0.0069625564, -0.008525055, 0.015643839] -sib[2][11][5] = [-0.057436574, -0.08546755, -0.043421194, -0.09880806, 0.0049541546, -0.024431773, -0.04255749, 0.026142383, -0.0069625564, -0.008525055, -0.004365093] -sib[2][11][6] = [-0.0074269967, 4.2700802E-4, -0.05704697, -0.017214263, 0.035589654, -0.008008031, -0.008562432, -0.027901186, -1.643592E-11, 0.005974566, -0.019980194] -sib[2][11][7] = [0.009692701, -0.07739792, -0.018704299, -0.11880031, -0.11404723, -0.02920743, -0.05252111, -0.050313536, -0.006090795, -0.016395256, -1.0209717E-4] -sib[2][11][8] = [0.14200197, -0.033050418, 0.09287813, 0.064871795, 0.042836916, -7.761908E-4, 0.0034649817, -0.043622717, -0.0020619298, 9.1371406E-4, 0.011641268] -sib[2][11][9] = [0.07109661, -0.050286762, 0.061908476, -0.06479681, -0.059158638, -0.026408441, -0.028151553, 0.0076437136, -0.0061847903, -0.011734949, -0.0027114945] -sib[2][11][10] = [0.08717857, 0.027359774, -0.08028591, -0.0888139, -0.03766033, -0.014323417, -0.029919054, -0.005170907, -0.0014785305, 2.4921317E-11, -0.03767125] -sib[2][11][11] = [0.010808839, 0.058979243, 0.20192263, 0.15561938, -0.020552063, -0.062491164, -0.10430702, -0.068041086, -0.030403443, -0.05217783, -0.11665259] -sib[2][12][2] = [-0.008806081, 0.04691, 0.2281839, 0.1456705, -0.035603188, -0.034997478, -0.12742673, -0.104196735, -0.027057149, -0.04807265, -0.11130665] -sib[2][12][3] = [0.041237235, -0.057941437, 0.069496565, -0.108939536, -0.005303272, -0.030035634, -0.041630562, 0.026382752, -0.005096597, -0.011700289, 0.0011847559] -sib[2][12][4] = [0.010378617, -0.07297691, -0.012093794, -0.0968693, -0.0037440853, -0.028647162, -0.041630562, 0.009728894, -0.006127438, -0.011700289, -0.004915405] -sib[2][12][5] = [-0.03239, -0.082192965, -0.038610287, -0.0936204, 0.0113951005, -0.028647162, -0.040566582, 0.004212398, -0.006127438, -0.011700289, -0.02492434] -sib[2][12][6] = [-0.0074269967, 4.2700802E-4, -0.06335462, -0.025775561, 0.02827518, -0.008008031, -9.899097E-4, -0.027693516, 0.010466568, 0.0012967229, -0.014085353] -sib[2][12][7] = [0.05567226, -0.07044582, -0.05151968, -0.11178391, -0.12026312, -0.036543418, -0.06484246, -0.07705597, -0.0070241163, -0.022745721, -0.029986966] -sib[2][12][8] = [0.109401174, -0.033050418, 0.06428825, 0.0337018, 0.06970561, -0.006707558, 0.037565842, 0.016676368, -0.0020619298, 9.1371406E-4, 0.003756082] -sib[2][12][9] = [0.11584553, -0.033347193, 0.04108969, -0.057068896, -0.06970354, -0.032085657, -0.03658042, -0.034205142, -0.0053496724, -0.014910184, -0.028449029] -sib[2][12][10] = [0.050475307, 0.016030503, -0.17972536, -0.07408078, -0.027328981, -0.010814365, -0.036067106, -0.014868278, -0.0014785305, 2.4921317E-11, -0.03556287] -sib[2][12][11] = [0.1235604, -0.055605866, 0.038780686, -0.043198757, -0.12062013, -0.05599679, -0.06447694, -0.060442697, -0.009797992, -0.013322568, -0.026861008] -sib[2][12][12] = [-0.008806081, 0.04691, 0.2281839, 0.1456705, -0.035603188, -0.034997478, -0.12742673, -0.104196735, -0.027057149, -0.04807265, -0.11130665] -sib[2][13][2] = [0.014043956, 0.07965843, 0.20438835, 0.16438305, -0.06419388, -0.03387947, -0.11047739, -0.112318926, -0.035618346, -0.06265212, -0.10985812] -sib[2][13][3] = [0.017949808, -0.045387708, 0.09065651, -0.10325236, 0.0121607, -0.027876105, -0.03573527, 0.045849197, -0.005096597, -0.0132879075, -0.02216522] -sib[2][13][4] = [-0.011906292, -0.06554112, 0.01401582, -0.08045248, 0.009910051, -0.02865566, -0.036601953, 0.028000686, -0.0042221253, -0.0132879075, -0.03229739] -sib[2][13][5] = [-0.038666643, -0.07595705, -0.03543552, -0.07692724, 0.023828043, -0.026487634, -0.031106602, 0.021909405, -0.0042221253, -0.0132879075, -0.043012403] -sib[2][13][6] = [-0.0025985183, 4.2700802E-4, -0.061672874, -0.032196537, 0.028119579, -0.008008031, -0.0011130623, -0.03201366, -1.643592E-11, 0.0, -0.016529191] -sib[2][13][7] = [0.049662627, -0.06386685, -0.04411166, -0.10510516, -0.10402035, -0.03438389, -0.055382475, -0.058717933, -0.0014534729, -0.02433334, -0.04404302] -sib[2][13][8] = [0.092199616, -0.031053064, 0.039211504, 0.02473355, 0.0586669, -0.006707558, 0.037803967, 0.006024688, -0.0020619298, 8.5615006E-4, 0.003756082] -sib[2][13][9] = [0.09659037, -0.025960183, 6.564618E-4, -0.039847475, -0.054971434, -0.029926129, -0.023374705, -0.0174373, -0.0053496724, -0.016497802, -0.044541065] -sib[2][13][10] = [0.031881973, 0.021188242, -0.17881499, -0.06278148, -0.025806544, -0.008985275, -0.048415747, -0.020805689, 0.0, 2.4921317E-11, -0.03598744] -sib[2][13][11] = [0.14344193, -0.03394379, 0.06377165, -0.048529483, -0.13677996, -0.053837266, -0.06477384, -0.056066412, -0.009797992, -0.016497802, -0.0361094] -sib[2][13][12] = [0.06824247, -0.032865155, -0.05144591, -0.009715655, -0.08558081, -0.03452714, -0.038933642, -0.08403366, -0.0071181115, -0.022780383, -0.05843993] -sib[2][13][13] = [0.014043956, 0.07965843, 0.20438835, 0.16438305, -0.06419388, -0.03387947, -0.11047739, -0.112318926, -0.035618346, -0.06265212, -0.10985812] -sib[2][14][2] = [-0.29136357, 0.21550456, 0.19781417, 0.14476764, -0.13681059, -0.058578, 0.1117025, 0.1984607] -sib[2][14][3] = [0.021534488, 0.045160346, -0.0045002564, -0.031228358, 0.022753827, -0.006190028, -0.023327127, -0.0030455515] -sib[2][14][4] = [0.05371026, -0.007045494, 0.015167823, -0.042570144, 0.018961541, -0.0053155567, -0.03846929, -0.0016570799] -sib[2][14][5] = [0.024433777, -0.027317604, 0.0066204155, -0.04539703, 0.018408414, -0.0061849365, -0.039378367, -0.0016570799] -sib[2][14][6] = [0.30589902, -0.048999812, 0.0014003827, 4.2700802E-4, -0.010726305, 0.0011060901, 0.007897306, -0.008008031] -sib[2][14][7] = [-0.05841264, -0.007967059, -0.055748023, -0.048123967, 0.02175959, -0.00801485, 0.0010496601, -0.0016570799] -sib[2][14][8] = [-0.050100226, 0.05648551, 0.10893307, 0.026581593, 0.004339601, -0.0045064306, 0.049496748, -7.761908E-4] -sib[2][14][9] = [-0.057856422, 0.07628463, 0.019891167, -0.021742167, 0.010795908, -0.014184332, 0.02426618, 0.0022314647] -sib[2][14][10] = [-0.012750375, -0.13579145, -0.053836614, -0.0510779, 0.01005627, -0.0023863493, 0.023752104, -0.011390338] -sib[2][14][11] = [-0.0064315833, 0.13281591, 0.01999303, -0.033362556, -0.0044995677, -0.01349137, 0.020228367, -0.007570683] -sib[2][14][12] = [0.029471051, 0.070170105, 0.0154845975, -0.033804964, 0.011769939, -0.006443104, 0.01857647, -0.005878956] -sib[2][14][13] = [-0.0030388515, 0.05772932, 0.018012315, -0.03560932, 0.0062698415, -0.005700865, 0.02500667, -0.0059585073] -sib[2][14][14] = [-0.29136357, 0.21550456, 0.19781417, 0.14476764, -0.13681059, -0.058578, 0.1117025, 0.1984607] -sib[3][0][0] = [-0.05789368] -sib[3][0][1] = [0.010715714] -sib[3][0][2] = [-0.007978581] -sib[3][0][3] = [-0.05789368] -sib[3][1][1] = [-0.087511264, -0.12744133, -0.104752496, -0.17722015, -0.092124306, -0.21522388] -sib[3][1][2] = [0.03430704, -0.0010550766, -0.015493946, 0.002736577, -0.004425691, -0.0017134671] -sib[3][1][3] = [-0.087511264, -0.12744133, -0.104752496, -0.17722015, -0.092124306, -0.21522388] -sib[3][2][2] = [-0.06426263, -0.069901936, -0.10168637, -0.09750523, -0.1218078, -0.090425715, -0.08923541, -0.077614814, -0.090978056, -0.121757455, -0.08038013] -sib[3][2][3] = [-0.06426263, -0.069901936, -0.10168637, -0.09750523, -0.1218078, -0.090425715, -0.08923541, -0.077614814, -0.090978056, -0.121757455, -0.08038013] -sib[3][4][3] = [0.012380985, -0.04081459, 0.0821533, -0.07474714, -0.20395957, -0.16560583, -0.07983476, -0.19544126, -0.027634017, -0.057838816, -0.14035416] -sib[3][4][4] = [0.012380985, -0.04081459, 0.0821533, -0.07474714, -0.20395957, -0.16560583, -0.07983476, -0.19544126, -0.027634017, -0.057838816, -0.14035416] -sib[3][5][3] = [-0.007085464, -0.09665399, 0.011526372, -0.099398784, -0.2790046, -0.15970978, -0.082440555, -0.22966766, -0.027634017, -0.06556656, -0.18173482] -sib[3][5][4] = [-0.05487947, -0.045098934, 0.052111655, -0.10031113, 0.015462773, -0.02529343, -0.0042411042, 0.005197253, -0.0015446771, -0.006902779, -0.012733134] -sib[3][5][5] = [-0.007085464, -0.09665399, 0.011526372, -0.099398784, -0.2790046, -0.15970978, -0.082440555, -0.22966766, -0.027634017, -0.06556656, -0.18173482] -sib[3][6][3] = [0.0036555498, -0.036290288] -sib[3][6][4] = [0.14733498, -0.0077255554] -sib[3][6][5] = [0.109134026, -0.019898158] -sib[3][6][6] = [0.0036555498, -0.036290288] -sib[3][7][3] = [-0.031260066, -0.06856652, 0.04522199, -0.11676894, -0.13290358, -0.051449183, -0.03546544, -0.13028136, -0.024157416, -0.051094763, -0.17340602] -sib[3][7][4] = [-0.04330022, -0.058292788, 0.12432846, -0.08908352, 0.06723203, -0.026261263, -0.003667286, 0.05421242, -0.0042221253, -0.006662595, -0.0035444521] -sib[3][7][5] = [-0.08124242, -0.07744131, 0.043832168, -0.09079691, 0.087276354, -0.026261263, -0.0061679883, 0.031382058, -0.0042221253, -0.008626616, -0.020949975] -sib[3][7][6] = [-0.031865876, 0.0, -0.051752053, -0.008561299, 0.04309825, -0.004812273, 0.003292874, -0.021627404, 0.0, -9.703423E-4, -0.008190515] -sib[3][7][7] = [-0.031260066, -0.06856652, 0.04522199, -0.11676894, -0.13290358, -0.051449183, -0.03546544, -0.13028136, -0.024157416, -0.051094763, -0.17340602] -sib[3][8][3] = [-0.004966825, -0.11548082, -0.09893188, -0.064014524, -0.21564847, -0.14862426] -sib[3][8][4] = [0.10903192, -0.012690772, 0.044209372, -0.0033129558, 0.0020286364, -0.0037509361] -sib[3][8][5] = [0.06957626, -0.024951018, 0.025932293, -0.010997063, -0.007393649, -0.009085628] -sib[3][8][6] = [-0.124904506, 0.0, -0.052829344, -0.021456657, -0.0117155025, -0.009019228] -sib[3][8][7] = [0.023370812, -0.02231672, 0.112717025, -0.004918881, -0.0049644983, -0.006423532] -sib[3][8][8] = [-0.004966825, -0.11548082, -0.09893188, -0.064014524, -0.21564847, -0.14862426] -sib[3][9][3] = [-0.023793247, -0.022661865, 0.11254575, -0.032578483, -0.0630472, -0.12987432, -0.084608644, -0.11253104, -0.025895717, -0.058377907, -0.17978483] -sib[3][9][4] = [-0.04500141, -0.056061525, 0.14258005, -0.10864104, 0.009410702, -0.026652856, -0.0313039, -0.0019144005, -0.008684105, -0.0024631263, -0.0030857343] -sib[3][9][5] = [-0.07799548, -0.07521007, 0.07515881, -0.08904107, 0.02134251, -0.027846845, -0.034803454, -0.017191567, -0.008684105, -0.0024631263, -0.020491257] -sib[3][9][6] = [-0.0391086, 0.0, -0.03562153, -0.010701624, 0.032508813, -0.0078068906, 0.0049347775, -0.018508233, 0.009281213, -0.0061465385, -0.014085354] -sib[3][9][7] = [0.09251948, -0.06951603, -0.011008778, -0.07883953, -0.11552522, -0.033781793, -0.043712, -0.050451096, -0.0064717247, -0.010333326, -0.027232168] -sib[3][9][8] = [0.106523976, -0.025107507, -0.027313342, 0.0643436, -0.020281743, -3.880954E-4, 0.013332176, -0.041317776, 0.0, -0.00273389, 0.003756082] -sib[3][9][9] = [-0.023793247, -0.022661865, 0.11254575, -0.032578483, -0.0630472, -0.12987432, -0.084608644, -0.11253104, -0.025895717, -0.058377907, -0.17978483] -sib[3][10][3] = [0.049849, 0.015920937, -0.103512526, -0.0282223, -0.15162304, -0.1337772, -0.028855206] -sib[3][10][4] = [0.08486363, -0.010066313, -0.020019567, -0.015871307, -0.011928141, -0.033518903, 0.01838523] -sib[3][10][5] = [0.037066273, -0.022326551, -0.018309543, -0.019090429, -0.01069214, -0.030058809, 0.003265826] -sib[3][10][6] = [-0.052076407, -0.0042174547, -0.009381445, 0.0051205703, 1.1164299E-4, -0.0010366742, -0.022861157] -sib[3][10][7] = [-0.0239456, -0.0566907, -0.017041847, -0.0034001134, -0.018176608, -0.03981091, 0.06363928] -sib[3][10][8] = [0.009411858, -0.04614166, -0.022725593, 0.057259593, 0.0027610764, 7.999297E-4, 0.052491844] -sib[3][10][9] = [0.1020553, 0.018468937, -0.015737467, -0.019766212, -0.015054941, -0.024877794, 0.09240703] -sib[3][10][10] = [0.049849, 0.015920937, -0.103512526, -0.0282223, -0.15162304, -0.1337772, -0.028855206] -sib[3][11][3] = [0.007536241, -0.040037517, 0.11996899, -0.032113697, -0.07224075, -0.16129914, -0.090044595, -0.06993868, -0.024157416, -0.059060056, -0.13999487] -sib[3][11][4] = [-0.017537657, -0.06731382, 0.13803843, -0.12026193, -0.0013898304, -0.02524751, -0.03808943, 0.05428367, -0.0050572436, -0.0053151622, 0.022334352] -sib[3][11][5] = [-0.06939837, -0.086462356, 0.06968344, -0.120651685, 0.014701741, -0.02524751, -0.040590137, 0.026783044, -0.0069625564, -0.0053151622, -0.0043650935] -sib[3][11][6] = [-0.03669436, 0.0, -0.060164124, -0.010701624, 0.035589654, -0.006811307, -0.007939913, -0.023364406, 0.0, 0.005974566, -0.019980194] -sib[3][11][7] = [0.04058604, -0.07656428, 0.0022373926, -0.10308445, -0.10949445, -0.030023169, -0.046619054, -0.073886774, -0.007734212, -0.013185361, 0.0012359582] -sib[3][11][8] = [0.14499708, -0.036012515, 0.050642148, 0.067201555, 0.041129906, -7.761908E-4, 0.0034649817, -0.04812423, 0.0, 9.137141E-4, 0.011641268] -sib[3][11][9] = [0.118235655, -0.046149027, 0.062057465, -0.10321512, -0.047871336, -0.035129134, -0.026184201, 0.008284374, -0.003369519, -0.0063851266, -0.0033735158] -sib[3][11][10] = [0.10789909, 0.037529636, -9.849798E-4, -0.045202315, -0.030076612, -0.015593061, -0.019619161, -0.0038627228, -0.0014785305, -0.0019659526, -0.03767125] -sib[3][11][11] = [0.007536241, -0.040037517, 0.11996899, -0.032113697, -0.07224075, -0.16129914, -0.090044595, -0.06993868, -0.024157416, -0.059060056, -0.13999487] -sib[3][12][3] = [-0.012078681, -0.052106764, 0.14623025, -0.042062573, -0.08729188, -0.13380544, -0.11316432, -0.10609435, -0.020811122, -0.054954875, -0.13464893] -sib[3][12][4] = [0.023478685, -0.06084465, 0.13814482, -0.113175966, 0.009257614, -0.0294629, -0.03966321, 0.021958612, -0.0042221253, -0.008490396, 0.00443361] -sib[3][12][5] = [-0.0443518, -0.08318776, 0.07449434, -0.11546402, 0.021142684, -0.0294629, -0.03859923, 0.0048530586, -0.006127438, -0.008490396, -0.024924338] -sib[3][12][6] = [-0.03669436, 0.0, -0.06647178, -0.019262923, 0.02827518, -0.006811307, -3.673914E-4, -0.023156736, 0.010466568, 0.0012967229, -0.014085353] -sib[3][12][7] = [0.08656559, -0.06961218, -0.030577995, -0.09606805, -0.11571034, -0.037359156, -0.0589404, -0.100629196, -0.008667532, -0.019535828, -0.028648913] -sib[3][12][8] = [0.11239628, -0.036012515, 0.022052249, 0.03603155, 0.06799861, -0.006707558, 0.037565842, 0.012174852, 0.0, 9.137141E-4, 0.003756082] -sib[3][12][9] = [0.16298458, -0.029209461, 0.04123869, -0.0954872, -0.058416236, -0.040806353, -0.03461307, -0.033564482, -0.0025344007, -0.00956036, -0.02911105] -sib[3][12][10] = [0.071195826, 0.02620035, -0.100424424, -0.030469187, -0.01974526, -0.012084009, -0.025767213, -0.013560094, -0.0014785305, -0.0019659526, -0.03556287] -sib[3][12][11] = [0.19785225, -0.06643538, -0.04062798, -0.063266315, -0.11048587, -0.055547453, -0.06250958, -0.059802037, -0.0032337965, -0.007972743, -0.027523026] -sib[3][12][12] = [-0.012078681, -0.052106764, 0.14623025, -0.042062573, -0.08729188, -0.13380544, -0.11316432, -0.10609435, -0.020811122, -0.054954875, -0.13464893] -sib[3][13][3] = [0.010771354, -0.019358344, 0.12243471, -0.023350026, -0.115882576, -0.13268743, -0.09621497, -0.11421653, -0.029372318, -0.06953435, -0.13320039] -sib[3][13][4] = [1.9125821E-4, -0.05340885, 0.15930477, -0.10336607, 0.026721582, -0.029471397, -0.0346346, 0.041425057, -0.0042221253, -0.010078013, -0.018916365] -sib[3][13][5] = [-0.050628446, -0.07695184, 0.0776691, -0.098770864, 0.033575624, -0.027303372, -0.02913925, 0.022550065, -0.0042221253, -0.010078013, -0.043012403] -sib[3][13][6] = [-0.031865876, 0.0, -0.06479003, -0.025683897, 0.028119579, -0.006811307, -4.9054436E-4, -0.02747688, 0.0, 0.0, -0.016529191] -sib[3][13][7] = [0.08055597, -0.06303321, -0.023169972, -0.0893893, -0.09946756, -0.035199627, -0.04948042, -0.082291186, -0.0030968897, -0.021123445, -0.042704962] -sib[3][13][8] = [0.09519473, -0.034015164, -0.0030244961, 0.0270633, 0.05695989, -0.006707558, 0.037803967, 0.0015231725, 0.0, 8.561501E-4, 0.003756082] -sib[3][13][9] = [0.14372943, -0.021822449, 8.054506E-4, -0.07826577, -0.043684132, -0.038646825, -0.021407353, -0.01679664, -0.0025344007, -0.011147978, -0.045203086] -sib[3][13][10] = [0.052602503, 0.03135809, -0.09951402, -0.019169897, -0.018222826, -0.0102549195, -0.03811585, -0.019497504, 5.0247823E-11, -0.0019659526, -0.03598744] -sib[3][13][11] = [0.2177338, -0.0447733, -0.009973826, -0.0668631, -0.1266457, -0.053387925, -0.06280649, -0.055425752, -0.0032337965, -0.011147978, -0.03677142] -sib[3][13][12] = [0.15116192, -0.029928438, -0.0682897, -0.030506752, -0.075446546, -0.034077805, -0.03499894, -0.083393, -0.0059905644, -0.017430559, -0.05910195] -sib[3][13][13] = [0.010771354, -0.019358344, 0.12243471, -0.023350026, -0.115882576, -0.13268743, -0.09621497, -0.11421653, -0.029372318, -0.06953435, -0.13320039] -sib[3][14][3] = [-0.26056057, 0.13355096, 0.010081072, 0.04575086, -0.19626357, -0.05233198, 0.108429894, 0.099652715] -sib[3][14][4] = [-0.0051852446, 0.11604688, -0.00461397, -0.034131575, 0.027734272, -0.0053155567, -0.041085675, -0.0024728184] -sib[3][14][5] = [0.005049154, 0.08578702, -0.015223209, -0.046391815, 0.019369159, -0.0061849365, -0.05134018, -0.0024728184] -sib[3][14][6] = [0.29295436, -0.052116968, 0.007913021, 0.0, -0.0017050705, 0.0011060901, -0.021370051, -0.006811307] -sib[3][14][7] = [-0.05461452, 0.012974637, -0.04003219, -0.047290314, 0.0119293835, -0.009658267, 0.03194299, -0.0024728184] -sib[3][14][8] = [-0.057784926, 0.014249502, 0.111262836, 0.023619492, 0.012321563, -0.0024445008, 0.052491844, -7.761908E-4] -sib[3][14][9] = [-0.091370605, 0.07643362, -0.018527146, -0.017604437, 0.006615444, -0.011369062, 0.07140522, -0.0064892285] -sib[3][14][10] = [-0.0065967264, -0.056490522, -0.010225024, -0.040908042, -0.009007444, -0.0023863493, 0.044472635, -0.012659982] -sib[3][14][11] = [-0.031473212, 0.059070446, 0.0016594138, -0.044192065, -0.004975613, -0.006927175, 0.094520256, -0.007121347] -sib[3][14][12] = [0.014797458, 0.058989495, -0.0035725532, -0.030868255, -0.0056242477, -0.0053155567, 0.10149591, -0.00542962] -sib[3][14][13] = [-0.017712446, 0.040885523, -0.0027787832, -0.034492105, -0.007669338, -0.0045733177, 0.10792611, -0.005509171] -sib[3][14][14] = [-0.26056057, 0.13355096, 0.010081072, 0.04575086, -0.19626357, -0.05233198, 0.108429894, 0.099652715] -sib[4][0][0] = [-0.05979176] -sib[4][0][1] = [0.012160879] -sib[4][0][2] = [-0.01094074] -sib[4][0][3] = [0.0063267057] -sib[4][0][4] = [-0.05979176] -sib[4][1][1] = [-0.089409344, -0.12744133, -0.104752496, -0.17722015, -0.092124306, -0.21522388] -sib[4][1][2] = [0.045860104, -0.0010550766, -0.018948799, 0.002736577, -0.004425691, -0.0017134671] -sib[4][1][3] = [0.18554153, -0.0011986855, 0.022944935, -0.0010610658, -0.011354887, -0.0020284676] -sib[4][1][4] = [-0.089409344, -0.12744133, -0.104752496, -0.17722015, -0.092124306, -0.21522388] -sib[4][2][2] = [-0.06426263, -0.11276391, -0.1925163, -0.11661321, -0.10168587, -0.09961935, -0.05639325, -0.06719341, -0.090978056, -0.13028353, -0.04757992] -sib[4][2][3] = [-1.10459565E-10, -0.0011986855, 0.04283212, 0.0, -0.006403528, -0.0010610659, -0.004545454, -0.030168634, -0.009606322, -0.0035743571, -0.08554308] -sib[4][2][4] = [-0.06426263, -0.11276391, -0.1925163, -0.11661321, -0.10168587, -0.09961935, -0.05639325, -0.06719341, -0.090978056, -0.13028353, -0.04757992] -sib[4][3][3] = [-0.06058728, -0.0979148, -0.05424255, -0.11633432, -0.1772722, -0.10616377, -0.1507355, -0.12918414, -0.098134555, -0.12852645, -0.070781246] -sib[4][3][4] = [-0.06058728, -0.0979148, -0.05424255, -0.11633432, -0.1772722, -0.10616377, -0.1507355, -0.12918414, -0.098134555, -0.12852645, -0.070781246] -sib[4][5][4] = [-0.054044735, 0.012123318, 0.009650465, -0.09443181, -0.23345609, -0.12745614, -0.071106635, -0.19992904, -0.027634017, -0.057838816, -0.17831837] -sib[4][5][5] = [-0.054044735, 0.012123318, 0.009650465, -0.09443181, -0.23345609, -0.12745614, -0.071106635, -0.19992904, -0.027634017, -0.057838816, -0.17831837] -sib[4][6][4] = [-0.0014760229, -0.036290288] -sib[4][6][5] = [0.12858586, -0.015006369] -sib[4][6][6] = [-0.0014760229, -0.036290288] -sib[4][7][4] = [-0.07685082, -0.0109950565, 0.04009042, -0.12017377, -0.13290358, -0.051449183, -0.03546544, -0.13028136, -0.024157416, -0.051094763, -0.17340602] -sib[4][7][5] = [-0.049684986, -0.07010144, 0.08261798, -0.08824345, 0.08446929, -0.028010322, -0.0058490587, 0.051007185, -0.0042221253, -0.008554218, -0.01425946] -sib[4][7][6] = [-0.031865876, -0.0034969435, -0.051817406, -0.008561299, 0.04309825, -0.0039980677, 0.0050420538, -0.021627404, -0.0040520946, -9.703423E-4, -0.010745135] -sib[4][7][7] = [-0.07685082, -0.0109950565, 0.04009042, -0.12017377, -0.13290358, -0.051449183, -0.03546544, -0.13028136, -0.024157416, -0.051094763, -0.17340602] -sib[4][8][4] = [-0.010098394, -0.057909343, -0.10233671, -0.064014524, -0.21564847, -0.14862426] -sib[4][8][5] = [0.05164864, -0.021304846, 0.04144946, -0.012746122, -0.007393649, -0.009085628] -sib[4][8][6] = [-0.12496985, -0.0034969435, -0.052829344, -0.020642452, -0.0117155025, -0.011573848] -sib[4][8][7] = [0.030665996, -0.02231672, 0.112717025, -0.0066679395, 0.0055457638, -0.006423532] -sib[4][8][8] = [-0.010098394, -0.057909343, -0.10233671, -0.064014524, -0.21564847, -0.14862426] -sib[4][9][4] = [-0.06938398, 0.034909606, 0.10741418, -0.035983317, -0.0630472, -0.12987432, -0.084608644, -0.11253104, -0.025895717, -0.058377907, -0.17978483] -sib[4][9][5] = [-0.048896812, -0.0678702, 0.11461686, -0.10780097, 0.02315436, -0.029595902, -0.033485673, -5.4621685E-4, -0.008684105, -0.0024631263, -0.013800743] -sib[4][9][6] = [-0.0391086, -0.0034969435, -0.035686884, -0.010701624, 0.032508813, -0.0069926856, 0.0066839578, -0.018508233, 0.0052291187, -0.0061465385, -0.016639974] -sib[4][9][7] = [0.09522878, -0.06951603, -0.00371359, -0.07883953, -0.11552522, -0.03553085, -0.043712, -0.050451096, -0.0064717247, -0.010333326, -0.027232168] -sib[4][9][8] = [0.110481456, -0.025107507, -0.027313342, 0.0643436, -0.020281743, -3.880954E-4, 0.013332176, -0.041317776, 0.0, -0.00273389, 0.003756082] -sib[4][9][9] = [-0.06938398, 0.034909606, 0.10741418, -0.035983317, -0.0630472, -0.12987432, -0.084608644, -0.11253104, -0.025895717, -0.058377907, -0.17978483] -sib[4][10][4] = [0.044717442, 0.073492415, -0.103512526, -0.031627126, -0.15162304, -0.1337772, -0.07444595] -sib[4][10][5] = [0.06762118, -0.018680383, -0.018790904, -0.017205872, -0.01069214, -0.033518903, 0.022457847] -sib[4][10][6] = [-0.052141756, -0.007714398, -0.008567239, 0.0051205703, 1.1164299E-4, -0.0035912949, -0.022861157] -sib[4][10][7] = [-0.01665042, -0.0566907, -0.018790904, -0.0034001134, -0.018176608, -0.03981091, 0.06634858] -sib[4][10][8] = [0.009411858, -0.04614166, -0.022725593, 0.057259593, 0.002291532, 7.999297E-4, 0.056449328] -sib[4][10][9] = [0.10935048, 0.018468937, -0.018297859, -0.019766212, -0.015054941, -0.024877794, 0.09511633] -sib[4][10][10] = [0.044717442, 0.073492415, -0.103512526, -0.031627126, -0.15162304, -0.1337772, -0.07444595] -sib[4][11][4] = [-0.038054492, 0.017533954, 0.114837416, -0.035518527, -0.07224075, -0.16129914, -0.090044595, -0.06993868, -0.024157416, -0.059060056, -0.13999487] -sib[4][11][5] = [-0.036074486, -0.07912248, 0.115200095, -0.11752356, 0.019956019, -0.026996568, -0.040271208, 0.04096473, -0.0050572436, -0.0053151622, 0.0023254189] -sib[4][11][6] = [-0.03669436, -0.0034969435, -0.060229473, -0.010701624, 0.035589654, -0.005997102, -0.006190733, -0.023364406, -0.0040520946, 0.005974566, -0.022534816] -sib[4][11][7] = [0.04329534, -0.07656428, 0.00953258, -0.10308445, -0.10949445, -0.031772226, -0.046619054, -0.073886774, -0.007734212, -0.013185361, 0.0012359582] -sib[4][11][8] = [0.14895456, -0.036012515, 0.050642148, 0.067201555, 0.041129906, -7.761908E-4, 0.0034649817, -0.04812423, 0.0, 9.137141E-4, 0.011641268] -sib[4][11][9] = [0.12094496, -0.046149027, 0.06935266, -0.10321512, -0.046747983, -0.037689526, -0.026184201, 0.008284374, -0.003369519, -0.0063851266, -0.0033735158] -sib[4][11][10] = [0.10789909, 0.037529636, -9.849798E-4, -0.045202315, -0.030076612, -0.015593061, -0.019619161, -0.0038627228, -0.0014785305, -0.0019659526, -0.03767125] -sib[4][11][11] = [-0.038054492, 0.017533954, 0.114837416, -0.035518527, -0.07224075, -0.16129914, -0.090044595, -0.06993868, -0.024157416, -0.059060056, -0.13999487] -sib[4][12][4] = [-0.05766942, 0.0054647066, 0.1410987, -0.045467407, -0.08729188, -0.13380544, -0.11316432, -0.10609435, -0.020811122, -0.054954875, -0.13464893] -sib[4][12][5] = [-0.009443326, -0.07584788, 0.11864605, -0.11233589, 0.025575463, -0.031211957, -0.0382803, 0.017182902, -0.0042221253, -0.008490396, -0.015575324] -sib[4][12][6] = [-0.03669436, -0.0034969435, -0.066537134, -0.019262923, 0.02827518, -0.005997102, 0.0013817883, -0.023156736, 0.0064144735, 0.0012967229, -0.016639974] -sib[4][12][7] = [0.08927489, -0.06961218, -0.023282807, -0.09606805, -0.11571034, -0.039108217, -0.0589404, -0.100629196, -0.008667532, -0.019535828, -0.028648913] -sib[4][12][8] = [0.11635375, -0.036012515, 0.022052249, 0.03603155, 0.06799861, -0.006707558, 0.037565842, 0.012174852, 0.0, 9.137141E-4, 0.003756082] -sib[4][12][9] = [0.16569388, -0.029209461, 0.04853387, -0.0954872, -0.057292882, -0.04336675, -0.03461307, -0.033564482, -0.0025344007, -0.00956036, -0.02911105] -sib[4][12][10] = [0.071195826, 0.02620035, -0.100424424, -0.030469187, -0.01974526, -0.012084009, -0.025767213, -0.013560094, -0.0014785305, -0.0019659526, -0.03556287] -sib[4][12][11] = [0.20056158, -0.06643538, -0.032409538, -0.063266315, -0.11048587, -0.057296515, -0.06250958, -0.059802037, -0.0032337965, -0.007972743, -0.027523026] -sib[4][12][12] = [-0.05766942, 0.0054647066, 0.1410987, -0.045467407, -0.08729188, -0.13380544, -0.11316432, -0.10609435, -0.020811122, -0.054954875, -0.13464893] -sib[4][13][4] = [-0.034819357, 0.038213126, 0.11730314, -0.02675486, -0.115882576, -0.13268743, -0.09621497, -0.11421653, -0.029372318, -0.06953435, -0.13320039] -sib[4][13][5] = [-0.016722493, -0.06961197, 0.116871156, -0.10224965, 0.04181824, -0.029052429, -0.028820321, 0.036074564, -0.0042221253, -0.010078013, -0.029631376] -sib[4][13][6] = [-0.031865876, -0.0034969435, -0.06485539, -0.025683897, 0.028119579, -0.005997102, 0.0012586355, -0.02747688, -0.0040520946, 0.0, -0.019083811] -sib[4][13][7] = [0.08326527, -0.06303321, -0.015874784, -0.0893893, -0.09946756, -0.03694869, -0.04948042, -0.082291186, -0.0030968897, -0.021123445, -0.042704962] -sib[4][13][8] = [0.0991522, -0.034015164, -0.0030244961, 0.0270633, 0.05695989, -0.006707558, 0.037803967, 0.0015231725, 0.0, 8.561501E-4, 0.003756082] -sib[4][13][9] = [0.14643873, -0.021822449, 0.008100649, -0.07826577, -0.04256078, -0.041207217, -0.021407353, -0.01679664, -0.0025344007, -0.011147978, -0.045203086] -sib[4][13][10] = [0.052602503, 0.03135809, -0.09951402, -0.019169897, -0.018222826, -0.0102549195, -0.03811585, -0.019497504, 5.0247823E-11, -0.0019659526, -0.03598744] -sib[4][13][11] = [0.2204431, -0.0447733, -0.0017553885, -0.0668631, -0.1266457, -0.055136986, -0.06280649, -0.055425752, -0.0032337965, -0.011147978, -0.03677142] -sib[4][13][12] = [0.15387122, -0.029928438, -0.049746484, -0.033426255, -0.075446546, -0.03582687, -0.03499894, -0.083393, -0.0048520667, -0.017430559, -0.05910195] -sib[4][13][13] = [-0.034819357, 0.038213126, 0.11730314, -0.02675486, -0.115882576, -0.13268743, -0.09621497, -0.11421653, -0.029372318, -0.06953435, -0.13320039] -sib[4][14][4] = [-0.25785947, 0.12841938, 0.006676249, 0.103322335, -0.19626357, -0.05233198, 0.06283919, 0.099652715] -sib[4][14][5] = [-0.03720701, 0.10279249, -0.0155701935, -0.04274565, 0.024220739, -0.0061849365, -0.032148156, -0.004221876] -sib[4][14][6] = [0.29295436, -0.05218232, 0.007913021, -0.0034969435, -0.0017050705, -0.0029460045, -0.021370051, -0.005997102] -sib[4][14][7] = [-0.057200015, 0.02026982, -0.04003219, -0.047290314, 0.0119293835, -0.009658267, 0.034652296, -0.004221876] -sib[4][14][8] = [-0.057784926, 0.014249502, 0.111262836, 0.023619492, 0.012321563, -0.0024445008, 0.056449328, -7.761908E-4] -sib[4][14][9] = [-0.09395609, 0.083728805, -0.018527146, -0.017604437, 0.008007561, -0.011369062, 0.074114524, -0.009049619] -sib[4][14][10] = [-0.0062989416, -0.056490522, -0.010225024, -0.040908042, -0.009007444, -0.0023863493, 0.044472635, -0.012659982] -sib[4][14][11] = [-0.034058698, 0.06728889, 0.0016594138, -0.044192065, -0.004975613, -0.006927175, 0.09722956, -0.008870404] -sib[4][14][12] = [0.017230764, 0.0775327, -0.006492055, -0.030868255, -0.0021692405, -0.004177059, 0.104205206, -0.0071786777] -sib[4][14][13] = [-0.020297935, 0.048180707, -0.0027787832, -0.032672606, -0.007669338, -0.0045733177, 0.110635415, -0.007258229] -sib[4][14][14] = [-0.25785947, 0.12841938, 0.006676249, 0.103322335, -0.19626357, -0.05233198, 0.06283919, 0.099652715] -sib[5][0][0] = [-0.013991715] -sib[5][0][1] = [0.020473363] -sib[5][0][2] = [-0.0114432555] -sib[5][0][3] = [0.001716299] -sib[5][0][4] = [0.0026450125] -sib[5][0][5] = [-0.013991715] -sib[5][1][1] = [-0.02070929, -0.10959918, -0.08935779, -0.16785827, -0.092124306, -0.18564034] -sib[5][1][2] = [0.045357592, -0.0024686644, -0.018948799, 0.002736577, -0.004425691, -0.0017134671] -sib[5][1][3] = [0.20380627, -0.0011986855, 0.018373724, -0.0010610658, -0.011354887, -0.0020284676] -sib[5][1][4] = [0.18631344, 1.2342613E-10, 0.017089274, -0.0033572963, -0.008851382, -0.0020284676] -sib[5][1][5] = [-0.02070929, -0.10959918, -0.08935779, -0.16785827, -0.092124306, -0.18564034] -sib[5][2][2] = [-0.057222914, -0.09492177, -0.12381624, -0.10121852, -0.10252683, -0.09025747, -0.04938847, -0.059581477, -0.09315635, -0.12234431, -0.01799638] -sib[5][2][3] = [-1.10459565E-10, -0.0011986855, 0.03549111, 0.0, -0.004048791, -0.0010610659, -0.006800021, -0.03606269, -0.009606322, -0.0042461595, -0.08717637] -sib[5][2][4] = [-1.10459565E-10, 1.3019351E-10, 0.031250264, -0.004602578, 0.012307799, -0.0010610659, -0.0036521195, -0.023576815, -0.012198655, 0.0, -0.09329657] -sib[5][2][5] = [-0.057222914, -0.09492177, -0.12381624, -0.10121852, -0.10252683, -0.09025747, -0.04938847, -0.059581477, -0.09315635, -0.12234431, -0.01799638] -sib[5][3][3] = [-0.053547565, -0.122934654, -0.07447434, -0.12004759, -0.15799122, -0.10599553, -0.11088853, -0.111150794, -0.10031285, -0.1291133, -0.008397517] -sib[5][3][4] = [-9.0646456E-11, 2.235752E-10, 0.05345586, 0.0, -0.022630576, 7.305343E-4, 0.0031873789, 0.0077236216, -0.012198654, 0.0, -0.06923724] -sib[5][3][5] = [-0.053547565, -0.122934654, -0.07447434, -0.12004759, -0.15799122, -0.10599553, -0.11088853, -0.111150794, -0.10031285, -0.1291133, -0.008397517] -sib[5][4][4] = [-0.053547565, -0.080072656, 0.018722693, -0.09064961, -0.18364106, -0.09680189, -0.14517066, -0.13152951, -0.10031285, -0.112729274, -0.07246438] -sib[5][4][5] = [-0.053547565, -0.080072656, 0.018722693, -0.09064961, -0.18364106, -0.09680189, -0.14517066, -0.13152951, -0.10031285, -0.112729274, -0.07246438] -sib[5][6][5] = [-0.0069973017, -0.057975613] -sib[5][6][6] = [-0.0069973017, -0.057975613] -sib[5][7][5] = [-0.07812354, -0.05433413, -0.05680359, -0.14005183, -0.1564012, -0.045264285, -0.03546544, -0.13028136, -0.024157416, -0.043367013, -0.17340602] -sib[5][7][6] = [-0.027037395, -0.0016036503, -0.046380665, -0.0064209746, 0.04309825, -0.0039980677, 0.0036118033, -0.019141719, 0.0, -9.703423E-4, -0.008190515] -sib[5][7][7] = [-0.07812354, -0.05433413, -0.05680359, -0.14005183, -0.1564012, -0.045264285, -0.03546544, -0.13028136, -0.024157416, -0.043367013, -0.17340602] -sib[5][8][5] = [-0.10699241, -0.101248406, -0.12221478, -0.057829622, -0.21564847, -0.14862426] -sib[5][8][6] = [-0.1206842, -0.0016036503, -0.045305535, -0.017991304, -0.0117155025, -0.0067315595] -sib[5][8][7] = [0.039422035, -0.019231547, 0.1148796, -0.0066679395, -0.0049644983, -0.006423532] -sib[5][8][8] = [-0.10699241, -0.101248406, -0.12221478, -0.057829622, -0.21564847, -0.14862426] -sib[5][9][5] = [-0.0706567, -0.00842947, 0.0105201565, -0.055861387, -0.0865448, -0.123689435, -0.084608644, -0.11253104, -0.025895717, -0.05065016, -0.17978483] -sib[5][9][6] = [-0.034280118, -0.0016036503, -0.031616483, -0.008561299, 0.032508813, -0.0069926856, 0.005253707, -0.014723899, 0.009281213, -0.0061465385, -0.014085354] -sib[5][9][7] = [0.09625212, -0.06643085, 0.008681927, -0.07667696, -0.11552522, -0.03553085, -0.043712, -0.050451096, -0.0062997285, -0.010333326, -0.027232168] -sib[5][9][8] = [0.0955457, -0.025107507, -0.056608, 0.057471104, -0.016701257, 1.6950024E-4, 0.013332176, -0.041317776, 0.0, -0.004396819, 0.004836182] -sib[5][9][9] = [-0.0706567, -0.00842947, 0.0105201565, -0.055861387, -0.0865448, -0.123689435, -0.084608644, -0.11253104, -0.025895717, -0.05065016, -0.17978483] -sib[5][10][5] = [-0.052176554, 0.030153338, -0.097327635, -0.051505208, -0.15162304, -0.1337772, -0.075718686] -sib[5][10][6] = [-0.046405777, -0.005821105, -0.008567239, 0.0051205703, 1.1164299E-4, -0.0010366742, -0.020446917] -sib[5][10][7] = [-0.0042549046, -0.053605534, -0.018790904, -0.0012375494, -0.018893855, -0.03981091, 0.06737193] -sib[5][10][8] = [-0.030470861, -0.04614166, -0.022168, 0.04551848, 0.00461428, 0.00188003, 0.03547753] -sib[5][10][9] = [0.118106514, 0.021554112, -0.016426917, -0.017603647, -0.015054941, -0.024877794, 0.09857213] -sib[5][10][10] = [-0.052176554, 0.030153338, -0.097327635, -0.051505208, -0.15162304, -0.1337772, -0.075718686] -sib[5][11][5] = [-0.039327215, -0.025805116, 0.017943379, -0.0553966, -0.095738366, -0.15511423, -0.090044595, -0.06993868, -0.024157416, -0.051332314, -0.13999487] -sib[5][11][6] = [-0.029451635, -0.0016036503, -0.051301815, -0.008561299, 0.035589654, -0.005997102, -0.003960719, -0.019580074, 0.0, 0.005974566, -0.019980194] -sib[5][11][7] = [0.044318676, -0.0734791, 0.021928096, -0.10092189, -0.10949445, -0.031772226, -0.046619054, -0.073886774, -0.0075622164, -0.013185361, 0.0012359582] -sib[5][11][8] = [0.12798275, -0.036012515, 0.010759438, 0.055460453, 0.044710394, -2.1859515E-4, 0.0034649817, -0.04812423, 0.0, -7.4921496E-4, 0.012721368] -sib[5][11][9] = [0.122632876, -0.043063845, 0.08343441, -0.10105256, -0.04614701, -0.035818584, -0.026184201, 0.008284374, -0.0058744918, -0.00870971, -0.0033735158] -sib[5][11][10] = [0.10789909, 0.03907222, 0.0065080505, -0.045202315, -0.030076612, -0.015593061, -0.015956124, -0.0038627228, 0.012713905, -0.0019659526, -0.039875332] -sib[5][11][11] = [-0.039327215, -0.025805116, 0.017943379, -0.0553966, -0.095738366, -0.15511423, -0.090044595, -0.06993868, -0.024157416, -0.051332314, -0.13999487] -sib[5][12][5] = [-0.05894215, -0.03787438, 0.044204667, -0.06534549, -0.11078949, -0.12762056, -0.11316432, -0.10609435, -0.020811122, -0.04722713, -0.13464893] -sib[5][12][6] = [-0.029451635, -0.0016036503, -0.059930466, -0.014982273, 0.02827518, -0.005997102, 0.0036118033, -0.019372404, 0.010466568, 0.0012967229, -0.014085353] -sib[5][12][7] = [0.090298235, -0.066527, -0.010887292, -0.093905486, -0.11571034, -0.039108217, -0.0589404, -0.100629196, -0.008495537, -0.019535828, -0.028648913] -sib[5][12][8] = [0.09538196, -0.036012515, -0.017830458, 0.024290444, 0.07157909, -0.0061499625, 0.037565842, 0.012174852, 0.0, -7.4921496E-4, 0.004836182] -sib[5][12][9] = [0.16738178, -0.02612428, 0.06261563, -0.09332464, -0.05669192, -0.041495804, -0.03461307, -0.033564482, -0.0050393734, -0.0118849445, -0.02911105] -sib[5][12][10] = [0.071195826, 0.027742948, -0.092931375, -0.030469187, -0.01974526, -0.012084009, -0.02210418, -0.013560094, 0.012713905, -0.0019659526, -0.037766952] -sib[5][12][11] = [0.20401737, -0.06180762, -0.017890045, -0.061103754, -0.11048587, -0.057296515, -0.06250958, -0.059802037, -0.005738769, -0.007972743, -0.027523026] -sib[5][12][12] = [-0.05894215, -0.03787438, 0.044204667, -0.06534549, -0.11078949, -0.12762056, -0.11316432, -0.10609435, -0.020811122, -0.04722713, -0.13464893] -sib[5][13][5] = [-0.03609209, -0.0051259417, 0.020409117, -0.046632934, -0.1393802, -0.12650257, -0.09621497, -0.11421653, -0.029372318, -0.0618066, -0.13320039] -sib[5][13][6] = [-0.027037395, -0.0016036503, -0.058248725, -0.019262923, 0.028119579, -0.005997102, -1.7161481E-4, -0.023692548, 0.0, 0.0, -0.016529191] -sib[5][13][7] = [0.084288605, -0.05994803, -0.0034792693, -0.08722674, -0.09946756, -0.03694869, -0.04948042, -0.082291186, -0.0029248935, -0.021123445, -0.042704962] -sib[5][13][8] = [0.07818041, -0.034015164, -0.0429072, 0.015322188, 0.06054037, -0.0061499625, 0.037803967, 0.0015231725, 0.0, -8.0677896E-4, 0.004836182] -sib[5][13][9] = [0.14812665, -0.018737271, 0.022182394, -0.07610321, -0.041959807, -0.039336275, -0.021407353, -0.01679664, -0.0050393734, -0.013472561, -0.045203086] -sib[5][13][10] = [0.052602503, 0.032900687, -0.092021, -0.019169897, -0.018222826, -0.0102549195, -0.03445282, -0.019497504, 0.014192436, -0.0019659526, -0.038191523] -sib[5][13][11] = [0.22147283, -0.040145542, 0.011916089, -0.06470054, -0.1266457, -0.055136986, -0.06280649, -0.055425752, -0.005738769, -0.011147978, -0.03677142] -sib[5][13][12] = [0.16193217, -0.025300676, -0.04007332, -0.026181616, -0.075446546, -0.03582687, -0.03499894, -0.083393, -0.008495537, -0.017430559, -0.05910195] -sib[5][13][13] = [-0.03609209, -0.0051259417, 0.020409117, -0.046632934, -0.1393802, -0.12650257, -0.09621497, -0.11421653, -0.029372318, -0.0618066, -0.13320039] -sib[5][14][5] = [-0.25537568, 0.03152537, -0.013201834, 0.059983265, -0.15300572, -0.05233198, 0.06156646, 0.1058376] -sib[5][14][6] = [0.22932234, -0.047896665, 0.00977265, -0.0016036503, 0.0028055469, 0.0011060901, -0.018955812, -0.005997102] -sib[5][14][7] = [-0.057181142, 0.032665327, -0.03786962, -0.044205137, 0.01412938, -0.009486271, 0.03567564, -0.004221876] -sib[5][14][8] = [-0.10915528, -0.025633207, 0.09952172, 0.023619492, 0.012321563, -0.0024445008, 0.03547753, -2.1859512E-4] -sib[5][14][9] = [-0.09114166, 0.09781057, -0.016364582, -0.014519258, 0.010207557, -0.013874034, 0.07580243, -0.0071786777] -sib[5][14][10] = [-0.022430215, -0.048997488, -0.010225024, -0.039365456, -0.030367618, 0.011806087, 0.044472635, -0.012659982] -sib[5][14][11] = [-0.03267824, 0.08096037, 0.0038219786, -0.0395643, -0.002775615, -0.009432147, 0.09825929, -0.008870404] -sib[5][14][12] = [0.013550812, 0.08635787, 7.5257575E-4, -0.026240492, 0.0012436521, -0.007820529, 0.10984009, -0.0071786777] -sib[5][14][13] = [-0.016257526, 0.06910189, 0.0015463475, -0.028044844, -0.004256447, -0.0070782905, 0.11869636, -0.007258229] -sib[5][14][14] = [-0.25537568, 0.03152537, -0.013201834, 0.059983265, -0.15300572, -0.05233198, 0.06156646, 0.1058376] -sib[6][0][0] = [-0.022900363] -sib[6][0][1] = [-0.057151113] -sib[6][0][2] = [0.011239517] -sib[6][0][3] = [0.10355931] -sib[6][0][4] = [0.10113679] -sib[6][0][5] = [0.07846503] -sib[6][0][6] = [-0.022900363] -sib[6][1][1] = [-8.780435E-4, 0.054963592, -0.19108737, -0.12623905] -sib[6][1][2] = [0.08165514, 0.020282855, 0.009559401, 0.0] -sib[6][1][3] = [0.31926402, 0.18964835, 0.0109074125, -0.0049274187] -sib[6][1][4] = [0.3212951, 0.1837927, 0.0109074125, -0.007223649] -sib[6][1][5] = [0.27594438, 0.17922972, 0.010594603, -0.0014743196] -sib[6][1][6] = [-8.780435E-4, 0.054963592, -0.19108737, -0.12623905] -sib[6][2][2] = [-0.11222258, 0.050404858, 0.047185533, -0.12299454, -0.01300682, -0.12578073] -sib[6][2][3] = [-0.18014275, 0.024966255, -0.05153896, 0.10415388, 0.0067137536, -0.0041224123] -sib[6][2][4] = [-0.19134797, 0.055446297, -0.04143285, 0.12907921, 0.0076070875, -5.4805516E-4] -sib[6][2][5] = [-0.2072391, 0.047943812, -0.038106382, 0.11535951, 0.005871078, -5.480552E-4] -sib[6][2][6] = [-0.11222258, 0.050404858, 0.047185533, -0.12299454, -0.01300682, -0.12578073] -sib[6][3][3] = [0.016463423, -0.0050595235, -0.0043837857, -0.07365265, -0.0745069, -0.13254973] -sib[6][3][4] = [-0.23648699, 0.004247016, -0.013646705, 0.11907454, 0.014446586, -5.4805516E-4] -sib[6][3][5] = [-0.2675099, 0.035713844, -2.141227E-4, 0.123929575, 0.013603911, -0.0041251206] -sib[6][3][6] = [0.016463423, -0.0050595235, -0.0043837857, -0.07365265, -0.0745069, -0.13254973] -sib[6][4][4] = [-0.0053208517, -0.010587407, -0.014341103, -0.06938746, -0.07594687, -0.124691784] -sib[6][4][5] = [-0.2547534, 0.0011128939, -0.010320229, 0.11575825, 0.016701154, -5.480552E-4] -sib[6][4][6] = [-0.0053208517, -0.010587407, -0.014341103, -0.06938746, -0.07594687, -0.124691784] -sib[6][5][5] = [-0.046530344, -0.024754517, -0.026675642, -0.06694023, -0.08020722, -0.122011766] -sib[6][5][6] = [-0.046530344, -0.024754517, -0.026675642, -0.06694023, -0.08020722, -0.122011766] -sib[6][7][6] = [-0.06668398, 0.15701908, 0.053081654, -0.041562922, -0.09335676, -0.045879193] -sib[6][7][7] = [-0.06668398, 0.15701908, 0.053081654, -0.041562922, -0.09335676, -0.045879193] -sib[6][8][6] = [0.031888455, -0.020159408, -0.115749374, -0.068911076] -sib[6][8][7] = [0.016328888, 0.31059718, -0.046885177, -0.0030382373] -sib[6][8][8] = [0.031888455, -0.020159408, -0.115749374, -0.068911076] -sib[6][9][6] = [-0.015463634, 0.24337994, 0.055914782, 0.0537837, -0.15392841, -0.053162336] -sib[6][9][7] = [0.10410624, -0.18479788, 0.04730715, 0.012246521, -0.07957622, -8.776218E-4] -sib[6][9][8] = [0.027913697, 0.05140003, -0.092991486, 0.029301297, 0.0036965762, -0.006102523] -sib[6][9][9] = [-0.015463634, 0.24337994, 0.055914782, 0.0537837, -0.15392841, -0.053162336] -sib[6][10][6] = [0.1638811, 0.0075014764, -0.0685837, 0.017256824, 0.009674108, 0.008494894] -sib[6][10][7] = [-0.09328745, -0.04625144, 0.07584937, 0.09840125, -0.013758433, 0.21754192] -sib[6][10][8] = [0.030252352, 0.006564774, -0.0014200294, -0.066030756, 0.0021090396, -0.055661373] -sib[6][10][9] = [-0.030235123, 0.03063292, 1.0149321E-5, 0.02545148, -0.0042993072, 0.029465321] -sib[6][10][10] = [0.1638811, 0.0075014764, -0.0685837, 0.017256824, 0.009674108, 0.008494894] -sib[6][11][6] = [-0.01100229, 0.23418641, 0.098507136, 0.06120694, -0.15936437, -0.05384449] -sib[6][11][7] = [0.054312088, -0.17876709, 0.023871478, 0.02549269, -0.08248328, -0.0037296575] -sib[6][11][8] = [0.039586127, 0.12569854, -0.084939435, 0.055912003, -0.0021388545, -0.0024549188] -sib[6][11][9] = [-0.057456873, -0.036878854, 0.0153086055, -0.017903224, -0.02430544, 0.0027138065] -sib[6][11][10] = [-9.1476756E-4, -0.026575249, -0.045395516, 0.12486483, -0.090377145, 7.5696927E-4] -sib[6][11][11] = [-0.01100229, 0.23418641, 0.098507136, 0.06120694, -0.15936437, -0.05384449] -sib[6][12][6] = [-0.02428934, 0.21913527, 0.062351488, 0.08746822, -0.18248409, -0.049739305] -sib[6][12][7] = [0.08172652, -0.18498299, -0.002870936, -0.0073226904, -0.09480462, -0.010080125] -sib[6][12][8] = [0.060293876, 0.15256722, -0.024640348, 0.027322117, 0.031962015, -0.0024549188] -sib[6][12][9] = [-0.035604056, -0.047423758, -0.026540251, -0.038722, -0.032734312, -4.614269E-4] -sib[6][12][10] = [-0.018368417, -0.0162439, -0.055092886, 0.051493347, -0.09652519, 7.5696927E-4] -sib[6][12][11] = [-0.0030203306, -0.14671642, -0.01671135, 0.03598261, -0.07687208, -1.0438182E-4] -sib[6][12][12] = [-0.02428934, 0.21913527, 0.062351488, 0.08746822, -0.18248409, -0.049739305] -sib[6][13][6] = [-0.03134952, 0.19054458, 0.054229297, 0.06367267, -0.16553473, -0.064318776] -sib[6][13][7] = [0.03901016, -0.16874021, 0.015467081, 8.532498E-5, -0.085344635, -0.01166774] -sib[6][13][8] = [0.10142052, 0.14152852, -0.03529203, 0.0022453656, 0.032200135, -0.002512483] -sib[6][13][9] = [-0.08208025, -0.032691646, -0.009772409, -0.079155244, -0.01952859, -0.0020490438] -sib[6][13][10] = [-0.026550043, -0.0147214625, -0.061030302, 0.052403733, -0.10887383, 7.5696927E-4] -sib[6][13][11] = [-0.022819908, -0.16087684, -0.0112027, 0.024575166, -0.067042306, -0.0032796157] -sib[6][13][12] = [-0.029787974, -0.11174141, -0.028042313, -0.016218323, -0.045164082, -0.0054269037] -sib[6][13][13] = [-0.03134952, 0.19054458, 0.054229297, 0.06367267, -0.16553473, -0.064318776] -sib[6][14][6] = [-0.3345765, -0.05440959, 0.040200546, 0.12801376, 0.01691782, 0.08181266, 0.045465887, -0.06269189, 0.19499904, -0.03643303, -0.045039263] -sib[6][14][7] = [-0.11123689, -0.04801243, 0.108130954, -0.0027912362, 0.019480383, 0.08817583, 0.17541601, 0.03268152, -0.10618995, 8.067688E-4, 0.0019499091] -sib[6][14][8] = [0.08267829, -0.018383445, -0.0056146653, -0.008550599, -0.012715477, -0.06417089, 0.006681534, -0.05969155, 0.047013845, -0.0024445008, -0.0049756025] -sib[6][14][9] = [-0.05278799, -0.0128073795, 0.019861616, -0.04254823, 0.049759973, 0.005107398, 0.0054259934, 0.049033057, -0.021200787, -0.0060650813, 0.004518865] -sib[6][14][10] = [-0.045886233, -0.073182315, -0.0291582, 0.11211588, -0.0011666183, -0.039041538, -0.043296024, -0.025777517, -1.710013E-4, -0.0016210296, -3.3870904E-4] -sib[6][14][11] = [0.058548182, -0.009585906, 0.049257465, 0.054598287, 0.019539595, 0.034960963, -0.021758793, -0.012782857, -0.07152735, -0.0018835319, -0.0016170464] -sib[6][14][12] = [0.025623873, -0.0070910985, 0.052799314, 0.029978123, 0.015759178, 0.04479893, -0.010567277, 0.003709057, -0.080064036, 0.0029438091, 0.0021973252] -sib[6][14][13] = [9.183455E-4, -0.022048544, 0.05698071, 0.05393573, 0.015255726, 0.043666583, 0.0017024414, 0.013851647, -0.06619368, 0.0024183872, 0.0021973252] -sib[6][14][14] = [-0.3345765, -0.05440959, 0.040200546, 0.12801376, 0.01691782, 0.08181266, 0.045465887, -0.06269189, 0.19499904, -0.03643303, -0.045039263] -sib[7][0][0] = [0.010996293] -sib[7][0][1] = [0.021207577] -sib[7][0][2] = [0.008265113] -sib[7][0][3] = [0.005559855] -sib[7][0][4] = [0.0035264082] -sib[7][0][5] = [0.0021829614] -sib[7][0][6] = [-0.009157593] -sib[7][0][7] = [0.010996293] -sib[7][1][1] = [0.019516613, -0.042894334, -0.04891747, -0.16450386, -0.08597361, -0.16393876] -sib[7][1][2] = [0.065065965, -0.0010550767, -0.020631796, 0.002736577, -6.542017E-4, -0.00419551] -sib[7][1][3] = [0.2076498, 0.0028507598, 0.014616444, -0.00858758, -0.008421026, -0.0020284678] -sib[7][1][4] = [0.21006994, 0.0, 0.010835064, -0.0063792104, -0.008851382, -0.0020284678] -sib[7][1][5] = [0.23289569, 0.0, 0.019819837, -0.00408298, -0.008851382, -0.0052061304] -sib[7][1][6] = [0.051611308, -0.0020070989, -0.018679755, -3.151076E-4, 0.013253022, -0.011876351] -sib[7][1][7] = [0.019516613, -0.042894334, -0.04891747, -0.16450386, -0.08597361, -0.16393876] -sib[7][2][2] = [-0.057888865, -0.02821692, -0.08359034, -0.06077819, -0.08085317, -0.086903065, -0.058034517, -0.058742765, -0.0870358, -0.108123936, 0.0037051851] -sib[7][2][3] = [0.005249313, 0.0028507598, 0.03851226, -0.0037572803, -0.012854091, -0.0055656657, 0.023232648, -0.020314965, -0.0013696172, -0.0052313716, -0.08717637] -sib[7][2][4] = [0.005249313, 6.7673783E-12, 0.027485203, -0.006285575, 0.015750417, -0.00408298, -0.005906687, -0.026932385, -0.0039619496, 0.0, -0.09492986] -sib[7][2][5] = [0.0, 6.7673783E-12, 0.036819294, 0.0, 0.011115744, -0.0027740486, -0.0076426957, -0.019999389, -0.0039619496, -0.0014217849, -0.09329657] -sib[7][2][6] = [-0.002669402, -0.004425875, 0.015476611, 0.0035821022, -0.0015197482, -3.1510755E-4, 0.0013554007, -0.008296368, 0.0, -0.0026259448, -0.032617223] -sib[7][2][7] = [-0.057888865, -0.02821692, -0.08359034, -0.06077819, -0.08085317, -0.086903065, -0.058034517, -0.058742765, -0.0870358, -0.108123936, 0.0037051851] -sib[7][3][3] = [-0.054213516, -0.056229804, -0.03424845, -0.079607256, -0.13631754, -0.10264112, -0.119534604, -0.11031208, -0.0941923, -0.11489293, 0.013304057] -sib[7][3][4] = [0.005249313, 1.0014907E-10, 0.053822003, -0.0016829971, -0.023169383, 7.305342E-4, 9.328113E-4, 0.0043680533, -0.003961949, 0.0, -0.070870526] -sib[7][3][5] = [1.9813108E-11, 1.0014907E-10, 0.04538936, 0.0, -0.0011142243, -9.824485E-4, 9.0136426E-5, 0.017892864, -0.0065542813, -0.00499885, -0.07586638] -sib[7][3][6] = [0.0018903521, -0.0066188276, 0.037315063, 0.0030355034, -0.0015197482, -3.1510755E-4, 0.00258643, -0.005530912, -0.0012453651, -0.0026259448, -0.04723473] -sib[7][3][7] = [-0.054213516, -0.056229804, -0.03424845, -0.079607256, -0.13631754, -0.10264112, -0.119534604, -0.11031208, -0.0941923, -0.11489293, 0.013304057] -sib[7][4][4] = [-0.054213516, -0.056229804, -0.02998326, -0.06931724, -0.14184542, -0.10264112, -0.12097458, -0.120269395, -0.0941923, -0.10703498, -0.01796261] -sib[7][4][5] = [1.9813108E-11, 1.0014907E-10, 0.06440448, 0.0, -0.02382263, 0.0020394656, 0.0031873793, 0.011301048, -0.0056409836, -0.0014217849, -0.07289222] -sib[7][4][6] = [0.0018903521, -0.004425875, 0.037315063, 0.0030355034, -0.0015197482, -3.1510755E-4, 0.00258643, -0.005530912, -0.0012453651, -2.8477004E-4, -0.04723473] -sib[7][4][7] = [-0.054213516, -0.056229804, -0.02998326, -0.06931724, -0.14184542, -0.10264112, -0.12097458, -0.120269395, -0.0941923, -0.10703498, -0.01796261] -sib[7][5][5] = [-0.054213516, -0.051324546, -0.028492367, -0.06816616, -0.15643947, -0.10264112, -0.15897451, -0.12543847, -0.0941923, -0.11489293, -0.07503934] -sib[7][5][6] = [0.0018903521, -0.004425875, 0.03719254, 0.0016454, -0.0015197482, -3.1510755E-4, 0.00258643, -0.005530912, -0.0012453651, -0.0026259448, -0.0430724] -sib[7][5][7] = [-0.054213516, -0.051324546, -0.028492367, -0.06816616, -0.15643947, -0.10264112, -0.15897451, -0.12543847, -0.0941923, -0.11489293, -0.07503934] -sib[7][6][6] = [-0.085978806, -0.14015438] -sib[7][6][7] = [-0.085978806, -0.14015438] -sib[7][8][7] = [0.09145066, -0.07198008, 0.13344514, -0.019058011, -0.19137497, -0.08871789] -sib[7][8][8] = [0.09145066, -0.07198008, 0.13344514, -0.019058011, -0.19137497, -0.08871789] -sib[7][9][7] = [-0.031885665, -0.002001539, 0.048732176, 0.06327891, -0.068889074, -0.101456136, -0.06247451, -0.12991948, -0.029551104, -0.047641955, -0.14544168] -sib[7][9][8] = [0.07952398, -0.017923644, 0.010222033, 0.029505935, -0.0011618757, -3.880954E-4, 0.015562127, -0.018838957, 0.0, -0.004396819, 0.008740568] -sib[7][9][9] = [-0.031885665, -0.002001539, 0.048732176, 0.06327891, -0.068889074, -0.101456136, -0.06247451, -0.12991948, -0.029551104, -0.047641955, -0.14544168] -sib[7][10][7] = [-0.013964549, 0.03658127, -0.07509431, 0.067635104, -0.15079187, -0.09943407, -0.036947634] -sib[7][10][8] = [-0.004245987, -0.038026284, -0.019059833, 0.0013370246, 0.0010751414, 0.005784415, 0.024770517] -sib[7][10][9] = [0.08163267, -0.0052820547, -0.01810176, -0.037956532, -0.015054941, -0.024215773, 0.023180518] -sib[7][10][10] = [-0.013964549, 0.03658127, -0.07509431, 0.067635104, -0.15079187, -0.09943407, -0.036947634] -sib[7][11][7] = [-5.561798E-4, -0.019377183, 0.056155406, 0.06374371, -0.07808261, -0.13288094, -0.06791046, -0.08732714, -0.027812803, -0.048324108, -0.10565175] -sib[7][11][8] = [0.09843541, -0.028828653, 0.080446735, 0.034427915, 0.06900093, -7.761908E-4, 0.006813285, -0.014959782, 0.0, -7.49215E-4, 0.008740568] -sib[7][11][9] = [0.047241263, -0.069900006, 0.048805356, -0.112408206, -0.06311045, -0.037493426, -0.024437603, 0.010386061, -0.0050572436, -0.010720863, -0.0027114945] -sib[7][11][10] = [0.047056198, 0.042475596, -0.047744174, -0.057172924, -0.030490663, -0.014323417, -0.024300834, -0.005170907, -0.00481218, 6.394236E-11, -0.039119426] -sib[7][11][11] = [-5.561798E-4, -0.019377183, 0.056155406, 0.06374371, -0.07808261, -0.13288094, -0.06791046, -0.08732714, -0.027812803, -0.048324108, -0.10565175] -sib[7][12][7] = [-0.020171098, -0.031446446, 0.08241671, 0.05379483, -0.09313373, -0.10538727, -0.09103019, -0.1234828, -0.024466509, -0.044218924, -0.1003058] -sib[7][12][8] = [0.07449598, -0.028828653, 0.05895011, 0.002796925, 0.11660792, -0.006707558, 0.038684193, 0.039116763, 0.0, -7.49215E-4, 0.008740568] -sib[7][12][9] = [0.09199017, -0.052960448, 0.027986571, -0.104680285, -0.07365536, -0.043170646, -0.03286647, -0.031462796, -0.0042221253, -0.013896097, -0.028449029] -sib[7][12][10] = [0.010352926, 0.031146316, -0.1471836, -0.042439796, -0.020159317, -0.010814365, -0.030448886, -0.014868278, -0.00481218, 6.394236E-11, -0.037011046] -sib[7][12][11] = [0.10722286, -0.07493079, 0.025387798, -0.07814595, -0.12289652, -0.058971357, -0.060762983, -0.05770035, -0.0032337965, -0.012308481, -0.026861008] -sib[7][12][12] = [-0.020171098, -0.031446446, 0.08241671, 0.05379483, -0.09313373, -0.10538727, -0.09103019, -0.1234828, -0.024466509, -0.044218924, -0.1003058] -sib[7][13][7] = [0.0026789322, 0.0013019902, 0.058621146, 0.07250738, -0.12172444, -0.10426925, -0.07408085, -0.13160497, -0.03302771, -0.058798395, -0.09885727] -sib[7][13][8] = [0.0631651, -0.02597448, 0.037828177, -0.009120149, 0.11996424, -0.006707558, 0.04226387, 0.04394432, 0.0, -8.06779E-4, 0.008740568] -sib[7][13][9] = [0.07273503, -0.045573436, -0.012446653, -0.087458864, -0.058923244, -0.041011117, -0.019660754, -0.014694952, -0.0042221253, -0.015483716, -0.044541065] -sib[7][13][10] = [-0.008240411, 0.036304057, -0.14627323, -0.03114051, -0.018636882, -0.008985275, -0.04279752, -0.020805689, -0.0033336494, 6.394236E-11, -0.037435617] -sib[7][13][11] = [0.1255262, -0.053268705, 0.068387896, -0.08174273, -0.13905635, -0.05681183, -0.06105988, -0.053324066, -0.0032337965, -0.008510702, -0.03840468] -sib[7][13][12] = [0.03452136, -0.04630676, -0.02264944, -0.039773952, -0.0878572, -0.03750171, -0.03325234, -0.07886929, -0.0031040115, -0.021766298, -0.05843993] -sib[7][13][13] = [0.0026789322, 0.0013019902, 0.058621146, 0.07250738, -0.12172444, -0.10426925, -0.07408085, -0.13160497, -0.03302771, -0.058798395, -0.09885727] -sib[7][14][7] = [-0.26414376, 0.06973738, 0.10593847, 0.0664112, -0.1071457, -0.055987366, 0.10033749, 0.12807092] -sib[7][14][8] = [-0.11902496, 0.008113168, 0.06471773, 0.016862381, 0.004339601, -0.0024445008, 0.024770517, -7.761908E-4] -sib[7][14][9] = [-0.045185737, 0.06318151, -0.027720224, -0.041355416, 0.014794314, -0.013056786, 4.108306E-4, -0.00885352] -sib[7][14][10] = [-0.0061226934, -0.103249714, -0.022195634, -0.035962082, 3.397325E-5, -0.005719999, -0.01637028, -0.011390338] -sib[7][14][11] = [0.0053691436, 0.13743219, -0.013220221, -0.05268746, 0.0016800195, -0.006927175, 0.0023126388, -0.010545246] -sib[7][14][12] = [0.055539697, 0.11697571, -0.012839755, -0.047246568, 0.009567992, -0.0024290038, -0.016722832, -0.00885352] -sib[7][14][13] = [0.021415919, 0.086525775, -0.012045981, -0.049050927, 0.004067893, -0.0016867651, -0.008714438, -0.008933071] -sib[7][14][14] = [-0.26414376, 0.06973738, 0.10593847, 0.0664112, -0.1071457, -0.055987366, 0.10033749, 0.12807092] -sib[8][0][0] = [-0.1306883] -sib[8][0][1] = [-0.0031998698] -sib[8][0][2] = [-0.013289453] -sib[8][0][3] = [-0.008273367] -sib[8][0][4] = [-0.010306813] -sib[8][0][5] = [-0.010239473] -sib[8][0][6] = [0.0] -sib[8][0][7] = [4.4407556E-5] -sib[8][0][8] = [-0.1306883] -sib[8][1][1] = [-0.16752008] -sib[8][1][2] = [0.048054956] -sib[8][1][3] = [0.19381656] -sib[8][1][4] = [0.1962367] -sib[8][1][5] = [0.22047327] -sib[8][1][6] = [0.05407614] -sib[8][1][7] = [0.03259886] -sib[8][1][8] = [-0.16752008] -sib[8][2][2] = [-0.09066302, -0.13003787, -0.16142634, -0.15207109, -0.26127905, 7.7442965E-5] -sib[8][2][3] = [-0.0014265252, -0.0077776024, -7.2852474E-11, -0.004048791, 0.019596174, -0.08604795] -sib[8][2][4] = [-0.006029103, -0.0077776024, -7.2852474E-11, 0.016942471, 0.013651979, -0.09380145] -sib[8][2][5] = [-0.0014265252, -0.0077776024, -9.664457E-4, 0.012307799, 0.024396855, -0.09329657] -sib[8][2][6] = [0.0048993025, -0.0024187758, -0.0017435295, -4.2051418E-11, 0.02235306, -0.0348629] -sib[8][2][7] = [4.8703526E-4, 0.0038177134, -0.001485926, -0.0028415276, 0.05204464, -0.08211417] -sib[8][2][8] = [-0.09066302, -0.13003787, -0.16142634, -0.15207109, -0.26127905, 7.7442965E-5] -sib[8][3][3] = [-0.10949209, -0.15805076, -0.17716438, -0.20753546, -0.21193713, 0.009676317] -sib[8][3][4] = [-0.0014265252, -0.0077776024, 0.0017916001, -0.02197733, 0.03490593, -0.06974211] -sib[8][3][5] = [-0.0014265252, -0.0077776024, 8.251545E-4, 7.783045E-5, 0.03296693, -0.07586638] -sib[8][3][6] = [0.0043527037, -0.0046117287, 0.0011168586, -4.2051418E-11, 0.044191517, -0.049480405] -sib[8][3][7] = [4.8703526E-4, 0.0038177134, 3.0567427E-4, -0.016087243, 0.02829557, -0.06396307] -sib[8][3][8] = [-0.10949209, -0.15805076, -0.17716438, -0.20753546, -0.21193713, 0.009676317] -sib[8][4][4] = [-0.09920207, -0.15805076, -0.17716438, -0.21306334, -0.20767194, -0.02159035] -sib[8][4][5] = [-0.0014265252, -0.0077776024, 8.251545E-4, -0.022630576, 0.046899192, -0.07289222] -sib[8][4][6] = [0.0043527037, -0.0024187758, 0.0011168586, -4.2051418E-11, 0.044191517, -0.049480405] -sib[8][4][7] = [4.8703526E-4, 0.0038177134, 3.0567427E-4, -0.013569284, 0.032772113, -0.06130428] -sib[8][4][8] = [-0.09920207, -0.15805076, -0.17716438, -0.21306334, -0.20767194, -0.02159035] -sib[8][5][5] = [-0.098051, -0.1531455, -0.17716438, -0.22765741, -0.20618106, -0.07866707] -sib[8][5][6] = [0.0029626004, -0.0024187758, 0.0011168586, -4.2051418E-11, 0.044068985, -0.045318075] -sib[8][5][7] = [-0.0016342016, 0.0016858783, 3.0567427E-4, -0.021759551, 0.03046755, -0.060595863] -sib[8][5][8] = [-0.098051, -0.1531455, -0.17716438, -0.22765741, -0.20618106, -0.07866707] -sib[8][6][6] = [-0.2945214] -sib[8][6][7] = [-0.008584548] -sib[8][6][8] = [-0.2945214] -sib[8][7][7] = [-0.09558498, -0.14580676, -0.15594773, -0.101749435, -0.22991525, -0.059299488] -sib[8][7][8] = [-0.09558498, -0.14580676, -0.15594773, -0.101749435, -0.22991525, -0.059299488] -sib[8][9][8] = [0.78801787, 0.22985879, 0.36780447, 0.1078232, 0.29729065, 0.025334237] -sib[8][9][9] = [0.78801787, 0.22985879, 0.36780447, 0.1078232, 0.29729065, 0.025334237] -sib[8][10][8] = [0.3778783, 0.7138954, 0.12205364, 0.21584456, 0.05456043] -sib[8][10][9] = [-0.059722286, -0.09083596, 0.041860487, -0.028273586, -0.037889853] -sib[8][10][10] = [0.3778783, 0.7138954, 0.12205364, 0.21584456, 0.05456043] -sib[8][11][8] = [0.771168, 0.21248314, 0.34403247, 0.09235164, 0.30030355, 0.05547594] -sib[8][11][9] = [-0.19855681, -0.056822326, -0.0894422, -0.07517671, -0.0369342, -0.015578905] -sib[8][11][10] = [-0.084116936, 0.050267287, -0.011977294, -0.02446951, 9.7631407E-4, -0.03887186] -sib[8][11][11] = [0.771168, 0.21248314, 0.34403247, 0.09235164, 0.30030355, 0.05547594] -sib[8][12][8] = [0.761219, 0.20041385, 0.37152606, 0.07730051, 0.32656485, 0.060821887] -sib[8][12][9] = [-0.19082892, -0.039882757, -0.095119424, -0.08468197, -0.057752986, -0.04131644] -sib[8][12][10] = [-0.075814925, 0.0329127, -0.008468242, -0.014138159, -0.079590335, -0.03531133] -sib[8][12][11] = [-0.17127416, -0.049114514, -0.108307295, -0.13420378, -0.097858824, -0.034285795] -sib[8][12][12] = [0.761219, 0.20041385, 0.37152606, 0.07730051, 0.32656485, 0.060821887] -sib[8][13][8] = [0.7799316, 0.23316228, 0.37264413, 0.04870981, 0.3027693, 0.06227043] -sib[8][13][9] = [-0.17360747, -0.03249575, -0.09295989, -0.06994984, -0.098186225, -0.057408478] -sib[8][13][10] = [-0.064515635, 0.038070444, -0.006639153, -0.012615723, -0.07867995, -0.0357359] -sib[8][13][11] = [-0.16899568, -0.032994986, -0.10763662, -0.14808722, -0.09456525, -0.04353419] -sib[8][13][12] = [-0.1257692, -0.031805098, -0.08162767, -0.09916444, -0.1300085, -0.06586472] -sib[8][13][13] = [0.7799316, 0.23316228, 0.37264413, 0.04870981, 0.3027693, 0.06227043] -sib[8][14][8] = [-0.13940644, 0.70799375, -0.04977177] -sib[8][14][9] = [-0.056291524, -0.09443851, -0.016541561] -sib[8][14][10] = [-0.090868294, -0.04292191, -0.0012392468] -sib[8][14][11] = [-0.043322347, -0.081042856, -0.012329705] -sib[8][14][12] = [-0.048961572, -0.07352945, -0.009252757] -sib[8][14][13] = [-0.06984594, -0.078610934, -0.006592763] -sib[8][14][14] = [-0.13940644, 0.70799375, -0.04977177] -sib[9][0][0] = [-0.07034887] -sib[9][0][1] = [-0.0113618225] -sib[9][0][2] = [-0.006281595] -sib[9][0][3] = [0.012695111] -sib[9][0][4] = [0.010661664] -sib[9][0][5] = [0.009318218] -sib[9][0][6] = [-0.0031773483] -sib[9][0][7] = [0.009483286] -sib[9][0][8] = [-0.025391717] -sib[9][0][9] = [-0.07034887] -sib[9][1][1] = [-0.1011759, -0.07143136, -0.1059882, -0.17183484, -0.091196485, -0.18513407] -sib[9][1][2] = [0.052392587, -0.0010550766, -0.018948799, 0.002736577, -0.004425691, -0.0017134671] -sib[9][1][3] = [0.21478505, -0.0011986855, 0.018373724, -0.0010610658, -0.011354887, -0.0014217426] -sib[9][1][4] = [0.2172052, 1.2342613E-10, 0.012518062, -0.0060311006, -0.008851382, -0.0014217426] -sib[9][1][5] = [0.24003094, 1.2342613E-10, 0.019819837, -0.0010610658, -0.008851382, -0.0045994055] -sib[9][1][6] = [0.0508988, 0.0, -0.013630568, 2.6559156E-11, 0.014032768, -0.011876351] -sib[9][1][7] = [0.06701221, -0.0010550766, -0.026815884, -0.0017672072, -0.006077345, -0.0020284676] -sib[9][1][8] = [0.034916025, -0.0017478155, -0.0038286392, -0.006166786, 0.0, -0.014572306] -sib[9][1][9] = [-0.1011759, -0.07143136, -0.1059882, -0.17183484, -0.091196485, -0.18513407] -sib[9][2][2] = [-0.062582, -0.056753963, -0.20428288, -0.11784891, -0.10288976, -0.094234064, -0.054490432, -0.06126349, -0.08680433, -0.12707745, -0.017490098] -sib[9][2][3] = [0.0033699158, -0.0011986855, 0.04455407, 6.7594264E-12, -4.26305E-4, -0.0010610659, -0.006648346, -0.03606269, -0.011389632, -0.0035743571, -0.08656964] -sib[9][2][4] = [0.0033699158, 1.3019351E-10, 0.03462046, -0.004602578, 0.020564955, -0.0037348699, -0.005755012, -0.025610901, -0.013981964, 0.0, -0.09432313] -sib[9][2][5] = [0.0033699158, 1.3019351E-10, 0.04395455, 6.7594264E-12, 0.015930286, 2.4786548E-4, -0.0074910205, -0.023576815, -0.013981964, 0.0, -0.09268984] -sib[9][2][6] = [-0.0066579944, -0.0024187758, 0.019175712, 0.0035821022, -1.848424E-4, -0.002860388, -0.0014214896, -0.01028468, 0.0, 5.837672E-4, -0.036261305] -sib[9][2][7] = [0.0033699158, -0.0031338134, 0.056400374, 0.0019135604, 0.0015796584, -0.0021793821, -9.805523E-4, -0.015657805, -0.014526446, -0.005065879, -0.08211417] -sib[9][2][8] = [0.0, -0.0017478155, -0.021038817, 0.009213619, 0.020823805, 1.5195471E-4, 8.020853E-5, -0.009715047, -0.005318772, 0.0, -0.0102435] -sib[9][2][9] = [-0.062582, -0.056753963, -0.20428288, -0.11784891, -0.10288976, -0.094234064, -0.054490432, -0.06126349, -0.08680433, -0.12707745, -0.017490098] -sib[9][3][3] = [-0.058906656, -0.084766835, -0.15494096, -0.13667798, -0.15835413, -0.10997212, -0.115990505, -0.11283281, -0.09396083, -0.13384646, -0.007891232] -sib[9][3][4] = [0.0033699158, 2.235752E-10, 0.059863806, 6.7594264E-12, -0.018354842, -0.0019432697, 0.0010844865, 0.0056895404, -0.0139819635, 0.0, -0.0702638] -sib[9][3][5] = [0.0033699158, 2.235752E-10, 0.05252462, 6.7594264E-12, 0.0037003167, 0.0020394656, 2.4181162E-4, 0.014315439, -0.016574297, -0.0035770652, -0.07525965] -sib[9][3][6] = [-0.0020982404, -0.0046117287, 0.041014165, 0.0030355034, -1.848424E-4, 7.584112E-11, -1.9046036E-4, -0.0075192237, -0.0012453651, 5.837672E-4, -0.050878808] -sib[9][3][7] = [0.0033699158, -0.0031338134, 0.032651298, 0.0019135604, -0.0116660595, -3.87782E-4, 0.0036544318, -0.008762814, -0.01971111, -0.002893438, -0.06396307] -sib[9][3][8] = [0.0, -0.0017478155, -0.03509238, 0.0058086934, -4.3411588E-4, 1.5195471E-4, 0.007849641, -0.01592761, 5.395991E-4, -0.0051903967, -0.008748124] -sib[9][3][9] = [-0.058906656, -0.084766835, -0.15494096, -0.13667798, -0.15835413, -0.10997212, -0.115990505, -0.11283281, -0.09396083, -0.13384646, -0.007891232] -sib[9][4][4] = [-0.058906656, -0.084766835, -0.15067577, -0.12638798, -0.16388203, -0.10997212, -0.11743048, -0.12279012, -0.09396083, -0.1259885, -0.039157894] -sib[9][4][5] = [0.0033699158, 2.235752E-10, 0.070446275, 6.7594264E-12, -0.01900809, 0.0020394656, 0.0033390545, 0.0077236216, -0.015661, 0.0, -0.07228549] -sib[9][4][6] = [-0.0020982404, -0.0024187758, 0.041014165, 0.0030355034, -1.848424E-4, 7.584112E-11, -1.9046036E-4, -0.0075192237, -0.0012453651, 0.002924942, -0.050878808] -sib[9][4][7] = [0.0033699158, -0.0031338134, 0.03712784, 0.0019135604, -0.0091480985, -3.87782E-4, 0.0017899475, -0.008762814, -0.01971111, -0.002893438, -0.06130428] -sib[9][4][8] = [0.0, -0.0017478155, -0.029629342, 0.0058086934, -4.3411588E-4, 0.0022711253, 0.007849641, -0.01592761, 5.395991E-4, -0.004375567, -0.008748124] -sib[9][4][9] = [-0.058906656, -0.084766835, -0.15067577, -0.12638798, -0.16388203, -0.10997212, -0.11743048, -0.12279012, -0.09396083, -0.1259885, -0.039157894] -sib[9][5][5] = [-0.058906656, -0.079861574, -0.14918488, -0.1252369, -0.17847608, -0.10997212, -0.15543042, -0.12795919, -0.09396083, -0.13384646, -0.096234635] -sib[9][5][6] = [-0.0020982404, -0.0024187758, 0.04089164, 0.0016454, -1.848424E-4, -2.4944128E-11, -1.9046036E-4, -0.0075192237, -0.0012453651, 0.002521164, -0.046716478] -sib[9][5][7] = [0.0033699158, -0.0021318349, 0.034823276, -2.0767644E-4, -0.017338365, -3.87782E-4, 0.0036544318, -0.01277848, -0.01971111, -0.002893438, -0.060595863] -sib[9][5][8] = [-0.0018001135, -0.0017478155, -0.02844011, 0.008361049, 0.0012216937, 1.5195471E-4, 0.015772633, -0.010470614, -0.001196497, -0.0064024087, -0.008748124] -sib[9][5][9] = [-0.058906656, -0.079861574, -0.14918488, -0.1252369, -0.17847608, -0.10997212, -0.15543042, -0.12795919, -0.09396083, -0.13384646, -0.096234635] -sib[9][6][6] = [-0.24552456, -0.15129414] -sib[9][6][7] = [0.006215946, -0.0027184573] -sib[9][6][8] = [-0.023212386, 0.0010730807] -sib[9][6][9] = [-0.24552456, -0.15129414] -sib[9][7][7] = [-0.062582, -0.07252283, -0.15046915, -0.12517364, -0.081251726, -0.09594374, -0.12587339, -0.09161502, -0.09625019, -0.12978898, -0.06474607] -sib[9][7][8] = [0.0, -0.0017478155, -0.022458764, 0.0058086934, 0.021875191, 0.00120843, 0.010813163, -0.0064338804, -0.0069222776, 0.0, -0.009914654] -sib[9][7][9] = [-0.062582, -0.07252283, -0.15046915, -0.12517364, -0.081251726, -0.09594374, -0.12587339, -0.09161502, -0.09625019, -0.12978898, -0.06474607] -sib[9][8][8] = [-0.020221319, -0.036588803, -0.04983248, -0.15051144, -0.09741203, -0.1296102] -sib[9][8][9] = [-0.020221319, -0.036588803, -0.04983248, -0.15051144, -0.09741203, -0.1296102] -sib[9][10][9] = [0.058185466, 0.18593371, 0.013361546, 0.05250779, -0.15585752, -0.09314026, -0.024650116] -sib[9][10][10] = [0.058185466, 0.18593371, 0.013361546, 0.05250779, -0.15585752, -0.09314026, -0.024650116] -sib[9][11][9] = [0.010377872, 0.11967139, 0.13280055, 0.058676593, -0.046707705, -0.072339505, -0.08746066, -0.06420231, -0.029372318, -0.047733497, -0.12351745] -sib[9][11][10] = [0.13447289, 0.040904917, 0.18432452, -0.04691888, -0.031945646, -0.021555042, -0.01900445, -0.0034406362, -0.0014785305, 2.4921317E-11, -0.03767125] -sib[9][11][11] = [0.010377872, 0.11967139, 0.13280055, 0.058676593, -0.046707705, -0.072339505, -0.08746066, -0.06420231, -0.029372318, -0.047733497, -0.12351745] -sib[9][12][9] = [-0.009237043, 0.10760212, 0.1590618, 0.048727725, -0.061758842, -0.044845812, -0.110580385, -0.100357965, -0.026026024, -0.043628313, -0.11817151] -sib[9][12][10] = [0.09776962, 0.029575646, 0.07672849, -0.03404893, -0.021614298, -0.01804599, -0.025152503, -0.0131380055, -0.0014785305, 2.4921317E-11, -0.03556287] -sib[9][12][11] = [0.25697288, -0.088507816, -0.009320511, -0.032928392, -0.11276226, -0.057192735, -0.063904464, -0.063531876, -0.0032337965, -0.011226524, -0.028146785] -sib[9][12][12] = [-0.009237043, 0.10760212, 0.1590618, 0.048727725, -0.061758842, -0.044845812, -0.110580385, -0.100357965, -0.026026024, -0.043628313, -0.11817151] -sib[9][13][9] = [0.013612992, 0.14035055, 0.13526626, 0.06744026, -0.09034954, -0.0437278, -0.09363104, -0.108480155, -0.034587223, -0.058207784, -0.11672297] -sib[9][13][10] = [0.07917629, 0.034733385, 0.08110547, -0.022749638, -0.020091861, -0.0162169, -0.035234727, -0.017345145, 0.0, 2.4921317E-11, -0.03598744] -sib[9][13][11] = [0.2788935, -0.066845745, 0.022597812, -0.039993078, -0.12892209, -0.05503321, -0.06420136, -0.05915559, -0.0032337965, -0.014401756, -0.03739518] -sib[9][13][12] = [0.18689674, -0.057967238, -0.11454363, 0.031081818, -0.07772294, -0.035723086, -0.034426462, -0.08544957, -0.0071663177, -0.018500524, -0.059725706] -sib[9][13][13] = [0.013612992, 0.14035055, 0.13526626, 0.06744026, -0.09034954, -0.0437278, -0.09363104, -0.108480155, -0.034587223, -0.058207784, -0.11672297] -sib[9][14][9] = [-0.25209263, 0.1463825, 0.10087137, 0.20545979, -0.13530877, -0.057546876, 0.11127153, 0.18861237] -sib[9][14][10] = [-0.050928675, 0.11547458, -0.015944967, -0.037532754, -0.0047936477, -0.0023863493, 0.07104642, -0.018621963] -sib[9][14][11] = [0.00563729, 0.09164208, 0.028529447, -0.066264495, -0.007344978, -0.006927175, 0.15567993, -0.008766629] -sib[9][14][12] = [0.008060956, 0.013999755, 0.054548122, -0.058907047, 0.0070343534, -0.00649131, 0.13926981, -0.007074901] -sib[9][14][13] = [-0.019813104, -0.0053684125, 0.06431517, -0.060711406, 0.0015342542, -0.005749071, 0.14366095, -0.0071544526] -sib[9][14][14] = [-0.25209263, 0.1463825, 0.10087137, 0.20545979, -0.13530877, -0.057546876, 0.11127153, 0.18861237] -sib[10][0][0] = [-0.059043508] -sib[10][0][1] = [0.025374867] -sib[10][0][2] = [-0.010792654] -sib[10][0][3] = [-0.017562985] -sib[10][0][4] = [-0.018177532] -sib[10][0][5] = [-0.022483138] -sib[10][0][6] = [0.0017099967] -sib[10][0][7] = [-0.0060652886] -sib[10][0][8] = [0.030930744] -sib[10][0][9] = [-0.010792654] -sib[10][0][10] = [-0.059043508] -sib[10][1][1] = [-0.05920863, -0.090162024, -0.102852575, -0.14439504] -sib[10][1][2] = [0.04903557, -0.018948799, -0.0060798614, 0.0] -sib[10][1][3] = [0.18755428, 0.01895392, -0.013009057, 0.0] -sib[10][1][4] = [0.19139335, 0.01121319, -0.007386175, -0.0022962305] -sib[10][1][5] = [0.21125697, 0.020400032, -0.011000266, 0.0] -sib[10][1][6] = [0.053369354, -0.015731946, 0.015331525, 0.0034863725] -sib[10][1][7] = [0.054491006, -0.026815884, -0.0060798614, -7.323949E-4] -sib[10][1][8] = [0.089037456, 0.019426785, 0.0, -0.005944387] -sib[10][1][9] = [0.0468777, -0.00752901, -0.0060798614, 0.0] -sib[10][1][10] = [-0.05920863, -0.090162024, -0.102852575, -0.14439504] -sib[10][2][2] = [-0.048039384, -0.033936597, -0.1076843, -0.08561048, -0.18102275, -0.063882194, -0.27944726, -0.06961856] -sib[10][2][3] = [-0.03545773, -4.3242677E-11, 5.80196E-4, 2.0403232E-4, 0.0133339325, -0.0051465426, -0.13283041, -7.2852474E-11] -sib[10][2][4] = [-0.028865915, -4.3242677E-11, -0.005907449, 2.0403232E-4, 0.008808636, 0.016942471, -0.13296017, -7.2852474E-11] -sib[10][2][5] = [-0.022971857, -4.3242677E-11, 5.80196E-4, 2.0403232E-4, 0.015180563, 0.008977336, -0.15586855, 0.0013089313] -sib[10][2][6] = [-0.008296368, -0.002669402, 0.0014807231, -0.0024187758, 0.021646274, -0.0021272162, 0.079501994, 6.259845E-4] -sib[10][2][7] = [-0.014046128, 0.0, 0.0019135604, -0.004179495, 0.043879174, 0.0041841725, -0.024367616, -0.00114457] -sib[10][2][8] = [-0.016525857, -0.0025111497, 0.015022312, -9.820932E-4, 0.037353337, 0.022290064, 0.030802153, -8.340767E-4] -sib[10][2][9] = [-0.023818199, -1.0399219E-10, -2.977391E-11, -0.0010456814, -0.0041673095, -0.039385617, -0.0727223, -7.2852474E-11] -sib[10][2][10] = [-0.048039384, -0.033936597, -0.1076843, -0.08561048, -0.18102275, -0.063882194, -0.27944726, -0.06961856] -sib[10][3][3] = [-0.09960871, -0.030261248, -0.12651338, -0.11362336, -0.13168085, -0.11934658, -0.15076126, -0.085356615] -sib[10][3][4] = [0.0024345233, -2.3429569E-11, -0.0013048707, 2.040324E-4, 0.03006259, -0.02197733, -0.19214498, 0.0017916001] -sib[10][3][5] = [0.014920399, -2.3429569E-11, 5.80196E-4, 2.040324E-4, 0.023750644, -0.003252635, -0.21613938, 0.0031005316] -sib[10][3][6] = [-0.005530912, 0.0018903521, 9.3412434E-4, -0.0046117287, 0.043484725, -0.0021272162, 0.1461553, 0.0034863725] -sib[10][3][7] = [-0.0071511366, 0.0, 0.0019135604, -0.004179495, 0.020130098, -0.009061545, 0.03431515, 6.470303E-4] -sib[10][3][8] = [-0.022738421, -0.0025111497, 0.011617387, -0.0032574702, 0.023299767, 0.0019173237, 0.045053303, -8.340767E-4] -sib[10][3][9] = [-0.015549341, -4.3242677E-11, -2.977391E-11, -0.0010456813, -0.0017319783, -0.038781445, -0.08130009, 0.0032380675] -sib[10][3][10] = [-0.09960871, -0.030261248, -0.12651338, -0.11362336, -0.13168085, -0.11934658, -0.15076126, -0.085356615] -sib[10][4][4] = [-0.10956604, -0.030261248, -0.11622335, -0.11362336, -0.12741564, -0.12487447, -0.17254554, -0.085356615] -sib[10][4][5] = [0.008328579, -2.3429569E-11, 5.80196E-4, 2.040324E-4, 0.037682906, -0.02596104, -0.21185596, 0.0031005316] -sib[10][4][6] = [-0.005530912, 0.0018903521, 9.3412434E-4, -0.0024187758, 0.043484725, -0.0021272162, 0.15845388, 0.0034863725] -sib[10][4][7] = [-0.0071511366, 0.0, 0.0019135604, -0.004179495, 0.024606647, -0.0065435837, 0.025490979, 6.470303E-4] -sib[10][4][8] = [-0.022738421, -0.0025111497, 0.011617387, -0.0032574702, 0.028762808, 0.0019173237, 0.036042124, 0.0012850938] -sib[10][4][9] = [-0.015549341, -4.3242677E-11, -2.977391E-11, -0.0010456813, 0.0027445666, -0.038781445, -0.09012426, 0.0032380675] -sib[10][4][10] = [-0.10956604, -0.030261248, -0.11622335, -0.11362336, -0.12741564, -0.12487447, -0.17254554, -0.085356615] -sib[10][5][5] = [-0.11473512, -0.030261248, -0.11507228, -0.108718105, -0.12592475, -0.13946849, -0.19167395, -0.085356615] -sib[10][5][6] = [-0.005530912, 0.0018903521, -4.5597902E-4, -0.0024187758, 0.0433622, -0.0021272162, 0.13301979, 0.0034863725] -sib[10][5][7] = [-0.011166802, 0.0, -2.0767644E-4, -0.0031775166, 0.022302076, -0.014733851, 0.027197832, 6.470303E-4] -sib[10][5][8] = [-0.013207361, -0.004311263, 0.014169742, -0.0032574702, 0.03137211, 0.005228941, 0.008087682, -8.340767E-4] -sib[10][5][9] = [-0.019565009, -4.3242677E-11, -2.977391E-11, -0.0010456813, -0.0020602378, -0.044453755, -0.086815685, 0.0032380675] -sib[10][5][10] = [-0.11473512, -0.030261248, -0.11507228, -0.108718105, -0.12592475, -0.13946849, -0.19167395, -0.085356615] -sib[10][6][6] = [-0.10306311, -0.2031597] -sib[10][6][7] = [-0.004742817, -0.006305254] -sib[10][6][8] = [6.8480964E-5, 0.024987387] -sib[10][6][9] = [-0.0020921042, -0.014598351] -sib[10][6][10] = [-0.10306311, -0.2031597] -sib[10][7][7] = [-0.07839093, -0.033936597, -0.11500903, -0.101379365, -0.12720901, -0.04224415, -0.2632762, -0.07132824] -sib[10][7][8] = [-0.024684515, -0.0025111497, 0.011617387, -9.820932E-4, 0.027987499, 0.02499726, 0.04452046, -8.340767E-4] -sib[10][7][9] = [-0.031356703, -4.3242677E-11, -2.977391E-11, -0.0010456813, -0.019378543, -0.029830173, -0.0730696, -8.799264E-11] -sib[10][7][10] = [-0.07839093, -0.033936597, -0.11500903, -0.101379365, -0.12720901, -0.04224415, -0.2632762, -0.07132824] -sib[10][8][8] = [-0.061185136, -0.018472185, -0.10816938, -0.128322] -sib[10][8][9] = [-2.1848828E-5, -0.0061198915, -0.003867016, 0.0] -sib[10][8][10] = [-0.061185136, -0.018472185, -0.10816938, -0.128322] -sib[10][9][9] = [-0.071560964, -0.030261248, -0.0720657, -0.08686474, -0.093842424, -0.19551773, -0.24368197, -0.07979041] -sib[10][9][10] = [-0.071560964, -0.030261248, -0.0720657, -0.08686474, -0.093842424, -0.19551773, -0.24368197, -0.07979041] -sib[10][11][10] = [-0.051991284, -0.06937934, -0.016163576, 0.053064074, 0.08693847, 0.019920709, -0.13684247, -0.1479983] -sib[10][11][11] = [-0.051991284, -0.06937934, -0.016163576, 0.053064074, 0.08693847, 0.019920709, -0.13684247, -0.1479983] -sib[10][12][10] = [-0.08531261, -0.06413493, -0.05977267, -0.022204375, 0.051638376, -0.03699434, -0.17177294, -0.1723037] -sib[10][12][11] = [-0.06677956, 0.068897344, -0.041090466, -0.043190118, -0.10512746, -0.08707124, -0.060287543, -0.04228424] -sib[10][12][12] = [-0.08531261, -0.06413493, -0.05977267, -0.022204375, 0.051638376, -0.03699434, -0.17177294, -0.1723037] -sib[10][13][10] = [-0.09343482, -0.0412849, -0.041060112, 0.010544043, 0.027842823, -0.06558503, -0.17883311, -0.17118572] -sib[10][13][11] = [-0.049473174, 0.08055082, -0.038259365, -0.026170572, -0.08088517, -0.097375445, -0.08329418, -0.04012471] -sib[10][13][12] = [-0.06825196, 0.03314009, -0.027902417, -0.024682438, -0.1125624, -0.0713303, -0.09034211, -0.032421686] -sib[10][13][13] = [-0.09343482, -0.0412849, -0.041060112, 0.010544043, 0.027842823, -0.06558503, -0.17883311, -0.17118572] -sib[10][14][10] = [-0.29800513, 0.06716653, 0.030734247, 0.052991964] -sib[10][14][11] = [-0.09484864, 0.0031243088, -0.005557349, -0.06585641] -sib[10][14][12] = [-0.06504598, -0.006278834, -0.0043337257, -0.022472793] -sib[10][14][13] = [-0.090015024, -0.005038573, 0.0016201909, -0.03029346] -sib[10][14][14] = [-0.29800513, 0.06716653, 0.030734247, 0.052991964] -sib[11][0][0] = [-0.007372096] -sib[11][0][1] = [-0.0117301885] -sib[11][0][2] = [1.7489446E-4] -sib[11][0][3] = [-0.00123771] -sib[11][0][4] = [-0.003271157] -sib[11][0][5] = [-0.005359205] -sib[11][0][6] = [-0.002019499] -sib[11][0][7] = [0.010771036] -sib[11][0][8] = [-0.029056469] -sib[11][0][9] = [-0.023738708] -sib[11][0][10] = [0.0030166223] -sib[11][0][11] = [-0.007372096] -sib[11][1][1] = [0.0018578265, -0.054558165, -0.0604494, -0.17884487, -0.08183588, -0.20679036] -sib[11][1][2] = [0.056975745, 0.005668442, -0.018948799, 0.001544904, -0.004425691, -0.0042697564] -sib[11][1][3] = [0.20085223, 0.005524833, 0.018373724, -0.002252739, -0.011354887, -0.00299346] -sib[11][1][4] = [0.20327237, 0.006723519, 0.012518062, -0.0045489697, -0.008851382, -0.0039780317] -sib[11][1][5] = [0.22535354, 0.006723519, 0.019819837, -0.002252739, -0.008851382, -0.007155695] -sib[11][1][6] = [0.052056644, 0.0, -0.013630568, -7.422609E-11, 0.015331525, -0.011876351] -sib[11][1][7] = [0.068299964, 0.005668442, -0.026815884, -0.002252739, -0.006077345, -0.0076014055] -sib[11][1][8] = [0.027525611, -0.0019323565, 0.016894437, -0.006166786, 0.0011550465, -0.018592926] -sib[11][1][9] = [0.018857269, 0.0015575043, 8.552619E-4, 0.0014732641, -0.007938184, -0.0059139905] -sib[11][1][10] = [0.039753977, -5.9690885E-4, -0.017307745, -0.014496746, -0.024867129, -0.0062500164] -sib[11][1][11] = [0.0018578265, -0.054558165, -0.0604494, -0.17884487, -0.08183588, -0.20679036] -sib[11][2][2] = [-0.06727515, -0.039880756, -0.101249136, -0.07231011, -0.10864645, -0.101244085, -0.048028372, -0.06371725, -0.08343171, -0.11429499, -0.039146423] -sib[11][2][3] = [0.0, 0.0055248337, 0.030621234, 0.0, -4.26305E-4, -0.002252739, -0.006648346, -0.03606269, -0.00916679, -0.0052283416, -0.08814137] -sib[11][2][4] = [0.0, 0.006723519, 0.020687636, -0.004602578, 0.024846062, -0.002252739, -0.005755012, -0.029470876, -0.011759123, -0.0016539845, -0.09687942] -sib[11][2][5] = [0.0, 0.006723519, 0.029277127, 0.0, 0.015930286, -9.438076E-4, -0.0074910205, -0.023576815, -0.014191874, 0.0, -0.095246136] -sib[11][2][6] = [-0.002669402, -0.0024187758, 0.020333562, 0.0035821022, -1.848424E-4, -0.002860388, -3.935173E-12, -0.0014916197, 0.0012843906, -7.149898E-4, -0.036261305] -sib[11][2][7] = [0.0012985886, 0.0035897053, 0.05768812, 0.0019135604, 0.0015796584, -0.002664914, -9.805523E-4, -0.015657805, -0.014526446, -0.005065879, -0.08768711] -sib[11][2][8] = [-1.6855371E-11, -0.0019323565, -0.02441728, 0.012489964, 0.021536471, 1.5195471E-4, 0.0021693285, -0.030377915, -0.010483608, 0.0, -0.014740901] -sib[11][2][9] = [-6.074951E-11, 0.006723519, -0.013831265, 0.0, -0.038916126, 0.001473264, -0.018928917, -0.025520945, -0.015844021, 0.0013519778, -0.087466374] -sib[11][2][10] = [-0.02627029, 0.0013403501, -0.031924155, 0.011060903, -0.017858764, -0.017715154, -0.04361326, -0.0058456473, 0.0043095946, 4.7011906E-4, -0.039736304] -sib[11][2][11] = [-0.06727515, -0.039880756, -0.101249136, -0.07231011, -0.10864645, -0.101244085, -0.048028372, -0.06371725, -0.08343171, -0.11429499, -0.039146423] -sib[11][3][3] = [-0.0635998, -0.06789364, -0.051907234, -0.0911392, -0.16411085, -0.11698214, -0.109528445, -0.11528658, -0.09058821, -0.121063985, -0.029547555] -sib[11][3][4] = [1.9813108E-11, 0.006723519, 0.04593098, 0.0, -0.014073737, -4.6113878E-4, 0.0010844865, 0.001829566, -0.011759122, -0.0016539845, -0.07282009] -sib[11][3][5] = [1.9813108E-11, 0.006723519, 0.0378472, 0.0, 0.0037003167, 8.477926E-4, 2.4181162E-4, 0.014315439, -0.016784206, -0.0035770652, -0.07781593] -sib[11][3][6] = [0.0018903521, -0.0046117287, 0.042172015, 0.0030355034, -1.848424E-4, -2.4944128E-11, 0.0012310293, 0.0012738362, 3.9025443E-5, -7.149898E-4, -0.050878808] -sib[11][3][7] = [0.0012985886, 0.0035897053, 0.03393905, 0.0019135604, -0.0116660595, -8.7331375E-4, 0.0036544318, -0.008762814, -0.01971111, -0.002893438, -0.069536015] -sib[11][3][8] = [-1.6855371E-11, -0.004207734, -0.038470846, 0.009085039, 0.001163731, 1.5195471E-4, 0.015866034, -0.03659048, -0.0046252366, -0.0051903967, -0.013245526] -sib[11][3][9] = [0.0, 0.006723519, -0.013421126, 0.0, -0.03831196, 0.0047113313, -0.01512234, -0.017252088, -0.021028686, 0.0013519778, -0.055630326] -sib[11][3][10] = [-0.034883592, -0.009302226, -0.03815173, -0.012217581, -0.021105701, -0.012877224, -0.05123791, -0.017816678, 0.015131095, 0.002381786, -0.030664032] -sib[11][3][11] = [-0.0635998, -0.06789364, -0.051907234, -0.0911392, -0.16411085, -0.11698214, -0.109528445, -0.11528658, -0.09058821, -0.121063985, -0.029547555] -sib[11][4][4] = [-0.0635998, -0.06789364, -0.047642045, -0.08084916, -0.16963877, -0.11698214, -0.11096842, -0.12524389, -0.09058821, -0.11320603, -0.060814228] -sib[11][4][5] = [1.9813108E-11, 0.006723519, 0.055768855, 0.0, -0.01900809, 8.477926E-4, 0.0033390545, 0.0077236216, -0.015870908, 0.0, -0.07484178] -sib[11][4][6] = [0.0018903521, -0.0024187758, 0.042172015, 0.0030355034, -1.848424E-4, -2.4944128E-11, 0.0012310293, 0.0012738362, 3.9025443E-5, 0.001626185, -0.050878808] -sib[11][4][7] = [0.0012985886, 0.0035897053, 0.038415592, 0.0019135604, -0.0091480985, -8.7331375E-4, 0.0017899475, -0.008762814, -0.01971111, -0.002893438, -0.06687723] -sib[11][4][8] = [-1.6855371E-11, -0.004207734, -0.033007804, 0.009085039, 0.001163731, 0.0022711253, 0.015866034, -0.03659048, -0.0046252366, -0.004375567, -0.013245526] -sib[11][4][9] = [0.0, 0.006723519, -0.008944579, 0.0, -0.03831196, 0.0047113313, -0.013525365, -0.017252088, -0.021028686, 0.0013519778, -0.055630326] -sib[11][4][10] = [-0.034883592, -0.0032188678, -0.03815173, -0.012217581, -0.021105701, -0.012877224, -0.0531008, -0.017816678, 0.015079191, 4.7011906E-4, -0.036729466] -sib[11][4][11] = [-0.0635998, -0.06789364, -0.047642045, -0.08084916, -0.16963877, -0.11698214, -0.11096842, -0.12524389, -0.09058821, -0.11320603, -0.060814228] -sib[11][5][5] = [-0.0635998, -0.06298838, -0.046151154, -0.079698086, -0.18423282, -0.11698214, -0.14896835, -0.13041297, -0.09058821, -0.121063985, -0.11789097] -sib[11][5][6] = [0.0018903521, -0.0024187758, 0.042049482, 0.0016454, -1.848424E-4, -2.4944128E-11, 0.0012310293, -0.005530912, 3.9025443E-5, 0.0012224071, -0.046716478] -sib[11][5][7] = [0.0012985886, 0.004591684, 0.036111027, -2.0767644E-4, -0.017338365, -8.7331375E-4, 0.0036544318, -0.01277848, -0.01971111, -0.002893438, -0.06616881] -sib[11][5][8] = [-0.0018001135, -0.004207734, -0.030398501, 0.011637394, 0.004475348, 1.5195471E-4, 0.028451074, -0.02705942, -0.0063613327, -0.0064024087, -0.013245526] -sib[11][5][9] = [0.0, 0.006723519, -0.008013514, 0.0, -0.043984264, 0.0047113313, -0.013525365, -0.021267753, -0.021028686, 0.0013519778, -0.05226312] -sib[11][5][10] = [-0.034883592, -0.009302226, -0.04404863, -0.014543477, -0.019002203, -0.012877224, -0.04815198, -0.017816678, 0.015079191, -0.0015919966, -0.030664032] -sib[11][5][11] = [-0.0635998, -0.06298838, -0.046151154, -0.079698086, -0.18423282, -0.11698214, -0.14896835, -0.13041297, -0.09058821, -0.121063985, -0.11789097] -sib[11][6][6] = [-0.14249083, -0.14342183] -sib[11][6][7] = [0.007503695, -0.0027184573] -sib[11][6][8] = [-0.034999825, 0.0010730807] -sib[11][6][9] = [-0.03129263, -0.0020921042] -sib[11][6][10] = [3.224857E-4, 0.0] -sib[11][6][11] = [-0.14249083, -0.14342183] -sib[11][7][7] = [-0.06727515, -0.055649634, -0.047435418, -0.07963485, -0.08700845, -0.10295376, -0.119411334, -0.094068795, -0.092877574, -0.1170065, -0.08640239] -sib[11][7][8] = [-1.6855371E-11, -0.0019323565, -0.024417153, 0.009085039, 0.024243666, 0.00120843, 0.01756433, -0.023022685, -0.012087113, 0.0, -0.015578586] -sib[11][7][9] = [-0.0026487454, 0.006723519, -0.020125525, 0.0, -0.029360685, 0.001473264, -0.013388636, -0.03305945, -0.021028686, 0.0013519778, -0.042516686] -sib[11][7][10] = [-0.032058157, -0.0060932855, -0.059400894, 0.008735007, -0.0151623245, -0.017715154, -0.042483654, -0.0071071237, 0.021815212, 4.7011906E-4, -0.025759025] -sib[11][7][11] = [-0.06727515, -0.055649634, -0.047435418, -0.07963485, -0.08700845, -0.10295376, -0.119411334, -0.094068795, -0.092877574, -0.1170065, -0.08640239] -sib[11][8][8] = [-1.1867844E-4, -0.037765916, 0.011240432, -0.1627718, -0.0871527, -0.15140302] -sib[11][8][9] = [-0.021379888, 0.0043555237, 0.0034294096, 0.0014732641, -0.003512493, -0.004899758] -sib[11][8][10] = [0.009230928, 2.5665667E-4, -0.021784212, -0.014496746, -0.019540738, -0.019266201] -sib[11][8][11] = [-1.1867844E-4, -0.037765916, 0.011240432, -0.1627718, -0.0871527, -0.15140302] -sib[11][9][9] = [-0.0635998, -0.04113502, -0.1097605, -0.04355563, -0.21587107, -0.11415113, -0.11848409, -0.10366356, -0.093662694, -0.11480201, -0.057269786] -sib[11][9][10] = [-0.029095728, -0.012495045, -0.017741643, -0.01743728, -0.026143162, -0.014496746, -0.03998524, -0.01460873, 0.014109103, -0.001682732, -0.028564185] -sib[11][9][11] = [-0.0635998, -0.04113502, -0.1097605, -0.04355563, -0.21587107, -0.11415113, -0.11848409, -0.10366356, -0.093662694, -0.11480201, -0.057269786] -sib[11][10][10] = [0.016185801, 0.050528016, -0.10191259, -0.054291252, -0.0918271, -0.12861837, -0.086728685] -sib[11][10][11] = [0.016185801, 0.050528016, -0.10191259, -0.054291252, -0.0918271, -0.12861837, -0.086728685] -sib[11][12][11] = [-0.076583765, 0.1000884, 0.12034315, -0.030947931, -0.05483166, -0.1419828, -0.1134968, -0.111516334, -0.020103946, -0.050117638, -0.1205918] -sib[11][12][12] = [-0.076583765, 0.1000884, 0.12034315, -0.030947931, -0.05483166, -0.1419828, -0.1134968, -0.111516334, -0.020103946, -0.050117638, -0.1205918] -sib[11][13][11] = [-0.052365176, 0.08163097, 0.09329194, -0.02060718, -0.12897095, -0.17311844, -0.107881375, -0.14937714, -0.028665144, -0.072424866, -0.122559726] -sib[11][13][12] = [0.16537258, -0.049174204, -0.051370934, 0.027549144, -0.06851439, -0.04088717, -0.036889978, -0.055520758, -0.009449812, -0.019570488, -0.04900318] -sib[11][13][13] = [-0.052365176, 0.08163097, 0.09329194, -0.02060718, -0.12897095, -0.17311844, -0.107881375, -0.14937714, -0.028665144, -0.072424866, -0.122559726] -sib[11][14][11] = [-0.26430094, 0.104408175, 0.012823897, 0.14674018, -0.20307294, -0.051624805, 0.045293376, 0.059221696] -sib[11][14][12] = [-0.0047579724, 0.07093569, 0.059366412, -0.053807728, 0.0059649916, -0.008774804, 0.10658951, -0.0122389775] -sib[11][14][13] = [0.009189667, 0.022168335, 0.060918458, -0.06332501, 0.0021388289, -0.008032566, 0.099790245, -0.012318529] -sib[11][14][14] = [-0.26430094, 0.104408175, 0.012823897, 0.14674018, -0.20307294, -0.051624805, 0.045293376, 0.059221696] -sib[12][0][0] = [-0.04580705] -sib[12][0][1] = [0.015740372] -sib[12][0][2] = [-0.021155044] -sib[12][0][3] = [-0.004543713] -sib[12][0][4] = [-0.0065771597] -sib[12][0][5] = [-0.007920606] -sib[12][0][6] = [-0.004363601] -sib[12][0][7] = [1.2192794E-4] -sib[12][0][8] = [0.0038776542] -sib[12][0][9] = [-0.023993544] -sib[12][0][10] = [4.330249E-4] -sib[12][0][11] = [-0.04719632] -sib[12][0][12] = [-0.04580705] -sib[12][1][1] = [-0.07542464, -0.10021604, -0.092530094, -0.17725241, -0.09794984, -0.20757535] -sib[12][1][2] = [0.035645798, -0.0010550767, -0.018948799, 0.002736577, -0.004425691, -0.0017134671] -sib[12][1][3] = [0.19754623, -0.0011986856, 0.018373724, -0.0010610658, -0.011354887, -0.0014217427] -sib[12][1][4] = [0.19996637, 0.0, 0.012518062, -0.0033572963, -0.008851382, -0.0014217427] -sib[12][1][5] = [0.22279212, 0.0, 0.020722475, -0.0010610658, -0.0100392075, -0.0045994055] -sib[12][1][6] = [0.049712542, 0.0, -0.013630568, 0.0055411807, 0.015331525, -0.011876351] -sib[12][1][7] = [0.057650845, -0.0010550767, -0.026815884, -0.0010610658, -0.006077345, -0.0020284676] -sib[12][1][8] = [0.060459733, -0.006991262, 0.019426785, -0.006166786, 0.0, -0.019727793] -sib[12][1][9] = [0.018602433, -0.0051660147, 8.552619E-4, 0.0026649372, -0.01014044, -0.0033577022] -sib[12][1][10] = [0.06866573, -0.015890565, -0.02826008, -0.014496746, -0.02010237, -0.0080662165] -sib[12][1][11] = [0.041683365, 0.0, -0.007685021, 0.002736577, 0.005665609, -0.0026584687] -sib[12][1][12] = [-0.07542464, -0.10021604, -0.092530094, -0.17725241, -0.09794984, -0.20757535] -sib[12][2][2] = [-0.070287675, -0.085538626, -0.17853162, -0.10439081, -0.10050729, -0.099651605, -0.05405833, -0.0690917, -0.09129654, -0.1265269, -0.039931387] -sib[12][2][3] = [0.0, -0.0011986856, 0.027315225, 0.0, -0.0019767783, -0.0010610659, -0.006648346, -0.032485265, -0.008552926, -0.0052283416, -0.08656964] -sib[12][2][4] = [0.0, 6.7673783E-12, 0.01738163, -0.004602578, 0.019014481, -0.0010610659, -0.005755012, -0.02589345, -0.011145257, -0.0016539845, -0.09432313] -sib[12][2][5] = [0.0025123034, 6.7673783E-12, 0.026715722, 9.0263964E-4, 0.014379813, 2.4786548E-4, -0.0074910205, -0.019999389, -0.011145257, 0.0, -0.09268984] -sib[12][2][6] = [-0.002669402, -0.0024187758, 0.017989459, 0.0035821022, -1.848424E-4, 0.0026807927, -3.935173E-12, -0.005793827, 6.4053755E-11, -0.0033409346, -0.036261305] -sib[12][2][7] = [0.0, -0.0031338136, 0.047039017, 0.0019135604, 2.9184856E-5, -0.0014732409, -9.805523E-4, -0.015657805, -0.01168974, -0.005065879, -0.08211417] -sib[12][2][8] = [0.0, -0.006991262, 0.008516844, 0.015022312, 0.021536471, 1.5195471E-4, 0.0021693285, -0.0281388, -0.0126926545, 0.0, -0.015875768] -sib[12][2][9] = [-6.074951E-11, 9.7394426E-11, -0.014086101, 0.0, -0.040466603, 0.0026649372, -0.014669583, -0.018978458, -0.015576752, 0.0, -0.084910095] -sib[12][2][10] = [-0.033808216, -0.013953305, -0.037765395, 1.08569344E-4, -0.016909549, -0.017715154, -0.04482095, -0.009717198, 0.021477621, 4.7011906E-4, -0.042719033] -sib[12][2][11] = [-0.0022680296, 6.7673783E-12, -0.06998387, 0.0, -0.05669004, 0.002736577, -0.014201675, -0.028364774, -0.008958689, 0.0, -0.09505878] -sib[12][2][12] = [-0.070287675, -0.085538626, -0.17853162, -0.10439081, -0.10050729, -0.099651605, -0.05405833, -0.0690917, -0.09129654, -0.1265269, -0.039931387] -sib[12][3][3] = [-0.066612326, -0.11355151, -0.1291897, -0.123219885, -0.15597168, -0.11538966, -0.1155584, -0.12066103, -0.09845304, -0.1332959, -0.030332519] -sib[12][3][4] = [1.9813108E-11, 1.0014907E-10, 0.04262498, 0.0, -0.019905316, 7.305343E-4, 0.0010844865, 0.00540699, -0.011145257, -0.0016539845, -0.0702638] -sib[12][3][5] = [0.0025123034, 1.0014907E-10, 0.035285797, 9.0263964E-4, 0.0021498424, 0.0020394656, 2.4181162E-4, 0.017892864, -0.013737589, -0.0035770652, -0.07525965] -sib[12][3][6] = [0.0018903521, -0.0046117287, 0.039827913, 0.0030355034, -1.848424E-4, 0.0055411807, 0.0012310293, -0.0030283711, -0.001245365, -0.0033409346, -0.050878808] -sib[12][3][7] = [0.0, -0.0031338136, 0.023289941, 0.0019135604, -0.013216533, 3.1835935E-4, 0.0036544318, -0.008762814, -0.016874405, -0.002893438, -0.06396307] -sib[12][3][8] = [0.0, -0.009266639, -0.005536722, 0.011617387, 0.001163731, 1.5195471E-4, 0.015866034, -0.034351368, -0.0068342835, -0.0051903967, -0.014380393] -sib[12][3][9] = [0.0, 1.9077612E-10, -0.013675962, 0.0, -0.039862435, 0.0059030047, -0.010863007, -0.0107096005, -0.020761417, 0.0, -0.05307404] -sib[12][3][10] = [-0.042421516, -0.02459588, -0.043992974, -0.023169914, -0.020156486, -0.012877224, -0.0524456, -0.021688228, 0.032299124, 0.002381786, -0.033646762] -sib[12][3][11] = [-0.0022680296, 1.0014907E-10, -0.0678906, 2.176337E-12, -0.055077005, 0.0050104028, -0.008798122, -0.014618345, -0.014143352, -5.0404254E-11, -0.06282607] -sib[12][3][12] = [-0.066612326, -0.11355151, -0.1291897, -0.123219885, -0.15597168, -0.11538966, -0.1155584, -0.12066103, -0.09845304, -0.1332959, -0.030332519] -sib[12][4][4] = [-0.066612326, -0.11355151, -0.12492451, -0.112929866, -0.16149957, -0.11538966, -0.116998374, -0.13061833, -0.09845304, -0.12543795, -0.061599184] -sib[12][4][5] = [0.0025123034, 1.0014907E-10, 0.053207457, 9.0263964E-4, -0.020558564, 0.0020394656, 0.0033390545, 0.011301048, -0.012824291, 0.0, -0.07228549] -sib[12][4][6] = [0.0018903521, -0.0024187758, 0.039827913, 0.0030355034, -1.848424E-4, 0.0055411807, 0.0012310293, -0.0030283711, -0.001245365, -9.997599E-4, -0.050878808] -sib[12][4][7] = [0.0, -0.0031338136, 0.027766487, 0.0019135604, -0.010698572, 3.1835935E-4, 0.0017899475, -0.008762814, -0.016874405, -0.002893438, -0.06130428] -sib[12][4][8] = [0.0, -0.009266639, -7.368182E-5, 0.011617387, 0.001163731, 0.0022711253, 0.015866034, -0.034351368, -0.0068342835, -0.004375567, -0.014380393] -sib[12][4][9] = [0.0, 1.9077612E-10, -0.009199415, 0.0, -0.039862435, 0.0059030047, -0.009266032, -0.0107096005, -0.020761417, 0.0, -0.05307404] -sib[12][4][10] = [-0.042421516, -0.018512525, -0.043992974, -0.023169914, -0.020156486, -0.012877224, -0.05430849, -0.021688228, 0.032247216, 4.7011906E-4, -0.039712198] -sib[12][4][11] = [-0.0022680296, 1.0014907E-10, -0.06341405, 2.176337E-12, -0.055077005, 0.0050104028, -0.008798122, -0.014618345, -0.014143352, 0.0, -0.06282607] -sib[12][4][12] = [-0.066612326, -0.11355151, -0.12492451, -0.112929866, -0.16149957, -0.11538966, -0.116998374, -0.13061833, -0.09845304, -0.12543795, -0.061599184] -sib[12][5][5] = [-0.066612326, -0.10864625, -0.12343362, -0.11177879, -0.17609362, -0.11538966, -0.1549983, -0.13578743, -0.09845304, -0.1332959, -0.11867592] -sib[12][5][6] = [0.0018903521, -0.0024187758, 0.03970538, 0.0016454, -1.848424E-4, 0.0055411807, 0.0012310293, -0.00983312, -0.0012453651, -0.0014035378, -0.046716478] -sib[12][5][7] = [0.0, -0.002131835, 0.02546192, -2.0767644E-4, -0.018888839, 3.1835935E-4, 0.0036544318, -0.01277848, -0.016874405, -0.002893438, -0.060595863] -sib[12][5][8] = [-0.0018001135, -0.009266639, 0.0025356233, 0.014169742, 0.004475348, 1.5195471E-4, 0.028451074, -0.024820304, -0.00857038, -0.0064024087, -0.014380393] -sib[12][5][9] = [0.0, 1.9077612E-10, -0.00826835, 0.0, -0.04553474, 0.0059030047, -0.009266032, -0.014725266, -0.020761417, 0.0, -0.04970683] -sib[12][5][10] = [-0.042421516, -0.02459588, -0.049889874, -0.02549581, -0.018052988, -0.012877224, -0.049359668, -0.021688228, 0.032247216, -0.0015919966, -0.033646762] -sib[12][5][11] = [-0.0022680296, 1.0014907E-10, -0.0758889, 2.176337E-12, -0.06074931, 0.0050104028, -0.008798122, -0.01863401, -0.014143352, 0.0, -0.059458848] -sib[12][5][12] = [-0.066612326, -0.10864625, -0.12343362, -0.11177879, -0.17609362, -0.11538966, -0.1549983, -0.13578743, -0.09845304, -0.1332959, -0.11867592] -sib[12][6][6] = [-0.21977329, -0.14708066] -sib[12][6][7] = [-0.0031454123, -0.0027184573] -sib[12][6][8] = [-0.0020657047, 0.0010730807] -sib[12][6][9] = [-0.031547464, -0.0020921042] -sib[12][6][10] = [-0.0027999387, 0.0] -sib[12][6][11] = [-0.038398787, -0.0020921042] -sib[12][6][12] = [-0.21977329, -0.14708066] -sib[12][7][7] = [-0.070287675, -0.10130751, -0.12471788, -0.11171554, -0.07886928, -0.10136128, -0.12544128, -0.09944325, -0.1007424, -0.12923843, -0.087187335] -sib[12][7][8] = [0.0, -0.006991262, 0.008516971, 0.011617387, 0.024243666, 0.00120843, 0.01756433, -0.020783573, -0.01429616, 0.0, -0.016713453] -sib[12][7][9] = [-0.0026487454, 1.9077612E-10, -0.020380361, 0.0, -0.030911159, 0.0026649372, -0.009129303, -0.026516961, -0.020761417, 0.0, -0.0399604] -sib[12][7][10] = [-0.03959608, -0.02138694, -0.065242134, -0.002217327, -0.014213109, -0.017715154, -0.04369135, -0.0109786745, 0.038983237, 4.7011906E-4, -0.028741756] -sib[12][7][11] = [-0.0022680296, 1.0014907E-10, -0.07734001, 0.0, -0.07001731, 0.002736577, -0.008661393, -0.030647058, -0.014143352, 0.0, -0.04481265] -sib[12][7][12] = [-0.070287675, -0.10130751, -0.12471788, -0.11171554, -0.07886928, -0.10136128, -0.12544128, -0.09944325, -0.1007424, -0.12923843, -0.087187335] -sib[12][8][8] = [-0.07740114, -0.08342379, -0.020840252, -0.16117935, -0.10326665, -0.152188] -sib[12][8][9] = [-0.021634724, -0.0023679952, 0.0034294096, 0.0026649372, -0.00571475, -0.0023434684] -sib[12][8][10] = [0.021962434, -0.015037, -0.03273655, -0.014496746, -0.014775982, -0.021082401] -sib[12][8][11] = [0.0036583208, 0.0, -0.004733991, 0.002736577, 0.007878454, -0.0025892365] -sib[12][8][12] = [-0.07740114, -0.08342379, -0.020840252, -0.16117935, -0.10326665, -0.152188] -sib[12][9][9] = [-0.066612326, -0.086792886, -0.18704298, -0.07563632, -0.2077319, -0.112558655, -0.124514036, -0.10903801, -0.10152752, -0.12703392, -0.05805475] -sib[12][9][10] = [-0.03663365, -0.0277887, -0.023582887, -0.028389614, -0.025193946, -0.014496746, -0.04119293, -0.01848028, 0.031277128, -0.001682732, -0.032713443] -sib[12][9][11] = [-0.0022680296, -0.0029060307, -0.017712247, 0.0, -0.078158826, 0.0032188026, -0.009429961, -0.013295274, -0.008958689, 0.0, -0.05821557] -sib[12][9][12] = [-0.066612326, -0.086792886, -0.18704298, -0.07563632, -0.2077319, -0.112558655, -0.124514036, -0.10903801, -0.10152752, -0.12703392, -0.05805475] -sib[12][10][10] = [-0.043696746, 0.017504156, -0.108026385, -0.097694285, -0.084334195, -0.13396113, -0.08974121] -sib[12][10][11] = [-0.046185188, 0.0040996876, 0.002736577, -0.021457953, 0.014619722, -0.044528395, -0.0011340148] -sib[12][10][12] = [-0.043696746, 0.017504156, -0.108026385, -0.097694285, -0.084334195, -0.13396113, -0.08974121] -sib[12][11][11] = [-0.05562356, -0.056120094, -0.066163555, -0.02676644, -0.22905226, -0.097308025, -0.078940906, -0.114429586, -0.084635064, -0.12053168, -0.0600905] -sib[12][11][12] = [-0.05562356, -0.056120094, -0.066163555, -0.02676644, -0.22905226, -0.097308025, -0.078940906, -0.114429586, -0.084635064, -0.12053168, -0.0600905] -sib[12][13][12] = [-0.0634601, 0.121503256, 0.0905497, 0.03245703, -0.10737981, -0.11269342, -0.08528571, -0.09541298, -0.025729481, -0.062081803, -0.118391044] -sib[12][13][13] = [-0.0634601, 0.121503256, 0.0905497, 0.03245703, -0.10737981, -0.11269342, -0.08528571, -0.09541298, -0.025729481, -0.062081803, -0.118391044] -sib[12][14][12] = [-0.2922967, 0.09841027, 0.05751633, 0.13540663, -0.19225334, -0.04868915, 0.03556701, 0.08739309] -sib[12][14][13] = [-0.048450273, 0.04265136, 0.018110206, -0.08852613, 0.007167372, -0.0075320313, 0.051161762, -0.011463221] -sib[12][14][14] = [-0.2922967, 0.09841027, 0.05751633, 0.13540663, -0.19225334, -0.04868915, 0.03556701, 0.08739309] -sib[13][0][0] = [-0.002577262] -sib[13][0][1] = [0.020385752] -sib[13][0][2] = [-0.003985493] -sib[13][0][3] = [0.01262584] -sib[13][0][4] = [0.010592394] -sib[13][0][5] = [0.009248944] -sib[13][0][6] = [-0.0020194987] -sib[13][0][7] = [0.01729148] -sib[13][0][8] = [0.0043466156] -sib[13][0][9] = [-0.015604364] -sib[13][0][10] = [0.002398637] -sib[13][0][11] = [-0.029153213] -sib[13][0][12] = [-0.019152384] -sib[13][0][13] = [-0.002577262] -sib[13][1][1] = [-0.0035322793, -0.056849692, -0.09389981, -0.17096713, -0.101472065, -0.19047466] -sib[13][1][2] = [0.05281534, -0.0010550767, -0.013799829, 0.002736577, -0.004425691, -0.0017134671] -sib[13][1][3] = [0.21471578, -0.0011986856, 0.018373724, -0.0010610658, -0.011354887, -0.0014217427] -sib[13][1][4] = [0.21713592, -0.0019344183, 0.012518062, -0.0033572963, -0.008851382, -0.0014217427] -sib[13][1][5] = [0.23996167, 0.0, 0.019819837, -0.0010610658, -0.0100392075, -0.0045994055] -sib[13][1][6] = [0.052056644, 0.003251902, -0.008108399, 0.0055411807, 0.015331525, -0.011876351] -sib[13][1][7] = [0.07482041, -0.0010550767, -0.026815884, -0.0010610658, -0.006077345, -0.0020284676] -sib[13][1][8] = [0.060928695, -0.003495631, 0.021835841, -0.008007782, 0.0, -0.020987764] -sib[13][1][9] = [0.026991613, -0.0051660147, -0.0010380638, -0.0010610658, -0.01014044, -0.001910735] -sib[13][1][10] = [0.07063134, -0.028143845, -0.024677392, -0.014496746, -0.02144141, -0.0075631905] -sib[13][1][11] = [0.08260161, 0.0, -0.014365587, 0.002736577, 0.005665609, -0.0026584687] -sib[13][1][12] = [0.14335619, 0.0, 0.01850898, -0.0010610658, -0.009589838, -0.0020284676] -sib[13][1][13] = [-0.0035322793, -0.056849692, -0.09389981, -0.17096713, -0.101472065, -0.19047466] -sib[13][2][2] = [-0.072285526, -0.042172294, -0.10663923, -0.10576053, -0.10048705, -0.09336635, -0.05242186, -0.061479766, -0.08743159, -0.1241359, -0.022830697] -sib[13][2][3] = [0.0, -0.0011986856, 0.044484794, 0.0, -0.0016183588, -0.0010610659, -0.006648346, -0.032485265, -0.008552926, -0.0035743571, -0.08656964] -sib[13][2][4] = [0.0, -0.0019344183, 0.034551185, -0.004602578, 0.0193729, -0.0010610659, -0.005755012, -0.02589345, -0.011145257, 0.0, -0.09432313] -sib[13][2][5] = [0.0, 6.7673783E-12, 0.043885276, 1.4115933E-10, 0.014738231, 2.4786548E-4, -0.0074910205, -0.019999389, -0.011145257, 0.0, -0.09268984] -sib[13][2][6] = [-0.0032348863, 8.3312625E-4, 0.020333562, 0.0091042705, -0.003436745, 0.0026807927, -3.935173E-12, -0.009389484, 6.4053755E-11, 0.0014698936, -0.036261305] -sib[13][2][7] = [-0.004088621, -0.0031338136, 0.06420857, 0.0019135604, 3.8760272E-4, -0.0014732409, -9.805523E-4, -0.0167017, -0.01168974, -0.005065879, -0.08211417] -sib[13][2][8] = [0.0, -0.003495631, 0.008985808, 0.017431367, 0.021536471, -0.001689041, 0.0021693285, -0.029445289, -0.01081989, 0.0, -0.017135741] -sib[13][2][9] = [-0.0014469671, 9.7394426E-11, -0.0056969193, -0.0018933251, -0.036109902, -0.0010610659, -0.019288724, -0.011951676, -0.0139819635, 0.00495839, -0.08346313] -sib[13][2][10] = [-0.033808216, -0.026206587, -0.035799783, 0.0036912595, -0.016909549, -0.017715154, -0.04581771, -0.010560656, 0.01765244, -0.0037438683, -0.042216007] -sib[13][2][11] = [-0.0022680296, 6.7673783E-12, -0.056587223, -0.0021093525, -0.058760542, 0.002736577, -0.016456243, -0.03425883, -0.008958689, 0.0, -0.09669206] -sib[13][2][12] = [-6.074951E-11, 6.7673783E-12, 0.027755236, 0.0, 0.0019314961, -2.0271495E-4, -0.019553484, -0.015146317, -0.016874405, -0.002893438, -0.10847643] -sib[13][2][13] = [-0.072285526, -0.042172294, -0.10663923, -0.10576053, -0.10048705, -0.09336635, -0.05242186, -0.061479766, -0.08743159, -0.1241359, -0.022830697] -sib[13][3][3] = [-0.06861018, -0.070185155, -0.05729734, -0.1245896, -0.15595144, -0.1091044, -0.11392195, -0.11304908, -0.094588086, -0.1309049, -0.013231826] -sib[13][3][4] = [1.9813108E-11, -0.0019344182, 0.05979453, 0.0, -0.019546898, 7.305343E-4, 0.0010844865, 0.00540699, -0.011145257, 0.0, -0.0702638] -sib[13][3][5] = [1.9813108E-11, 1.0014907E-10, 0.052455343, 1.4115933E-10, 0.002508262, 0.0020394656, 2.4181162E-4, 0.017892864, -0.013737589, -0.0035770652, -0.07525965] -sib[13][3][6] = [0.0013248676, -0.0013598264, 0.042172015, 0.008557672, -0.003436745, 0.0055411807, 0.0012310293, -0.006624028, -0.001245365, 0.0014698936, -0.050878808] -sib[13][3][7] = [-0.004088621, -0.0031338136, 0.040459488, 0.0019135604, -0.012858113, 3.1835935E-4, 0.0036544318, -0.009806709, -0.016874405, -0.002893438, -0.06396307] -sib[13][3][8] = [0.0, -0.005771008, -0.005067763, 0.014026441, 0.001163731, -0.001689041, 0.015866034, -0.035657857, -0.0049615186, -0.0051903967, -0.015640365] -sib[13][3][9] = [-0.001446967, 1.9077612E-10, -0.0052867793, -0.0018933251, -0.035505734, 0.0021770014, -0.015482147, -0.0036828225, -0.019166628, 0.00495839, -0.051627077] -sib[13][3][10] = [-0.042421516, -0.036849163, -0.04202736, -0.019587224, -0.020156486, -0.012877224, -0.053442363, -0.022531686, 0.028473942, -0.0018322013, -0.033143736] -sib[13][3][11] = [-0.0022680296, 1.0014907E-10, -0.054493945, -0.0021093525, -0.05714751, 0.0050104028, -0.01105269, -0.020512402, -0.014143352, -5.0404254E-11, -0.06539341] -sib[13][3][12] = [0.0, 1.0014907E-10, 0.003179974, 0.0, -0.013400121, 0.0030353526, -0.014149932, -0.006800373, -0.024651403, -0.0064705033, -0.06526662] -sib[13][3][13] = [-0.06861018, -0.070185155, -0.05729734, -0.1245896, -0.15595144, -0.1091044, -0.11392195, -0.11304908, -0.094588086, -0.1309049, -0.013231826] -sib[13][4][4] = [-0.06861018, -0.070185155, -0.053032152, -0.11429958, -0.16147934, -0.1091044, -0.11536192, -0.12300641, -0.094588086, -0.12304694, -0.044498492] -sib[13][4][5] = [1.9813108E-11, 1.0014907E-10, 0.070377015, 1.4115933E-10, -0.020200146, 0.0020394656, 0.0033390545, 0.011301048, -0.012824291, 0.0, -0.07228549] -sib[13][4][6] = [0.0013248676, 8.3312625E-4, 0.042172015, 0.008557672, -0.003436745, 0.0055411807, 0.0012310293, -0.006624028, -0.001245365, 0.0038110686, -0.050878808] -sib[13][4][7] = [-0.004088621, -0.0031338136, 0.044936035, 0.0019135604, -0.010340153, 3.1835935E-4, 0.0017899475, -0.009806709, -0.016874405, -0.002893438, -0.06130428] -sib[13][4][8] = [0.0, -0.005771008, 3.9528054E-4, 0.014026441, 0.001163731, 4.3012958E-4, 0.015866034, -0.035657857, -0.0049615186, -0.004375567, -0.015640365] -sib[13][4][9] = [-0.001446967, 1.9077612E-10, -8.1023434E-4, -0.0018933251, -0.035505734, 0.0021770014, -0.013885173, -0.0036828225, -0.019166628, 0.00495839, -0.051627077] -sib[13][4][10] = [-0.042421516, -0.030765804, -0.04202736, -0.019587224, -0.020156486, -0.012877224, -0.05530525, -0.022531686, 0.028422037, -0.0037438683, -0.03920917] -sib[13][4][11] = [-0.0022680296, 1.0014907E-10, -0.050017398, -0.0021093525, -0.05714751, 0.0050104028, -0.01105269, -0.020512402, -0.014143352, 0.0, -0.06539341] -sib[13][4][12] = [0.0, 1.0014907E-10, 0.0076565193, 0.0, -0.013400121, 0.0030353526, -0.014149932, -0.006800373, -0.024651403, -0.0064705033, -0.06671913] -sib[13][4][13] = [-0.06861018, -0.070185155, -0.053032152, -0.11429958, -0.16147934, -0.1091044, -0.11536192, -0.12300641, -0.094588086, -0.12304694, -0.044498492] -sib[13][5][5] = [-0.06861018, -0.06527991, -0.051541254, -0.1131485, -0.17607339, -0.1091044, -0.15336186, -0.12817547, -0.094588086, -0.1309049, -0.101575226] -sib[13][5][6] = [0.0013248676, 8.3312625E-4, 0.042049482, 0.0071675684, -0.003436745, 0.0055411807, 0.0012310293, -0.006624028, -0.0012453651, 0.0034072904, -0.046716478] -sib[13][5][7] = [-0.004088621, -0.002131835, 0.042631466, -2.0767644E-4, -0.01853042, 3.1835935E-4, 0.0036544318, -0.013822373, -0.016874405, -0.002893438, -0.060595863] -sib[13][5][8] = [-0.0018001135, -0.005771008, 0.0030045856, 0.016578797, 0.004475348, -0.001689041, 0.028451074, -0.026126793, -0.0066976147, -0.0064024087, -0.015640365] -sib[13][5][9] = [-0.001446967, 1.9077612E-10, 1.2083119E-4, -0.0018933251, -0.04117804, 0.0021770014, -0.013885173, -0.007698486, -0.019166628, 0.00495839, -0.04825986] -sib[13][5][10] = [-0.042421516, -0.036849163, -0.047924258, -0.021913122, -0.018052988, -0.012877224, -0.05035643, -0.022531686, 0.028422037, -0.005805984, -0.033143736] -sib[13][5][11] = [-0.0022680296, 1.0014907E-10, -0.062492248, -0.0021093525, -0.062819816, 0.0050104028, -0.01105269, -0.02452807, -0.014143352, 0.0, -0.06202619] -sib[13][5][12] = [0.0, 1.0014907E-10, 0.0055244016, 0.0, -0.024744734, 0.0030353526, -0.01105269, -0.012537207, -0.024651403, -0.0064705033, -0.058532193] -sib[13][5][13] = [-0.06861018, -0.06527991, -0.051541254, -0.1131485, -0.17607339, -0.1091044, -0.15336186, -0.12817547, -0.094588086, -0.1309049, -0.101575226] -sib[13][6][6] = [-0.14788091, -0.13914165] -sib[13][6][7] = [0.01402414, -0.0027184573] -sib[13][6][8] = [-0.0015967395, 0.0010730807] -sib[13][6][9] = [-0.023158282, -0.0028650467] -sib[13][6][10] = [-8.3432463E-4, -0.001063084] -sib[13][6][11] = [-0.024725007, -0.0020921042] -sib[13][6][12] = [-0.021378122, -0.004742817] -sib[13][6][13] = [-0.14788091, -0.13914165] -sib[13][7][7] = [-0.072285526, -0.057941165, -0.052825525, -0.113085255, -0.07884905, -0.095076025, -0.12380484, -0.091831304, -0.09687745, -0.1268474, -0.07008666] -sib[13][7][8] = [0.0, -0.003495631, 0.008985933, 0.014026441, 0.024243666, -6.325657E-4, 0.01756433, -0.02209006, -0.012423395, 0.0, -0.017973425] -sib[13][7][9] = [-0.0040957127, 1.9077612E-10, -0.01199118, -0.0018933251, -0.026554458, -0.0010610659, -0.013748444, -0.01949018, -0.019166628, 0.00495839, -0.03851343] -sib[13][7][10] = [-0.03959608, -0.03364022, -0.06327652, 0.0013653624, -0.014213109, -0.017715154, -0.04468811, -0.011822132, 0.035158057, -0.0037438683, -0.028238727] -sib[13][7][11] = [-0.005686443, 1.0014907E-10, -0.06616777, -0.0021093525, -0.07552003, 0.002736577, -0.010915961, -0.036541115, -0.014143352, 0.0, -0.046445943] -sib[13][7][12] = [0.0, 1.0014907E-10, -0.00955368, 0.0, -0.016105724, -2.0271495E-4, -0.010915961, -0.020442957, -0.024565026, -0.002893438, -0.048007853] -sib[13][7][13] = [-0.072285526, -0.057941165, -0.052825525, -0.113085255, -0.07884905, -0.095076025, -0.12380484, -0.091831304, -0.09687745, -0.1268474, -0.07008666] -sib[13][8][8] = [-0.005508784, -0.040057447, -0.022209981, -0.1548941, -0.10678887, -0.13508728] -sib[13][8][9] = [-0.013245542, -0.0023679952, 0.0015360848, -0.0010610658, -0.00571475, -8.9650124E-4] -sib[13][8][10] = [0.023928046, -0.02729028, -0.029153861, -0.014496746, -0.016115021, -0.020579375] -sib[13][8][11] = [0.032626066, 0.0, -0.020258695, 0.002736577, 0.007878454, -0.0025892365] -sib[13][8][12] = [0.039524592, 0.0, -0.0035681347, -0.0010610658, -0.0051641474, -0.0016442349] -sib[13][8][13] = [-0.005508784, -0.040057447, -0.022209981, -0.1548941, -0.10678887, -0.13508728] -sib[13][9][9] = [-0.06861018, -0.04342656, -0.115150586, -0.077006035, -0.20771168, -0.1062734, -0.12287759, -0.10142606, -0.09766257, -0.124642916, -0.04095405] -sib[13][9][10] = [-0.03663365, -0.040041983, -0.028703984, -0.027952358, -0.025193946, -0.014496746, -0.04218969, -0.019323738, 0.02745195, -0.005896719, -0.032210417] -sib[13][9][11] = [-0.0022680296, -0.0029060307, -0.0020718835, -0.0021093525, -0.0809479, 0.0032188026, -0.011684529, -0.021435667, -0.008958689, 0.0, -0.060782917] -sib[13][9][12] = [0.0, 1.0014907E-10, 0.055907477, -6.03846E-4, -0.03287065, 0.0012437524, -0.008434844, -0.0068599246, -0.016874405, -0.002893438, -0.06725843] -sib[13][9][13] = [-0.06861018, -0.04342656, -0.115150586, -0.077006035, -0.20771168, -0.1062734, -0.12287759, -0.10142606, -0.09766257, -0.124642916, -0.04095405] -sib[13][10][10] = [0.028195608, 0.0608705, -0.10174113, -0.09906401, -0.08908608, -0.11686043, -0.091739066] -sib[13][10][11] = [-0.04299295, 0.0040996876, 0.002736577, -0.023567306, 0.012840907, -0.044528395, -0.0011340148] -sib[13][10][12] = [-0.026183745, -0.0160307, -0.0010610658, -0.012499432, -0.03429284, -0.04231813, 0.0] -sib[13][10][13] = [0.028195608, 0.0608705, -0.10174113, -0.09906401, -0.08908608, -0.11686043, -0.091739066] -sib[13][11][11] = [-0.05762142, -0.055615727, -0.08320304, -0.04724413, -0.20891012, -0.100216396, -0.044462293, -0.09639623, -0.08077011, -0.12666674, -0.010189604] -sib[13][11][12] = [-6.074951E-11, 6.7673783E-12, 0.05310737, 0.0, -0.033819657, 0.0032234818, -0.014521137, -0.018921316, -0.014282072, -0.002893438, -0.0884412] -sib[13][11][13] = [-0.05762142, -0.055615727, -0.08320304, -0.04724413, -0.20891012, -0.100216396, -0.044462293, -0.09639623, -0.08077011, -0.12666674, -0.010189604] -sib[13][12][12] = [-0.07050711, -0.03828383, 0.069364466, -0.075059645, -0.17359406, -0.09716197, -0.16338599, -0.09590105, -0.10625561, -0.11810293, -0.06465854] -sib[13][12][13] = [-0.07050711, -0.03828383, 0.069364466, -0.075059645, -0.17359406, -0.09716197, -0.16338599, -0.09590105, -0.10625561, -0.11810293, -0.06465854] -sib[13][14][13] = [-0.1659211, 0.09340296, -0.03943733, 0.11446824, -0.14515284, -0.054249067, 0.0129298, 0.13796264] -sib[13][14][14] = [-0.1659211, 0.09340296, -0.03943733, 0.11446824, -0.14515284, -0.054249067, 0.0129298, 0.13796264] -sib[14][0][0] = [-0.26117626] -sib[14][0][1] = [-0.017622618] -sib[14][0][2] = [0.019042788] -sib[14][0][3] = [0.034817807] -sib[14][0][4] = [0.03715513] -sib[14][0][5] = [0.07564745] -sib[14][0][6] = [0.08416031] -sib[14][0][7] = [0.026421864] -sib[14][0][8] = [-0.017768983] -sib[14][0][9] = [0.014121643] -sib[14][0][10] = [0.01895562] -sib[14][0][11] = [0.0027374383] -sib[14][0][12] = [0.0014118538] -sib[14][0][13] = [-3.5631564E-4] -sib[14][0][14] = [-0.26117626] -sib[14][1][1] = [-0.17582023, -0.33003432] -sib[14][1][2] = [-0.07298219, 0.08017363] -sib[14][1][3] = [-0.044595454, 0.24184157] -sib[14][1][4] = [-0.044595454, 0.24863249] -sib[14][1][5] = [-0.041108444, 0.31129408] -sib[14][1][6] = [-0.055057786, 0.13690108] -sib[14][1][7] = [-0.06542454, 0.08888463] -sib[14][1][8] = [-0.084223025, 0.037911303] -sib[14][1][9] = [-0.05191639, 0.06165144] -sib[14][1][10] = [-0.0041375235, 0.085146636] -sib[14][1][11] = [-0.057649482, 0.11942609] -sib[14][1][12] = [-0.06268189, 0.19172941] -sib[14][1][13] = [-0.045791917, 0.1670861] -sib[14][1][14] = [-0.17582023, -0.33003432] -sib[14][2][2] = [-0.41633445, -0.3325971, -0.0025394333, -0.103917405, -0.06280382, -0.0606209, -0.06155448, -0.095411405] -sib[14][2][3] = [0.047140226, -0.17357776, -0.12736656, -0.004048791, 0.0013672397, 0.002382424, -0.003422699, -0.03606269] -sib[14][2][4] = [0.05560075, -0.17370752, -0.1452667, 0.014709412, -0.0032665338, 0.002382424, -0.008025277, -0.031911064] -sib[14][2][5] = [0.10477061, -0.19139603, -0.13696872, 0.010074741, -0.0019576023, 0.002382424, -0.0019034167, -0.022194244] -sib[14][2][6] = [0.10651337, 0.2530592, -0.0836741, 0.0, 0.005372986, -0.0024187758, 0.0035821022, -0.009184968] -sib[14][2][7] = [0.06782577, -0.059634767, -0.1532801, -8.1344135E-4, -3.3273446E-4, 0.002462812, 0.001316632, -0.024671111] -sib[14][2][8] = [-0.011346394, 0.013796195, -0.08232155, 0.021307971, -5.158714E-11, 0.0, 0.017145041, -0.02539291] -sib[14][2][9] = [0.018515907, -0.10642335, -0.14123863, -0.042538613, -0.0017092963, 0.002382424, -5.969284E-4, -0.025626231] -sib[14][2][10] = [-0.014229231, -0.088017225, -0.03879034, -0.016909549, -0.0055060163, -0.004306007, 0.0022200055, -0.008164193] -sib[14][2][11] = [-0.030209748, -0.103037186, -0.15945292, -0.05590263, -7.144998E-5, 0.0013483575, -0.0021162108, -0.03075184] -sib[14][2][12] = [0.038159836, -0.10674603, -0.17853299, 0.0066432473, -0.0038468728, 0.002382424, -0.0021162108, -0.02476873] -sib[14][2][13] = [0.041038126, -0.10771326, -0.15810171, -0.0029368624, 7.86901E-4, 0.00244402, 0.0050375573, -0.018874675] -sib[14][2][14] = [-0.41633445, -0.3325971, -0.0025394333, -0.103917405, -0.06280382, -0.0606209, -0.06155448, -0.095411405] -sib[14][3][3] = [-0.36699247, -0.2039112, 0.0070594307, -0.15938173, -0.07854187, -0.088633776, -0.08038355, -0.14698069] -sib[14][3][4] = [0.06682073, -0.23289232, -0.11106071, -0.02197733, 0.00315884, 0.002382424, -0.003422699, 0.001829566] -sib[14][3][5] = [0.11334067, -0.25166684, -0.11953853, -0.0021552278, -1.660022E-4, 0.002382424, -0.0019034167, 0.01569801] -sib[14][3][6] = [0.12835182, 0.31971252, -0.098291606, 0.0, 0.008233374, -0.0046117287, 0.0030355034, -0.0064195115] -sib[14][3][7] = [0.044076692, -9.520084E-4, -0.13512899, -0.014059158, 0.0014588658, 0.002462812, 0.001316632, -0.017776119] -sib[14][3][8] = [-0.02539996, 0.028047346, -0.08082617, 9.35231E-4, -5.158714E-11, -0.002275377, 0.013740117, -0.03160548] -sib[14][3][9] = [0.018926047, -0.11500114, -0.10940257, -0.041934446, 0.0015287712, 0.002382424, -5.969284E-4, -0.017357375] -sib[14][3][10] = [-0.020456813, -0.1725777, -0.02971807, -0.020156486, -6.6808646E-4, -0.014948583, -0.02105848, -0.020135224] -sib[14][3][11] = [-0.028116472, -0.08097203, -0.12815426, -0.054289598, 0.0022023758, 0.0013483576, -0.0021162108, -0.01700541] -sib[14][3][12] = [0.013584574, -0.11547441, -0.13625723, -0.008688369, -6.0880545E-4, 0.002382424, -0.0021162108, -0.016422788] -sib[14][3][13] = [0.016462866, -0.11570191, -0.11679992, -0.018268479, 0.0040249685, 0.00244402, 0.0050375573, -0.01052873] -sib[14][3][14] = [-0.36699247, -0.2039112, 0.0070594307, -0.15938173, -0.07854187, -0.088633776, -0.08038355, -0.14698069] -sib[14][4][4] = [-0.36272728, -0.2256955, -0.024207238, -0.16490962, -0.07854187, -0.088633776, -0.07009352, -0.156938] -sib[14][4][5] = [0.117238976, -0.24738343, -0.10641773, -0.022630576, 0.0044677714, 0.002382424, -0.0019034167, 0.011546385] -sib[14][4][6] = [0.12835182, 0.3320111, -0.098291606, 0.0, 0.008233374, -0.0024187758, 0.0030355034, -0.0064195115] -sib[14][4][7] = [0.04855324, -0.009776178, -0.1324702, -0.011541197, 0.0014588658, 0.002462812, 0.001316632, -0.017776119] -sib[14][4][8] = [-0.019936921, 0.019036163, -0.08082617, 9.35231E-4, 0.0021191705, -0.002275377, 0.013740117, -0.03160548] -sib[14][4][9] = [0.023402592, -0.123825304, -0.10940257, -0.041934446, 0.0015287712, 0.002382424, -5.969284E-4, -0.017357375] -sib[14][4][10] = [-0.020456813, -0.1725777, -0.035783507, -0.020156486, -6.6808646E-4, -0.008865225, -0.02105848, -0.020135224] -sib[14][4][11] = [-0.023639925, -0.08979619, -0.12815426, -0.054289598, 0.0022023758, 0.0013483576, -0.0021162108, -0.01700541] -sib[14][4][12] = [0.01806112, -0.12429859, -0.13770974, -0.008688369, -6.0880545E-4, 0.002382424, -0.0021162108, -0.016422788] -sib[14][4][13] = [0.020939412, -0.123445585, -0.11679992, -0.018268479, 0.0040249685, 0.00244402, 0.0050375573, -0.01052873] -sib[14][4][14] = [-0.36272728, -0.2256955, -0.024207238, -0.16490962, -0.07854187, -0.088633776, -0.07009352, -0.156938] -sib[14][5][5] = [-0.36123642, -0.24482392, -0.081283964, -0.17950368, -0.07854187, -0.08372852, -0.06894244, -0.16210708] -sib[14][5][6] = [0.11223895, 0.3020243, -0.09068653, 0.0, 0.008233374, -0.0024187758, 0.0016454, -0.0064195115] -sib[14][5][7] = [0.04624867, -0.008069332, -0.13176179, -0.019731464, 0.0014588658, 0.0034647905, -8.0460485E-4, -0.021791784] -sib[14][5][8] = [-0.017327616, -0.00891828, -0.08082617, 0.004246848, -5.158714E-11, -0.002275377, 0.016292471, -0.022074414] -sib[14][5][9] = [0.024333661, -0.122265466, -0.10603536, -0.04760675, 0.0015287712, 0.002382424, -5.969284E-4, -0.021373041] -sib[14][5][10] = [-0.026353706, -0.16696651, -0.02971807, -0.018052988, -6.6808646E-4, -0.014948583, -0.023384375, -0.020135224] -sib[14][5][11] = [-0.03611477, -0.10026051, -0.12478705, -0.0599619, 0.0022023758, 0.0013483576, -0.0021162108, -0.021021076] -sib[14][5][12] = [0.015929002, -0.13113727, -0.12952282, -0.02003298, -6.0880545E-4, 0.002382424, -0.0021162108, -0.022159623] -sib[14][5][13] = [0.018807292, -0.122472, -0.11006549, -0.029613093, 0.0040249685, 0.00244402, 0.0050375573, -0.016265566] -sib[14][5][14] = [-0.36123642, -0.24482392, -0.081283964, -0.17950368, -0.07854187, -0.08372852, -0.06894244, -0.16210708] -sib[14][6][6] = [-0.01986646, -0.4457749] -sib[14][6][7] = [0.04084371, 0.023154521] -sib[14][6][8] = [-0.06312829, -0.023712344] -sib[14][6][9] = [0.1304324, 0.006567724] -sib[14][6][10] = [0.056466203, 0.015722657] -sib[14][6][11] = [0.06034638, 0.0071656443] -sib[14][6][12] = [0.03023277, -0.005183216] -sib[14][6][13] = [0.044423435, -0.002582052] -sib[14][6][14] = [-0.01986646, -0.4457749] -sib[14][7][7] = [-0.36252066, -0.31642604, -0.049795393, -0.082279354, -0.0645135, -0.076389775, -0.068879195, -0.12576294] -sib[14][7][8] = [-0.009542683, 0.027514502, -0.07787864, 0.024015168, -5.158714E-11, 0.0, 0.013740117, -0.018037684] -sib[14][7][9] = [0.012221649, -0.108519375, -0.09628893, -0.03298317, -0.0017092963, 0.002382424, -5.969284E-4, -0.03316474] -sib[14][7][10] = [-0.041705973, -0.09222949, -0.024813062, -0.014213109, -0.0055060163, -0.011739643, -1.05890875E-4, -0.009425669] -sib[14][7][11] = [-0.039790306, -0.117010556, -0.1092068, -0.07266212, -7.144998E-5, 0.0013483576, -0.0021162108, -0.03303413] -sib[14][7][12] = [-0.0013734996, -0.15504168, -0.11806441, -0.014826199, -0.0038468728, 0.002382424, -0.0021162108, -0.030065373] -sib[14][7][13] = [0.0037292093, -0.14397092, -0.09954115, -0.020974083, 7.86901E-4, 0.00244402, 0.0050375573, -0.024171317] -sib[14][7][14] = [-0.36252066, -0.31642604, -0.049795393, -0.082279354, -0.0645135, -0.076389775, -0.068879195, -0.12576294] -sib[14][8][8] = [-0.12043289, -0.3320108] -sib[14][8][9] = [-0.049023703, 0.020810444] -sib[14][8][10] = [-0.017153706, 0.038443338] -sib[14][8][11] = [-0.05758025, 0.06945055] -sib[14][8][12] = [-0.062297665, 0.07594731] -sib[14][8][13] = [-0.045407683, 0.0632545] -sib[14][8][14] = [-0.12043289, -0.3320108] -sib[14][9][9] = [-0.42484578, -0.30829483, -0.020662794, -0.21114197, -0.07571086, -0.061875165, -0.03279999, -0.1353577] -sib[14][9][10] = [-0.0072616246, -0.10945691, -0.039056044, -0.025193946, -0.0022876072, -0.018141404, -0.023384375, -0.016927276] -sib[14][9][11] = [0.024305591, -0.067444876, -0.12354376, -0.07808998, 4.107759E-4, -0.0015576731, -0.0021162108, -0.017928675] -sib[14][9][12] = [0.068555795, -0.093527764, -0.13824904, -0.02887747, -0.0024004057, 0.002382424, -0.0027200566, -0.018728673] -sib[14][9][13] = [0.06919037, -0.082605064, -0.12528051, -0.034875646, 0.0022333683, 0.00244402, 0.0050375573, -0.010588281] -sib[14][9][14] = [-0.42484578, -0.30829483, -0.020662794, -0.21114197, -0.07571086, -0.061875165, -0.03279999, -0.1353577] -sib[14][10][10] = [-0.08593696, -0.30099216, -0.17435792, -0.05781908] -sib[14][10][11] = [-0.10663833, -9.831986E-4, -0.02013312, -7.1449904E-5] -sib[14][10][12] = [-0.104243465, -0.016535712, -0.06986312, -0.0047052237] -sib[14][10][13] = [-0.08735348, -0.008938649, -0.059024725, -7.1449904E-5] -sib[14][10][14] = [-0.08593696, -0.30099216, -0.17435792, -0.05781908] -sib[14][11][11] = [-0.39289823, -0.30791253, 0.010101652, -0.21234041, -0.06965387, -0.07406434, -0.0030380678, -0.13032787] -sib[14][11][12] = [0.04972389, -0.11358053, -0.14835113, -0.021637682, 0.004213098, 0.002382424, -0.0021162108, -0.028382119] -sib[14][11][13] = [0.058538865, -0.11691623, -0.15007612, -0.01597961, 0.004213098, -3.959747E-4, 0.0050375573, -0.019224772] -sib[14][11][14] = [-0.39289823, -0.30791253, 0.010101652, -0.21234041, -0.06965387, -0.07406434, -0.0030380678, -0.13032787] -sib[14][12][12] = [-0.32926255, -0.34232852, -0.011567077, -0.15690242, -0.07579308, -0.09959442, -0.049961574, -0.11941129] -sib[14][12][13] = [0.027948447, -0.13304974, -0.09411263, -0.03767293, 7.8690104E-4, 0.00244402, 0.0050375573, -0.019369822] -sib[14][12][14] = [-0.32926255, -0.34232852, -0.011567077, -0.15690242, -0.07579308, -0.09959442, -0.049961574, -0.11941129] -sib[14][13][13] = [-0.27716342, -0.29918027, 0.002273057, -0.17363767, -0.07579308, -0.09091581, -0.04491078, -0.12332719] -sib[14][13][14] = [-0.27716342, -0.29918027, 0.002273057, -0.17363767, -0.07579308, -0.09091581, -0.04491078, -0.12332719] -gra[0][1][0] = [-0.22818854] -gra[0][1][1] = [-0.22818854] -gra[0][1][2] = [-0.11684589] -gra[0][1][3] = [-0.07394948] -gra[0][1][4] = [-0.0680243] -gra[0][1][5] = [-0.05763626] -gra[0][1][6] = [0.041646246] -gra[0][1][7] = [-0.057812385] -gra[0][1][8] = [0.0034977961] -gra[0][1][9] = [-0.07727066] -gra[0][1][10] = [-0.055504914] -gra[0][1][11] = [-0.14296876] -gra[0][1][12] = [-0.12293938] -gra[0][1][13] = [-0.10813473] -gra[0][1][14] = [0.45705685] -gra[0][2][0] = [-0.15013406, -0.2426285] -gra[0][2][1] = [0.019528074, 0.0660074] -gra[0][2][2] = [-0.15013406, -0.2426285] -gra[0][2][3] = [-0.04805225, -0.10163534] -gra[0][2][4] = [-0.072765164, -0.11548856] -gra[0][2][5] = [-0.058554545, -0.11241687] -gra[0][2][6] = [0.019643955, -0.032943882] -gra[0][2][7] = [-0.06858881, -0.09112317] -gra[0][2][8] = [-0.04587385, -0.09906794] -gra[0][2][9] = [-0.08696036, -0.08442209] -gra[0][2][10] = [-0.06429993, -0.024919685] -gra[0][2][11] = [-0.12994505, -0.043445118] -gra[0][2][12] = [-0.14164223, -0.04568313] -gra[0][2][13] = [-0.099208415, -0.06146796] -gra[0][2][14] = [0.41737968, 0.14532717] -gra[0][3][0] = [-0.13910182, -0.2825055] -gra[0][3][1] = [0.028612794, 0.08540308] -gra[0][3][2] = [-0.046550658, -0.0182662] -gra[0][3][3] = [-0.13910182, -0.2825055] -gra[0][3][4] = [0.0108578075, -0.035993043] -gra[0][3][5] = [3.5551563E-4, -0.051619668] -gra[0][3][6] = [0.01169499, -0.048168648] -gra[0][3][7] = [-0.017285692, -0.09887939] -gra[0][3][8] = [-0.04997577, -0.14533053] -gra[0][3][9] = [-0.044813514, -0.06871706] -gra[0][3][10] = [-0.052825183, 0.04502643] -gra[0][3][11] = [-0.091644205, -0.039359495] -gra[0][3][12] = [-0.0813158, -0.079372145] -gra[0][3][13] = [-0.04325054, -0.08941097] -gra[0][3][14] = [0.43075097, 0.16887097] -gra[0][4][0] = [-0.13910182, -0.28454143] -gra[0][4][1] = [0.028612794, 0.08540308] -gra[0][4][2] = [-0.053501334, -0.022827461] -gra[0][4][3] = [0.01548511, 0.022885837] -gra[0][4][4] = [-0.13910182, -0.28454143] -gra[0][4][5] = [0.029627925, -0.03535446] -gra[0][4][6] = [0.01169499, -0.048168648] -gra[0][4][7] = [-0.017285692, -0.089105465] -gra[0][4][8] = [-0.04997577, -0.14246826] -gra[0][4][9] = [-0.044813514, -0.06973502] -gra[0][4][10] = [-0.052825183, 0.042236067] -gra[0][4][11] = [-0.091644205, -0.040377453] -gra[0][4][12] = [-0.0813158, -0.0803901] -gra[0][4][13] = [-0.04325054, -0.090428926] -gra[0][4][14] = [0.43075097, 0.16887097] -gra[0][5][0] = [-0.14515881, -0.29451418] -gra[0][5][1] = [0.028612794, 0.0703686] -gra[0][5][2] = [-0.055704843, -0.020307925] -gra[0][5][3] = [0.0072715217, 0.020844113] -gra[0][5][4] = [-5.109301E-4, 0.025405373] -gra[0][5][5] = [-0.14515881, -0.29451418] -gra[0][5][6] = [0.013943817, -0.036353186] -gra[0][5][7] = [-0.01461166, -0.08993692] -gra[0][5][8] = [-0.060220703, -0.10150701] -gra[0][5][9] = [-0.043248653, -0.05752173] -gra[0][5][10] = [-0.05493198, 0.042415746] -gra[0][5][11] = [-0.09857967, -0.030557191] -gra[0][5][12] = [-0.08693646, -0.07471453] -gra[0][5][13] = [-0.047174573, -0.076235354] -gra[0][5][14] = [0.44249806, 0.15094155] -gra[0][6][0] = [-0.20701182, -0.20022848, -0.104408376] -gra[0][6][1] = [0.14289244, 0.0283306, -0.029538298] -gra[0][6][2] = [-0.0082890075, 0.05742196, -0.011392591] -gra[0][6][3] = [0.0044608647, -0.029823117, -0.017902642] -gra[0][6][4] = [-0.020159526, -0.029823117, -0.017902642] -gra[0][6][5] = [0.029669786, -0.044923708, -0.017902642] -gra[0][6][6] = [-0.20701182, -0.20022848, -0.104408376] -gra[0][6][7] = [-0.10183145, -0.091028236, -0.04588911] -gra[0][6][8] = [0.032606296, 0.017808456, -0.008648319] -gra[0][6][9] = [-0.13632824, -0.07054741, -0.02793441] -gra[0][6][10] = [-0.059310794, -0.04506547, 0.009192239] -gra[0][6][11] = [-0.1909292, -0.092181034, -0.0437085] -gra[0][6][12] = [-0.16031356, -0.065739915, -0.03355049] -gra[0][6][13] = [-0.15541416, -0.027346965, -0.036728404] -gra[0][6][14] = [0.7396867, 0.27478725, 0.2738842] -gra[0][7][0] = [-0.1473084, -0.25213647] -gra[0][7][1] = [0.035285007, 0.058604628] -gra[0][7][2] = [-0.05160928, -0.0224412] -gra[0][7][3] = [0.020225829, -0.029645607] -gra[0][7][4] = [0.006433309, -0.029645607] -gra[0][7][5] = [0.034157895, -0.027836025] -gra[0][7][6] = [-0.02770169, 0.0031483166] -gra[0][7][7] = [-0.1473084, -0.25213647] -gra[0][7][8] = [-0.029250327, -0.083425164] -gra[0][7][9] = [-0.0536678, -0.10675399] -gra[0][7][10] = [-0.062462002, 0.027226757] -gra[0][7][11] = [-0.11521182, -0.06146239] -gra[0][7][12] = [-0.098107755, -0.08854464] -gra[0][7][13] = [-0.05266825, -0.092032686] -gra[0][7][14] = [0.4630408, 0.15594469] -gra[0][8][0] = [-0.2117028] -gra[0][8][1] = [0.017306514] -gra[0][8][2] = [-0.09911068] -gra[0][8][3] = [-0.020114591] -gra[0][8][4] = [-0.03958766] -gra[0][8][5] = [-0.0038710376] -gra[0][8][6] = [-0.06144519] -gra[0][8][7] = [-0.07898003] -gra[0][8][8] = [-0.2117028] -gra[0][8][9] = [-0.11180681] -gra[0][8][10] = [-0.05344535] -gra[0][8][11] = [-0.17514] -gra[0][8][12] = [-0.16525681] -gra[0][8][13] = [-0.15022904] -gra[0][8][14] = [0.5003734] -gra[0][9][0] = [-0.17324714, -0.21192437] -gra[0][9][1] = [0.026308253, 0.07592523] -gra[0][9][2] = [-0.062093064, -0.02629318] -gra[0][9][3] = [0.0027108872, -0.010167679] -gra[0][9][4] = [-0.011081627, -0.008946633] -gra[0][9][5] = [0.016642952, -0.004286417] -gra[0][9][6] = [-0.058611736, 0.0031483166] -gra[0][9][7] = [-0.07019833, -0.032258406] -gra[0][9][8] = [-0.020757651, 0.02516887] -gra[0][9][9] = [-0.17324714, -0.21192437] -gra[0][9][10] = [-0.03127932, 0.021869836] -gra[0][9][11] = [-0.14179832, -0.06737257] -gra[0][9][12] = [-0.12213887, -0.07869322] -gra[0][9][13] = [-0.08363266, -0.11601491] -gra[0][9][14] = [0.41314566, 0.14072108] -gra[0][10][0] = [-0.14749695] -gra[0][10][1] = [0.042411044] -gra[0][10][2] = [-0.0708016] -gra[0][10][3] = [0.012733186] -gra[0][10][4] = [-0.0067398907] -gra[0][10][5] = [0.0209847] -gra[0][10][6] = [-0.080536366] -gra[0][10][7] = [-0.06538718] -gra[0][10][8] = [-0.06640356] -gra[0][10][9] = [-0.029906988] -gra[0][10][10] = [-0.14749695] -gra[0][10][11] = [-0.11649244] -gra[0][10][12] = [-0.12730673] -gra[0][10][13] = [-0.11145951] -gra[0][10][14] = [0.3879149] -gra[0][11][0] = [-0.1370282, -0.23143397] -gra[0][11][1] = [0.0273618, 0.084600694] -gra[0][11][2] = [-0.063277826, -0.023195233] -gra[0][11][3] = [0.004298934, -0.032105718] -gra[0][11][4] = [-0.00949358, -0.032105718] -gra[0][11][5] = [0.018230999, -0.027445499] -gra[0][11][6] = [-0.06418139, 0.0031483166] -gra[0][11][7] = [-0.07162588, -0.03143182] -gra[0][11][8] = [-0.06400743, 0.048796967] -gra[0][11][9] = [-0.021573273, -0.020941049] -gra[0][11][10] = [0.020022688, -0.024484597] -gra[0][11][11] = [-0.1370282, -0.23143397] -gra[0][11][12] = [-0.13074017, -0.035075203] -gra[0][11][13] = [-0.11738783, -0.0598739] -gra[0][11][14] = [0.4557841, 0.12184289] -gra[0][12][0] = [-0.14078712, -0.28310618] -gra[0][12][1] = [0.02626732, 0.07668723] -gra[0][12][2] = [-0.05231997, -0.034314517] -gra[0][12][3] = [0.014959173, -0.0400435] -gra[0][12][4] = [0.0011666575, -0.0400435] -gra[0][12][5] = [0.028891241, -0.03924354] -gra[0][12][6] = [-0.06071323, 0.0031483166] -gra[0][12][7] = [-0.05261325, -0.0455008] -gra[0][12][8] = [-0.06375543, 0.04426416] -gra[0][12][9] = [-0.015454872, -0.03264485] -gra[0][12][10] = [0.026441302, -0.027270192] -gra[0][12][11] = [-0.111271694, -0.016094657] -gra[0][12][12] = [-0.14078712, -0.28310618] -gra[0][12][13] = [-0.045593165, -0.047326043] -gra[0][12][14] = [0.43311912, 0.15603168] -gra[0][13][0] = [-0.16068856, -0.27489665] -gra[0][13][1] = [0.007832401, 0.04545995] -gra[0][13][2] = [-0.056557372, -0.024525002] -gra[0][13][3] = [0.010721763, -0.034435283] -gra[0][13][4] = [-0.0030707559, -0.031209692] -gra[0][13][5] = [0.024653831, -0.02940011] -gra[0][13][6] = [-0.062085137, 0.0031483166] -gra[0][13][7] = [-0.054515734, -0.038377617] -gra[0][13][8] = [-0.085020155, 0.015137604] -gra[0][13][9] = [-0.024306918, -0.02129151] -gra[0][13][10] = [0.035358965, -0.00568016] -gra[0][13][11] = [-0.12777625, -0.004063463] -gra[0][13][12] = [-0.011886083, -0.022303093] -gra[0][13][13] = [-0.16068856, -0.27489665] -gra[0][13][14] = [0.45522755, 0.13709247] -gra[0][14][0] = [-0.17188504, -0.4140188, -0.21580803, -0.30272162] -gra[0][14][1] = [0.016842496, -0.017852116, -0.037359446, 0.08003807] -gra[0][14][2] = [-0.036550064, -0.054342628, -0.08685365, -0.065238416] -gra[0][14][3] = [0.12644783, -0.11217301, -0.1632629, -0.049610063] -gra[0][14][4] = [0.10285749, -0.11729095, -0.1632629, -0.049610063] -gra[0][14][5] = [0.13867706, -0.17571141, -0.17718932, -0.04432483] -gra[0][14][6] = [-0.09154768, 0.12986793, 0.07644551, -0.0072514024] -gra[0][14][7] = [-0.06673313, -0.07734997, -0.14175922, -0.070629224] -gra[0][14][8] = [-0.11277676, -0.023170393, -0.014400727, 0.097420625] -gra[0][14][9] = [5.980348E-4, -0.16348687, -0.13709308, -0.03563946] -gra[0][14][10] = [0.13337196, -0.08529888, -0.09218985, 0.08115862] -gra[0][14][11] = [-0.10826583, -0.099610835, -0.077772625, -0.056411043] -gra[0][14][12] = [0.038882237, -0.11401746, -0.1542461, -0.06652495] -gra[0][14][13] = [0.013515249, -0.12234244, -0.15172419, -0.04440602] -gra[0][14][14] = [-0.17188504, -0.4140188, -0.21580803, -0.30272162] -gra[1][0][0] = [-0.108077995] -gra[1][0][1] = [-0.108077995] -gra[1][2][1] = [0.03391336, -0.1725873, 0.0012959396, -0.060160123, -0.25640324, -0.07938032] -gra[1][2][2] = [0.03391336, -0.1725873, 0.0012959396, -0.060160123, -0.25640324, -0.07938032] -gra[1][2][3] = [-0.09120312, 0.014431813, 0.11346866, 0.08282627, -0.012589271, -0.035313837] -gra[1][2][4] = [-0.10589576, -0.0059166737, 0.045106955, 0.053036187, 0.014354843, -0.04964634] -gra[1][2][5] = [-0.09762943, -0.0027514172, 0.008785598, 0.025530735, 0.019964844, -0.053498782] -gra[1][2][6] = [0.05597324, 0.01847283, -0.033105604, 0.0642303, -0.0067018787, -0.034922447] -gra[1][2][7] = [-0.057329256, -0.013323549, 0.009656799, 0.125539, -0.0463543, -0.029764814] -gra[1][2][8] = [-0.09219575, 0.030391878, -0.16111393, -0.038332492, 0.031330578, 9.5252134E-4] -gra[1][2][9] = [0.026323536, -0.03530977, 0.2074039, 0.19392449, -0.03207425, -0.023239741] -gra[1][2][10] = [0.038964078, 0.0069643552, -0.10429216, 0.02605302, -0.04147891, -0.02538526] -gra[1][2][11] = [0.06267894, -0.034079902, 0.11534285, 0.21231613, -0.07042499, 0.02830124] -gra[1][2][12] = [0.022294577, -0.07818291, 0.06643256, 0.21217202, -0.059620876, 0.022926517] -gra[1][2][13] = [0.008492436, -0.08288318, 0.05925089, 0.1912733, -0.024221312, -1.7583044E-4] -gra[1][2][14] = [0.008239258, -0.0070896456, -0.002662993, 0.023809846, 0.032671068, -0.078601785] -gra[1][3][1] = [-0.20384672, -0.20074788, -0.15047659, -0.47667956, -0.32233158, -0.18277587] -gra[1][3][2] = [-0.04078209, -0.00964256, -0.007887523, -0.02920713, 0.048171755, -0.0064258603] -gra[1][3][3] = [-0.20384672, -0.20074788, -0.15047659, -0.47667956, -0.32233158, -0.18277587] -gra[1][3][4] = [-0.08607493, -0.011066449, 0.03337828, 0.017589318, 0.053817187, 0.026608063] -gra[1][3][5] = [-0.11435424, -0.028249675, -0.0713048, -0.041468374, 0.06554918, 0.0051536495] -gra[1][3][6] = [0.021533351, 0.014141606, -0.02189768, 0.0406683, 0.019845601, -0.050147213] -gra[1][3][7] = [-0.07811742, -0.015330459, -0.077608146, 0.025373504, -0.028645419, -0.044204023] -gra[1][3][8] = [-0.11033088, 0.014251199, -0.12801346, -0.030778375, 0.0073718023, -0.045310076] -gra[1][3][9] = [-0.021687271, -0.07072508, 0.07316658, 0.006834414, 0.018396648, -0.009679461] -gra[1][3][10] = [-0.043205068, -0.08140806, -0.080073446, 0.03171298, -0.05723045, 0.04153792] -gra[1][3][11] = [0.02166934, -0.07386948, -0.024203774, 0.03216322, 0.002841484, 0.03024212] -gra[1][3][12] = [-0.009991158, -0.072576635, -0.04701072, -0.0074484567, -0.019265298, -0.012907258] -gra[1][3][13] = [-0.015750494, -0.08129193, -0.054456256, -0.04274753, 0.015238559, -0.030263584] -gra[1][3][14] = [0.011959078, 0.0016981189, 0.002318908, 0.02490218, 0.03298948, -0.055057995] -gra[1][4][1] = [-0.19834158, -0.1913248, -0.14450346, -0.4738161, -0.33214733, -0.18481179] -gra[1][4][2] = [-0.037335068, -0.006893658, -0.007887523, -0.034267876, 0.0602602, -0.010987123] -gra[1][4][3] = [-0.017518334, 0.018093698, -0.016213104, -0.016341481, 0.07057031, 0.037748877] -gra[1][4][4] = [-0.19834158, -0.1913248, -0.14450346, -0.4738161, -0.33214733, -0.18481179] -gra[1][4][5] = [-0.08122997, -0.009616363, -0.010314366, -0.019207178, 0.040883962, 0.02032251] -gra[1][4][6] = [0.021533351, 0.014141606, -0.02189768, 0.0406683, 0.017986417, -0.050147213] -gra[1][4][7] = [-0.07007887, -0.015330459, -0.077608146, 0.02348224, -0.03466012, -0.034430098] -gra[1][4][8] = [-0.11033088, 0.017701223, -0.13087574, -0.030211292, 0.009520162, -0.0424478] -gra[1][4][9] = [-0.013648728, -0.07072508, 0.07316658, 0.004943151, 0.012381943, -0.010697419] -gra[1][4][10] = [-0.043205068, -0.08140806, -0.080073446, 0.03171298, -0.05618029, 0.038747557] -gra[1][4][11] = [0.029707883, -0.07386948, -0.024203774, 0.030271959, -0.0031732197, 0.029224155] -gra[1][4][12] = [-0.0019526065, -0.072576635, -0.04701072, -0.009339724, -0.025280003, -0.013925216] -gra[1][4][13] = [-0.0077119498, -0.08129193, -0.054456256, -0.044638794, 0.009223858, -0.031281546] -gra[1][4][14] = [0.011959078, 0.0016981189, 0.002318908, 0.02490218, 0.035166137, -0.055057995] -gra[1][5][1] = [-0.1474042, -0.12128653, -0.17734613, -0.43427634, -0.26872668, -0.207103] -gra[1][5][2] = [-0.018892953, -0.006893658, -0.010367418, -0.038954537, 0.058182646, -0.008467588] -gra[1][5][3] = [-0.0037282254, 0.018976383, -0.018693, -0.02608889, 0.07759199, 0.03570715] -gra[1][5][4] = [-8.831457E-4, 0.018093698, -0.018693, -0.021028142, 0.071870804, 0.039219104] -gra[1][5][5] = [-0.1474042, -0.12128653, -0.17734613, -0.43427634, -0.26872668, -0.207103] -gra[1][5][6] = [0.047771584, 0.015253589, -0.01949577, 0.044564478, 0.021003243, -0.03833175] -gra[1][5][7] = [-0.06801275, -0.010077919, -0.058173127, 0.021577448, -0.04160948, -0.035261553] -gra[1][5][8] = [-0.08263614, -0.0093364185, -0.09053127, -0.005192401, -0.008493237, -0.0014865557] -gra[1][5][9] = [-0.009302059, -0.06351237, 0.10116945, -0.007041836, -0.002656164, 0.0015158653] -gra[1][5][10] = [-0.059016325, -0.0888929, -0.080073446, 0.021833349, -0.034138784, 0.038927235] -gra[1][5][11] = [0.040282093, -0.06309896, 0.010262955, 0.018484885, -0.029200297, 0.039044417] -gra[1][5][12] = [-0.0014948205, -0.06035639, -0.008429811, -0.009474121, -0.060335815, -0.008249627] -gra[1][5][13] = [-0.009723224, -0.06937733, -0.02150535, -0.048633333, -0.0076052034, -0.01708798] -gra[1][5][14] = [0.017121516, 0.0016981189, 0.0018258324, 0.016744861, -0.007697665, -0.07298742] -gra[1][6][1] = [-0.37519073] -gra[1][6][2] = [-0.020675538] -gra[1][6][3] = [-0.007164038] -gra[1][6][4] = [-0.0037859974] -gra[1][6][5] = [0.0010387793] -gra[1][6][6] = [-0.37519073] -gra[1][6][7] = [0.0011221641] -gra[1][6][8] = [-0.07499262] -gra[1][6][9] = [-0.04147849] -gra[1][6][10] = [0.029040512] -gra[1][6][11] = [-0.031770144] -gra[1][6][12] = [0.001088425] -gra[1][6][13] = [0.023952274] -gra[1][6][14] = [-0.051569473] -gra[1][7][1] = [-0.1296072, -0.1442439, -0.11772594, -0.02452228, -0.22837678, -0.14893955] -gra[1][7][2] = [-0.03975167, -0.008707181, -0.010367418, -0.050558057, 0.060622584, -0.010600864] -gra[1][7][3] = [-0.021678163, 0.013831518, -0.021172896, -0.027095923, 0.07488371, -0.014782568] -gra[1][7][4] = [-0.023485089, 0.013831518, -0.021172896, -0.027095923, 0.07826175, -0.015831877] -gra[1][7][5] = [-0.0134816, 0.0073947697, -0.023892898, -0.023722092, 0.073896036, -0.012981238] -gra[1][7][6] = [-0.013946036, 0.0, -0.009565255, 0.0022181221, -0.013034178, 0.0] -gra[1][7][7] = [-0.1296072, -0.1442439, -0.11772594, -0.02452228, -0.22837678, -0.14893955] -gra[1][7][8] = [-0.09351474, -0.0084727695, -0.050743505, -0.068448156, 0.008918113, 0.005457081] -gra[1][7][9] = [-0.015679458, -0.0576052, 0.2337375, 0.12339698, -0.07801207, -0.04771639] -gra[1][7][10] = [-0.011989798, -0.018274585, -0.11092469, 0.03623878, -0.067991786, 0.023738246] -gra[1][7][11] = [0.04772278, -0.09258899, 0.11116379, 0.14959577, -0.087560154, 0.008139222] -gra[1][7][12] = [0.003004335, -0.08354779, 0.08987856, 0.12448278, -0.101327725, -0.022079729] -gra[1][7][13] = [-0.019510493, -0.093155615, 0.0728795, 0.07653391, -0.053730335, -0.032885306] -gra[1][7][14] = [-0.042104535, -0.009785821, -0.01755292, 2.008588E-4, 0.013726235, -0.06798428] -gra[1][8][1] = [-0.19699688] -gra[1][8][2] = [-0.0037809995] -gra[1][8][3] = [-0.0015772863] -gra[1][8][4] = [0.0018007546] -gra[1][8][5] = [0.0026140255] -gra[1][8][6] = [-2.4660824E-11] -gra[1][8][7] = [-0.0066752536] -gra[1][8][8] = [-0.19699688] -gra[1][8][9] = [-0.024493186] -gra[1][8][10] = [0.025926992] -gra[1][8][11] = [-0.0053957887] -gra[1][8][12] = [-0.07335845] -gra[1][8][13] = [-0.0414089] -gra[1][8][14] = [-0.03604288] -gra[1][9][1] = [-0.03215016, -0.13737147, -0.15802538, -0.31892398, -0.20624262, -0.078629926] -gra[1][9][2] = [-0.05952637, -0.010836507, -0.007887523, -0.041915026, 0.053469047, -0.014452843] -gra[1][9][3] = [-0.04573596, 0.013338042, -0.016213104, -0.024018865, 0.08665495, 0.004695354] -gra[1][9][4] = [-0.04754288, 0.010904258, -0.018618636, -0.024018865, 0.090032995, 0.0048670936] -gra[1][9][5] = [-0.037539396, 0.013338042, -0.021145605, -0.02233195, 0.085607246, 0.010568369] -gra[1][9][6] = [-0.01127401, 0.0, -0.012245407, -0.0012549662, -0.01517438, -0.0015686363] -gra[1][9][7] = [-0.05112793, -0.014006899, -0.013934363, -0.017197616, 0.026523141, -0.01844468] -gra[1][9][8] = [0.016177364, -0.012701306, 0.0, 0.046596747, -0.020700313, -0.012177394] -gra[1][9][9] = [-0.03215016, -0.13737147, -0.15802538, -0.31892398, -0.20624262, -0.078629926] -gra[1][9][10] = [-0.027691698, -0.032388207, -0.07824364, 0.059880435, 0.05596056, 0.018381324] -gra[1][9][11] = [0.103498794, -0.040216103, 0.062177118, 0.110756174, 0.059570715, 0.0022290398] -gra[1][9][12] = [0.10042124, -0.063853696, 0.026564376, 0.02724505, -8.004056E-4, -0.01222833] -gra[1][9][13] = [0.03640536, -0.070025615, 0.046619833, -0.0041939775, 0.06556506, -0.056867536] -gra[1][9][14] = [0.027506243, -0.009208607, 0.041899607, 0.030765705, -0.024402268, -0.083207875] -gra[1][10][1] = [-0.22700319, -0.1375201, -0.23030068, -0.18327193, -0.06355304] -gra[1][10][2] = [-0.004317823, -0.030189537, -0.016693661, -0.019362736, 0.0016988069] -gra[1][10][3] = [-0.006293524, -0.06463695, -0.02939278, -0.022921724, 0.0021310751] -gra[1][10][4] = [-0.006293524, -0.066443875, -0.02939278, -0.014431438, 0.002968254] -gra[1][10][5] = [-0.009013527, -0.056440387, -0.02939278, -0.010356696, 0.002968254] -gra[1][10][6] = [-0.010577854, -0.01692955, 0.0, 0.0, 0.0042515756] -gra[1][10][7] = [-0.006494678, -0.035746936, -0.014152209, -0.018789249, 0.0016988069] -gra[1][10][8] = [0.0, -0.034866028, 0.043909788, -0.01032755, 0.0020160119] -gra[1][10][9] = [-0.006293524, -0.03642938, -0.024016019, -0.021367721, 0.0040959795] -gra[1][10][10] = [-0.22700319, -0.1375201, -0.23030068, -0.18327193, -0.06355304] -gra[1][10][11] = [0.016493393, 0.023839124, -0.028824054, -0.03582031, -0.11322439] -gra[1][10][12] = [0.002408312, -0.02686254, -0.003199962, -0.043980688, -0.07248109] -gra[1][10][13] = [0.0023821716, -0.02852016, 0.022710027, 0.0024976633, -0.082591094] -gra[1][10][14] = [-0.006466228, 0.024950877, 0.0045046695, -0.007963004, 9.530978E-4] -gra[1][11][1] = [0.0115634315, -0.1754307, -0.04472863, -0.21108384, -0.09292723, -0.10085574] -gra[1][11][2] = [-0.056997687, -0.00916218, -0.007887523, -0.041793864, 0.08209353, -0.011354894] -gra[1][11][3] = [-0.03058076, 0.00954598, -0.016213104, -0.022438496, 0.0804837, -0.017242681] -gra[1][11][4] = [-0.032387692, 0.00954598, -0.016213104, -0.022438496, 0.083861746, -0.018291987] -gra[1][11][5] = [-0.021216994, 0.00954598, -0.018933106, -0.02075158, 0.08062985, -0.012590716] -gra[1][11][6] = [-0.013345296, 0.0, -0.010166409, 0.0022181221, -0.016150277, -0.0015686363] -gra[1][11][7] = [-0.058763314, -0.024813319, -0.013934363, -0.018591769, 0.045031175, -0.01761809] -gra[1][11][8] = [-0.010564283, -0.014879585, 0.0, 0.08221486, -0.020155832, 0.011569124] -gra[1][11][9] = [-0.03976113, -0.0266835, -0.018693, -0.0038433694, 0.108054, -0.007127323] -gra[1][11][10] = [0.17253473, -0.0051165284, -0.12898529, 0.05902472, 0.08841419, -0.020457178] -gra[1][11][11] = [0.0115634315, -0.1754307, -0.04472863, -0.21108384, -0.09292723, -0.10085574] -gra[1][11][12] = [0.09484108, -0.06539201, 0.11705991, 0.13666858, -0.03076404, 0.030293347] -gra[1][11][13] = [0.031199355, -0.09599421, 0.03979923, 0.07013954, 0.044424616, -7.2653266E-4] -gra[1][11][14] = [-0.025792057, -0.010647351, 0.0070905373, 0.006118256, -0.015851455, -0.10208605] -gra[1][12][1] = [-0.08658051, -0.22899988, -0.10656684, -0.27604854, -0.2197972, -0.18337652] -gra[1][12][2] = [-0.05547315, -0.012346701, -0.010367418, -0.029486053, 0.05935009, -0.022474179] -gra[1][12][3] = [-0.024841659, 0.012640656, -0.021172896, -0.013413144, 0.07662204, -0.025180463] -gra[1][12][4] = [-0.026648592, 0.012640656, -0.021172896, -0.013413144, 0.08000008, -0.026229769] -gra[1][12][5] = [-0.019367125, 0.012640656, -0.023892898, -0.010039311, 0.07158921, -0.024388755] -gra[1][12][6] = [-0.0037196823, 0.0, -0.010166409, 0.0016691058, -0.020588506, -0.0015686363] -gra[1][12][7] = [-0.02981784, -0.023581509, -0.016414259, -0.004626396, 0.03383301, -0.031687073] -gra[1][12][8] = [0.020993255, -0.010776988, 0.0, 0.05328337, -0.020634232, 0.0070363255] -gra[1][12][9] = [7.665232E-4, -0.023638166, -0.026132688, 0.0109071825, 0.08044333, -0.018831125] -gra[1][12][10] = [0.19114436, -0.0047755605, -0.10173453, 0.037046153, 0.09390959, -0.023118684] -gra[1][12][11] = [-0.038150895, -0.021824643, -0.015327208, -0.012188856, 0.059729155, -0.0058229556] -gra[1][12][12] = [-0.08658051, -0.22899988, -0.10656684, -0.27604854, -0.2197972, -0.18337652] -gra[1][12][13] = [0.048063084, -0.09772287, 0.07237538, 0.025829254, 0.03243908, 0.0107249785] -gra[1][12][14] = [-0.016044322, -0.0119469175, 0.015410181, 0.021360878, 0.016821869, -0.06789728] -gra[1][13][1] = [-0.06831044, -0.13932145, -0.17696062, -0.22257882, -0.1827164, -0.18075173] -gra[1][13][2] = [-0.033473175, -0.0138693685, -0.010367418, -0.038903426, 0.0750564, -0.012684662] -gra[1][13][3] = [-0.0028416929, 0.011117988, -0.021172896, -0.022830518, 0.09346217, -0.019572249] -gra[1][13][4] = [-0.004648617, 0.011117988, -0.021172896, -0.022830518, 0.09684021, -0.017395958] -gra[1][13][5] = [0.0014656368, 0.011117988, -0.023892898, -0.019456686, 0.087295525, -0.014545322] -gra[1][13][6] = [-0.005318578, 0.0, -0.010166409, 0.002189381, -0.023704607, -0.0015686363] -gra[1][13][7] = [-0.007817864, -0.025104176, -0.016414259, -0.0140437735, 0.045698013, -0.024563886] -gra[1][13][8] = [0.028921302, -0.011783888, 0.0, 0.080733284, -0.023255521, -0.022090228] -gra[1][13][9] = [0.025339656, -0.025160834, -0.026132688, 0.0014898069, 0.09561606, -0.0074777785] -gra[1][13][10] = [0.17559843, -0.0028885743, -0.10483483, 0.025597045, 0.049072396, -0.0015286552] -gra[1][13][11] = [-0.025382519, -0.02160719, -0.011038008, -0.0280119, 0.079709224, 0.006208241] -gra[1][13][12] = [0.00560419, -0.02116654, -0.021172896, 0.0062681693, 0.085999615, -0.009809807] -gra[1][13][13] = [-0.06831044, -0.13932145, -0.17696062, -0.22257882, -0.1827164, -0.18075173] -gra[1][13][14] = [-0.022765206, -0.008642238, -0.005545456, -0.0016253758, -0.04435316, -0.07088209] -gra[1][14][1] = [0.44408634, -0.12092721, -0.10570723] -gra[1][14][2] = [-0.05545547, -0.0048188735, -0.0054277224] -gra[1][14][3] = [-0.084608115, -0.026899593, -0.011874196] -gra[1][14][4] = [-0.084608115, -0.028706519, -0.006607729] -gra[1][14][5] = [-0.084608115, -0.020130698, -0.011874196] -gra[1][14][6] = [-0.05576598, -0.017983004, 0.0] -gra[1][14][7] = [-0.062699944, -0.023920042, -0.008650959] -gra[1][14][8] = [-0.008844429, 0.09213399, 0.0071458695] -gra[1][14][9] = [-0.05575606, 0.035382736, -0.009415978] -gra[1][14][10] = [-0.013564611, 0.10450437, 0.0020520482] -gra[1][14][11] = [-0.06009103, 0.02992522, -0.0086509595] -gra[1][14][12] = [-0.07773001, 0.0020310916, -0.015097434] -gra[1][14][13] = [-0.076971106, -0.002655573, -0.015097434] -gra[1][14][14] = [0.44408634, -0.12092721, -0.10570723] -gra[2][0][0] = [-0.15201631] -gra[2][0][1] = [0.031203702] -gra[2][0][2] = [-0.15201631] -gra[2][1][0] = [0.0022879262, -0.004365769, 6.20738E-4, 4.4457944E-11, -0.0021720084, 9.538275E-4] -gra[2][1][1] = [-0.03861488, -0.12361071, -0.14622326, -0.16391519, -0.1494383, -0.26891392] -gra[2][1][2] = [-0.03861488, -0.12361071, -0.14622326, -0.16391519, -0.1494383, -0.26891392] -gra[2][3][2] = [-0.008076604, -0.07046831, -0.098895, -0.2321586, -0.36291665, -0.13428082, -0.25642043, -0.34169278, -0.11429488, -0.11130111, -0.1070063] -gra[2][3][3] = [-0.008076604, -0.07046831, -0.098895, -0.2321586, -0.36291665, -0.13428082, -0.25642043, -0.34169278, -0.11429488, -0.11130111, -0.1070063] -gra[2][3][4] = [0.0805982, -0.034465823, 0.07598917, -0.090299815, -0.020566557, -0.10127958, -0.07510182, 0.005006507, -6.042392E-4, 0.0012229868, 0.018206563] -gra[2][3][5] = [0.09489558, -0.06572845, 0.08711138, -0.16550836, -0.070603445, -0.14942205, -0.07379869, 0.0029941553, -6.0423923E-4, 0.0012229868, 0.001831753] -gra[2][3][6] = [-0.058871817, -0.006554798, 0.017428236, -4.6842685E-4, 0.025027804, -0.05349827, 5.9889373E-4, 0.04711724, 0.0, 0.005120207, -0.05144971] -gra[2][3][7] = [0.0048280074, -0.023354564, 0.044204026, -0.16188264, -0.020953348, -0.084573716, -0.008120204, -0.115129516, -0.0016438008, -4.6656062E-4, -0.036058363] -gra[2][3][8] = [-0.051234446, -0.051544387, 0.030227043, -0.011092558, -0.06453305, -0.062376987, -0.055727348, 0.08190204, 0.0, -0.0053235646, -0.04001494] -gra[2][3][9] = [0.036982387, -0.024936493, 0.13808824, 0.04746171, -0.024963146, -0.10614685, -0.04950322, -0.0445091, -6.042392E-4, 0.0020519749, -0.009407277] -gra[2][3][10] = [-0.018327229, 0.07086502, 0.044119813, -0.064103216, 0.03483749, -0.028801778, 0.0042893966, -0.0107006235, 0.0, 0.018656848, 0.029459191] -gra[2][3][11] = [-0.10527698, -0.015317527, 0.038830582, 0.050922435, -0.007117017, -0.102952145, 0.022075849, -0.06960322, -0.0021797004, 0.0012229867, 0.019433094] -gra[2][3][12] = [-0.02985796, -0.01805034, 0.07844547, 0.018029366, -0.07116665, -0.11370507, 0.00879039, -0.062679075, -0.0032192618, 0.0012229867, -0.003486286] -gra[2][3][13] = [0.027791135, 0.019933566, 0.13612899, 0.008909401, -0.09267632, -0.10002251, 0.005974208, -0.08863636, -0.0016438005, -0.0028344705, -0.03491522] -gra[2][3][14] = [0.030786296, -0.0064091478, -0.071676165, 0.038735196, 0.023161378, 0.022532098, 0.113017544, 0.03788906, -1.8203591E-10, 7.318466E-11, -0.051266756] -gra[2][4][2] = [-0.1294062, -0.20639215, -0.23590136, -0.37099618, -0.48548454, -0.20018376, -0.26166877, -0.41468206, -0.1289629, -0.13497436, -0.21379423] -gra[2][4][3] = [0.0302227, -0.0062450683, 0.123370245, -0.020649582, -0.01604276, -0.03070876, 0.01188374, 0.023794215, -0.002079915, -0.0077277506, 0.03669957] -gra[2][4][4] = [-0.1294062, -0.20639215, -0.23590136, -0.37099618, -0.48548454, -0.20018376, -0.26166877, -0.41468206, -0.1289629, -0.13497436, -0.21379423] -gra[2][4][5] = [0.15102442, -0.008147711, 0.0514243, -0.12282804, -0.043201454, -0.1278645, -0.07646969, -0.014425374, -6.042392E-4, 0.0012229868, 0.02046664] -gra[2][4][6] = [-0.06091963, -0.011449458, 0.019421639, -0.0049448065, 0.03811474, -0.05349827, 0.0015795783, 0.07086545, 0.0, 0.005120207, -0.050147213] -gra[2][4][7] = [0.041366346, -0.008510563, 0.010099679, -0.13262556, -9.927137E-4, -0.10384308, -0.005782647, -0.1192376, -0.0016438008, 0.0022671828, -0.020606475] -gra[2][4][8] = [-0.049276114, -0.058174442, 0.008468347, -0.0711803, -0.05036522, -0.065239266, -0.047402292, 0.10297411, 0.0, -0.0053235646, -0.0424478] -gra[2][4][9] = [0.09200959, -0.021697182, 0.122298524, 0.07767116, -0.02727232, -0.12138869, -0.049602136, -0.044220224, -6.042392E-4, 0.0020519749, -0.0068372646] -gra[2][4][10] = [-0.018110096, 0.05372959, 0.0151335355, -0.081490815, 0.033452507, -0.028801778, 0.002071476, -0.0021489211, 0.0, 0.018656848, 0.023107262] -gra[2][4][11] = [-0.04821482, -0.0013517933, 0.034565553, 0.09703982, -0.0135421455, -0.12116421, 0.027648013, -0.07703965, -0.0021797004, 0.0012229867, 0.032362547] -gra[2][4][12] = [0.026633851, 0.0017764987, 0.07997461, 0.066489205, -0.064625874, -0.12656163, 0.014263283, -0.052713, -0.0032192618, 0.0012229867, 0.003290647] -gra[2][4][13] = [0.078414686, 0.020772994, 0.14588076, 0.060945626, -0.09091907, -0.11564237, 0.0066668717, -0.08774518, -0.0016438005, 0.0012229867, -0.02239227] -gra[2][4][14] = [0.05219944, -0.008933335, 0.0011658408, 0.04304128, 0.02515228, 0.022532098, 0.113017544, 0.022577101, -1.8203591E-10, 0.0, -0.051266756] -gra[2][5][2] = [-0.109083325, -0.13635391, -0.1724807, -0.32005876, -0.44594473, -0.23302643, -0.24689698, -0.41167107, -0.12679145, -0.13053392, -0.23608541] -gra[2][5][3] = [0.028576976, -0.01202011, 0.14082508, 0.019831568, -0.025790168, -0.033188656, 0.010665469, 0.025290381, 0.0, -0.0077277506, 0.034657843] -gra[2][5][4] = [0.043157984, -0.011062228, 0.031184498, -0.0352323, -0.023394702, -0.033188656, 0.013148798, 0.025290381, 0.0, -0.0077277506, 0.039219104] -gra[2][5][5] = [-0.109083325, -0.13635391, -0.1724807, -0.32005876, -0.44594473, -0.23302643, -0.24689698, -0.41167107, -0.12679145, -0.13053392, -0.23608541] -gra[2][5][6] = [-0.08106713, -0.009225492, 0.02121906, 0.01605932, 0.04201092, -0.04117418, 0.0030047887, 0.038180098, 0.0, 0.0048741507, -0.03833175] -gra[2][5][7] = [0.055404905, -0.0032580243, 0.003150314, -0.13055943, -0.002897503, -0.084408045, -0.0074517485, -0.120952904, -0.0016438005, -4.6656062E-4, -0.021437926] -gra[2][5][8] = [-0.060963377, -0.085212074, -0.009545051, -0.04348558, -0.025346331, -0.024894798, -0.044431817, 0.06334871, 0.0, -0.0053235646, -0.0014865557] -gra[2][5][9] = [0.100335434, -0.014484472, 0.10726041, 0.08201783, -0.039257314, -0.093385816, -0.038351398, -0.04593553, -6.042392E-4, -1.4442275E-4, 0.0053760214] -gra[2][5][10] = [-0.018110096, 0.04624476, 0.03717503, -0.09730208, 0.02357287, -0.028801778, 0.002071476, -0.012438461, 0.0, 0.020372767, 0.02328694] -gra[2][5][11] = [-0.0465424, 0.009418742, 0.0085384855, 0.107614025, -0.025329215, -0.08669748, 0.036276024, -0.07935116, -6.042392E-4, 0.0012229867, 0.0421828] -gra[2][5][12] = [0.041238375, 0.013996747, 0.04491879, 0.06694699, -0.064760275, -0.08798072, 0.01705242, -0.056739807, 0.0023156772, 0.0012229867, 0.008966238] -gra[2][5][13] = [0.09660875, 0.032687586, 0.1290517, 0.058934357, -0.09491361, -0.08269146, 0.008766838, -0.08773481, -0.0016438005, 0.0012229867, -0.008198705] -gra[2][5][14] = [0.02811451, -0.008933335, -0.041697957, 0.04820372, 0.01699496, 0.022039022, 0.09601593, 0.016229236, -1.8203591E-10, 0.0, -0.06919619] -gra[2][6][2] = [-0.33506277, -0.18281105] -gra[2][6][3] = [0.050459035, -0.0480888] -gra[2][6][4] = [-0.058334365, -0.04194749] -gra[2][6][5] = [-0.050963223, -0.02262903] -gra[2][6][6] = [-0.33506277, -0.18281105] -gra[2][6][7] = [0.09761742, -0.01634203] -gra[2][6][8] = [-0.10002497, 0.04321725] -gra[2][6][9] = [0.117864504, 0.009139456] -gra[2][6][10] = [0.11780313, -0.04472417] -gra[2][6][11] = [0.055395056, -0.035537593] -gra[2][6][12] = [0.15576944, -0.0030296352] -gra[2][6][13] = [0.21003558, -0.042242486] -gra[2][6][14] = [-0.11417418, -0.017581403] -gra[2][7][2] = [-0.12298199, -0.15931123, -0.13213076, -0.3022618, -0.036190674, -0.17340623, -0.33445278, -0.1409332, -0.0928228, -0.13858096, -0.17792198] -gra[2][7][3] = [0.035498135, -0.014716316, 0.12900968, 0.0018816409, -0.026797201, -0.035668552, 0.0035608534, 0.005567723, -0.0015440702, -0.0077277506, -0.015831877] -gra[2][7][4] = [0.0473681, -0.020070724, 0.03502908, -0.039943375, -0.029462483, -0.035668552, 0.0024413813, 0.005567723, 0.0, -0.009627088, -0.015831877] -gra[2][7][5] = [0.05841018, -0.021761157, 0.033209726, -0.046052434, -0.027980871, -0.036883388, 0.0038042043, 0.005567723, 0.0, 0.0013718933, -0.012981238] -gra[2][7][6] = [-0.009183083, -0.022087386, -0.06500266, -0.003913735, -0.017434899, -0.015544581, -4.731787E-11, 0.012018705, -9.038228E-4, -0.0016083805, 0.0] -gra[2][7][7] = [-0.12298199, -0.15931123, -0.13213076, -0.3022618, -0.036190674, -0.17340623, -0.33445278, -0.1409332, -0.0928228, -0.13858096, -0.17792198] -gra[2][7][8] = [-0.071148, -0.09141699, 0.045326322, -0.02822847, -0.09423955, -0.012837715, -0.034597382, 0.05246252, 0.0, -0.0053235646, 0.005457081] -gra[2][7][9] = [0.015466833, -0.008577296, 0.03190451, 0.07564043, 0.09118151, 0.039182235, -0.025927924, 0.004676326, -6.042392E-4, -0.0069806715, -0.04385624] -gra[2][7][10] = [0.034649882, 0.116863064, 0.0033220518, -0.050275527, 0.037978306, -0.059653025, 0.023348592, -0.064188465, 0.0, 0.018263478, 0.008097947] -gra[2][7][11] = [-0.09295004, -0.020071309, -0.04982135, 0.1150547, 0.10578166, 0.014203327, 0.0359425, -0.011216718, -6.042392E-4, -0.0018316435, 0.011277605] -gra[2][7][12] = [-0.017506499, -0.009194653, 0.0039268765, 0.071446136, 0.06919665, 0.010327638, 0.0055351285, 0.07338563, -0.0016438005, -0.0018316435, -0.0048638657] -gra[2][7][13] = [0.023693724, 0.0089093065, 0.082926564, 0.04914708, 0.03025364, 0.011693382, 0.0027329288, 0.04278699, -0.0016438005, -0.0018316435, -0.023996033] -gra[2][7][14] = [0.030249318, -0.020417277, -0.020274054, -0.011022337, 4.5096013E-4, 0.0026602726, 0.10006753, 0.02086204, -0.0019475454, -0.0010469037, -0.06419305] -gra[2][8][2] = [-0.098765604, -0.21473517, -0.15407726, -0.2138582, -0.29589483, -0.20712286] -gra[2][8][3] = [0.045760147, -0.004769299, -0.038730323, -0.023269074, -0.0036128643, -0.0053470596] -gra[2][8][4] = [-0.059532464, -0.007675047, -0.080555335, -0.023269074, -0.0050796065, -0.0053470596] -gra[2][8][5] = [-0.056172833, -0.0029287338, -0.07756553, -0.02448391, -0.0017491262, -0.0053470596] -gra[2][8][6] = [-0.053191774, -0.01284402, -0.0022998422, -0.015544581, -0.005061429, -0.005767472] -gra[2][8][7] = [-0.024624372, -0.016473431, -0.038519755, -0.0142682865, -0.0017491262, -0.005605762] -gra[2][8][8] = [-0.098765604, -0.21473517, -0.15407726, -0.2138582, -0.29589483, -0.20712286] -gra[2][8][9] = [0.14998935, 0.03556885, 0.16636685, -0.07407579, -0.042286556, -0.03358767] -gra[2][8][10] = [0.10997251, 0.121142365, -0.06810031, -0.012015331, -0.004103984, -0.013681764] -gra[2][8][11] = [0.09455238, 0.08597852, 0.12715638, -0.044376574, -0.05856059, -0.002812602] -gra[2][8][12] = [0.09410553, 0.112332866, 0.1220707, -0.021252448, -0.06676871, 0.008941967] -gra[2][8][13] = [0.15745735, 0.12265156, 0.19168386, -0.016919304, -0.07282984, 0.0030826405] -gra[2][8][14] = [-0.08871041, -0.015491295, 0.076912574, 0.021117939, 0.020992978, -0.030493984] -gra[2][9][2] = [-0.105878875, -0.1524388, -0.1099966, -0.20480473, -0.3305924, -0.21370567, -0.33320028, -0.24001853, -0.10375746, -0.11412878, -0.10761234] -gra[2][9][3] = [0.03317759, -0.016845642, 0.1503404, -0.021122754, -0.023720142, -0.03070876, 0.010665469, 0.02652775, 0.0, -0.0077277506, 0.0036460478] -gra[2][9][4] = [0.042134404, -0.022997983, 0.046800338, -0.06400117, -0.026385423, -0.03311429, 0.011930525, 0.02652775, -0.002650973, -0.0077277506, 0.0048670936] -gra[2][9][5] = [0.04673974, -0.015817884, 0.044920944, -0.07011023, -0.02659073, -0.03413609, 0.013293348, 0.02652775, 0.0, -0.006354918, 0.010568369] -gra[2][9][6] = [-0.012488609, -0.022087386, -0.071482256, -0.0012417086, -0.020907987, -0.018224735, 0.0, 0.012018705, -9.038228E-4, -0.0016083805, -0.0027130097] -gra[2][9][7] = [0.0716151, -0.03751232, 1.3603596E-4, -0.04638823, -0.023721159, -0.019228077, 0.0046084328, 0.035835125, 0.0047529186, -0.006096343, -0.01602985] -gra[2][9][8] = [-0.015797166, -0.024351576, -0.0215403, 0.034865953, 0.046004623, 0.034118768, -0.023652218, 0.019558845, 0.0, 0.012150579, -0.007978012] -gra[2][9][9] = [-0.105878875, -0.1524388, -0.1099966, -0.20480473, -0.3305924, -0.21370567, -0.33320028, -0.24001853, -0.10375746, -0.11412878, -0.10761234] -gra[2][9][10] = [-0.01967794, 0.10183758, 0.15366054, -0.06979019, 0.05891821, -0.022391455, 0.018301774, 0.021346226, 0.0, 0.020372767, 0.003545857] -gra[2][9][11] = [-0.06909444, 0.032301586, 0.097309515, 0.1708307, 0.066942066, -0.03478332, 0.08301894, -0.048377972, -0.004067228, 0.002650639, 0.005367422] -gra[2][9][12] = [-0.01954465, 0.0104994485, 0.104454204, 0.16886304, -0.028041093, -0.052986544, 0.042617302, -0.023035575, -0.0051067895, 0.002650639, 0.004987537] -gra[2][9][13] = [0.030839257, 0.03203931, 0.20222194, 0.10506295, -0.050474267, -0.014566283, 0.040826432, -0.034744743, -0.0051067895, 0.002650639, -0.047978267] -gra[2][9][14] = [0.010195935, -0.019840062, -0.05840256, 0.058588445, 0.031015806, 0.062112793, 0.09405385, 0.017498635, 0.0, 0.0, -0.07941664] -gra[2][10][2] = [-0.077617064, -0.24597266, -0.30084527, -0.33237344, -0.18720393, -0.09771022, -0.20302433] -gra[2][10][3] = [0.026043031, -0.0037977588, -0.023269074, -0.028983576, -0.0015887114, 0.0010817688, 0.037429087] -gra[2][10][4] = [-0.07763809, -0.006703506, -0.023269074, -0.07080858, -0.0015887114, 0.002968254, 0.05529735] -gra[2][10][5] = [-0.071017, -0.0019571928, -0.02448391, -0.076917656, -0.0015887114, 0.002968254, 0.057679832] -gra[2][10][6] = [-0.053191774, -0.022087386, -0.0177017, -0.0068972483, -0.0022654566, 0.003107202, -0.009080095] -gra[2][10][7] = [-0.06515035, -0.021679426, -0.0142682865, -0.018913662, -0.0033213743, 0.004113634, 0.07422953] -gra[2][10][8] = [1.4555454E-4, -0.0073065395, 0.040923893, -0.037498906, 0.0028213095, 0.0035354842, -0.008792204] -gra[2][10][9] = [0.037463915, 0.030624442, -0.01446133, 0.025323104, 0.0, 0.0040959795, 0.03213553] -gra[2][10][10] = [-0.077617064, -0.24597266, -0.30084527, -0.33237344, -0.18720393, -0.09771022, -0.20302433] -gra[2][10][11] = [0.079399094, 0.15027712, -0.07128487, 0.0870506, -0.006525742, -0.108242765, 0.08370259] -gra[2][10][12] = [0.07473828, 0.1260693, -0.039055545, 0.058323834, 4.2641436E-4, -0.05526523, 0.06886024] -gra[2][10][13] = [0.1526189, 0.14199956, -0.020716881, 0.056881983, 0.0029196735, -0.073701814, 0.08012534] -gra[2][10][14] = [-0.07117805, -0.040356413, 0.016607894, 0.07246468, -0.021312775, 0.0047443355, 0.0738589] -gra[2][11][2] = [-0.17702022, -0.19049807, 0.0033187612, -0.1610911, -0.22275227, -0.1004089, -0.4127527, -0.27582508, -0.097562976, -0.09680039, -0.12983814] -gra[2][11][3] = [0.03317759, -0.021450516, 0.14371678, -0.007020961, -0.022139775, -0.03070876, 0.0059119724, 0.0074535403, 0.0, -0.0077277506, -0.018291987] -gra[2][11][4] = [0.043792337, -0.024356263, 0.04062908, -0.048845977, -0.024805054, -0.03070876, 0.007177029, 0.0074535403, 0.0, -0.0077277506, -0.018291987] -gra[2][11][5] = [0.04839767, -0.019609947, 0.039943546, -0.053787827, -0.02501036, -0.031923596, 0.008539852, 0.008833618, 0.0, -0.0077277506, -0.012590716] -gra[2][11][6] = [-0.01400961, -0.022087386, -0.072458155, -0.0033129938, -0.017434899, -0.016145736, 0.0, 0.012018705, -9.038228E-4, -0.0016083805, -0.0027130097] -gra[2][11][7] = [0.071528405, -0.04831874, 0.018644067, -0.054023616, -0.025115307, -0.019228077, 0.0033746741, 0.011975225, 0.0039619114, -0.008320883, -0.015203262] -gra[2][11][8] = [-0.022458976, -0.026009362, -0.011533938, -0.001877947, 0.08073837, 0.040923893, -0.026807453, 0.042773336, -0.0017965699, 0.018487457, 0.015768506] -gra[2][11][9] = [0.030610166, 0.0044976464, 0.19679622, 0.019722905, -0.01275599, -0.024380911, 0.0107252635, 0.016309183, 0.0, -0.005151834, -0.007127323] -gra[2][11][10] = [0.025785115, 0.037166946, 0.014565164, 0.006083017, 0.08089537, -0.09699656, -0.0730818, 0.07966486, 0.0024555703, 0.022535702, -0.0056969775] -gra[2][11][11] = [-0.17702022, -0.19049807, 0.0033187612, -0.1610911, -0.22275227, -0.1004089, -0.4127527, -0.27582508, -0.097562976, -0.09680039, -0.12983814] -gra[2][11][12] = [-0.06441311, 0.026440911, 0.12037103, 0.13888726, 0.08138243, 0.010932655, 0.020394541, 0.008380487, -0.0016438005, 0.005044714, 0.04750921] -gra[2][11][13] = [-0.02790359, 0.0060707172, 0.1810815, 0.09985693, 0.023859262, -0.021386884, 0.0015091486, -0.009860844, -0.0016438005, 0.002642244, 0.008162747] -gra[2][11][14] = [0.070758194, -0.021278806, -0.049851753, 0.005290147, 0.0063683577, 0.027303727, 0.13471515, 0.040411703, 0.0, 0.0, -0.09829482] -gra[2][12][2] = [-0.19875024, -0.2440672, -0.123551175, -0.2592351, -0.28771695, -0.16224714, -0.36199668, -0.30089164, -0.11223101, -0.13092594, -0.21235895] -gra[2][12][3] = [0.03317759, -0.018355839, 0.14098895, -0.0012818617, -0.013114419, -0.035668552, 0.0035608534, 0.011555983, -0.0010550276, -0.005276286, -0.026229769] -gra[2][12][4] = [0.043792337, -0.021261584, 0.036767416, -0.043106876, -0.0157797, -0.035668552, 0.0048259096, 0.011555983, 5.769341E-4, -0.005476473, -0.026229769] -gra[2][12][5] = [0.04839767, -0.016515272, 0.030902896, -0.051937968, -0.014298091, -0.036883388, 0.0061887326, 0.010669847, 0.0, -0.005476473, -0.024388755] -gra[2][12][6] = [-0.014100589, -0.022087386, -0.07689638, 0.006312619, -0.017983915, -0.016145736, 0.0, 0.012018705, -0.0046197325, -0.0016083805, -0.0027130097] -gra[2][12][7] = [0.071528405, -0.047086928, 0.0074459035, -0.02507813, -0.011149936, -0.02170797, -1.1943467E-4, 0.010529782, 0.0047529186, -0.0060696052, -0.029272247] -gra[2][12][8] = [-0.025169602, -0.021906763, -0.012012333, 0.029679593, 0.051806875, 0.040923893, -0.041877814, 0.05035637, 0.0, 0.010175859, 0.011235707] -gra[2][12][9] = [0.033317532, 0.007542981, 0.16918556, 0.060250558, 0.0019945612, -0.0318206, 0.008374144, 0.024137018, 0.0, -0.002900556, -0.018831125] -gra[2][12][10] = [0.037359554, 0.03554336, 0.010199685, 0.02761072, 0.05891679, -0.0697458, -0.02648961, 0.10116728, 0.002381391, 0.010580534, -0.0068383366] -gra[2][12][11] = [0.018431593, 0.0055147577, 0.13500987, 0.0076680183, -0.01452204, -0.027323436, 0.0052284813, 0.023991466, 7.6891546E-4, -0.002900556, -4.2205094E-4] -gra[2][12][12] = [-0.19875024, -0.2440672, -0.123551175, -0.2592351, -0.28771695, -0.16224714, -0.36199668, -0.30089164, -0.11223101, -0.13092594, -0.21235895] -gra[2][12][13] = [0.086594634, 0.021821834, 0.21497643, 0.09232503, -0.020451026, -0.015387063, -0.013508427, 0.029255526, -0.0016438005, 0.0012229867, 0.019614253] -gra[2][12][14] = [0.07045497, -0.022578374, -0.017178424, 0.015037881, 0.021610979, 0.035623375, 0.12032417, 0.020360775, 0.0, -2.2505768E-11, -0.06410605] -gra[2][13][2] = [-0.19951446, -0.15438879, -0.086470366, -0.240965, -0.23424724, -0.2326409, -0.32325682, -0.25252593, -0.12048934, -0.13127431, -0.20973417] -gra[2][13][3] = [0.034109738, -0.019878507, 0.15669526, 0.020718105, -0.022531796, -0.035668552, 0.007155873, 0.016494725, 0.0, -0.0077277506, -0.020621555] -gra[2][13][4] = [0.044724483, -0.022784252, 0.053607546, -0.021106908, -0.025197076, -0.035668552, 0.008420929, 0.016494725, 0.0, -0.0077277506, -0.017395958] -gra[2][13][5] = [0.049483325, -0.018037941, 0.046609215, -0.031105205, -0.023715466, -0.036883388, 0.009783752, 0.015608587, 0.0, -0.0077277506, -0.014545322] -gra[2][13][6] = [-0.011615532, -0.022087386, -0.08001248, 0.0047137234, -0.01746364, -0.016145736, 0.0, 0.012018705, -9.038228E-4, -0.0016083805, -0.0027130097] -gra[2][13][7] = [0.07384895, -0.048609596, 0.019310912, -0.0030781596, -0.020567313, -0.02170797, 0.0034755857, 0.018190926, 0.0047529186, -0.006096343, -0.02214906] -gra[2][13][8] = [-0.022202594, -0.022913663, -0.014633628, 0.03760764, 0.07925679, 0.040923893, -0.046354357, 0.046572696, 0.0019757631, 0.012150579, -0.017890848] -gra[2][13][9] = [0.037301484, 0.006020313, 0.18435828, 0.08482369, -0.007422815, -0.0318206, 0.011969165, 0.026871076, 0.0, -0.005151834, -0.0074777785] -gra[2][13][10] = [0.03558677, 0.037430346, -0.034637507, 0.012064794, 0.0474677, -0.07284611, 0.012233781, 0.09341223, 0.002381391, 0.014459286, 0.014751689] -gra[2][13][11] = [0.01767755, 9.858967E-4, 0.15244359, 0.03832726, -0.030345086, -0.023034235, 0.0076052295, 0.030979762, 7.6891546E-4, -0.005151834, 0.0116091445] -gra[2][13][12] = [0.054678664, -0.022402693, 0.1139498, 0.065429255, -0.0024198703, -0.029360235, 0.008978962, 0.038531862, -1.4217425E-4, -0.004681904, -0.008489365] -gra[2][13][13] = [-0.19951446, -0.15438879, -0.086470366, -0.240965, -0.23424724, -0.2326409, -0.32325682, -0.25252593, -0.12048934, -0.13127431, -0.20973417] -gra[2][13][14] = [0.014282126, -0.014524782, -0.13251245, 0.02636649, -0.0041411947, 0.015749522, 0.08567208, 0.011856999, 0.0, -0.0013691243, -0.067090854] -gra[2][14][2] = [0.4343303, -0.37244362, -0.28004685, -0.12789774, -0.21803154, -0.12783362, -0.21811707, -0.14185552] -gra[2][14][3] = [-0.050213013, 0.088265896, 0.0025411625, 0.008415423, -0.030471062, -0.0032232369, 0.046410937, -0.052638464] -gra[2][14][4] = [-0.05870517, -0.014300982, -0.042183742, 0.0055096745, -0.030471062, 4.3161202E-4, 0.0642792, -0.052638464] -gra[2][14][5] = [-0.05870517, -0.0060108323, -0.04972046, 0.010255989, -0.030471062, -0.0048348554, 0.06765758, -0.0538533] -gra[2][14][6] = [-0.054352902, -0.0631387, -0.007950703, -0.022087386, 0.036315702, -9.038228E-4, -0.031075135, -0.015544581] -gra[2][14][7] = [-0.037878644, -0.019238206, -0.01619927, -0.009466247, -0.03137149, 6.023841E-5, 0.08327374, -0.035573896] -gra[2][14][8] = [-0.0027976157, 0.047380313, 0.09339658, -0.011650267, -0.008736845, 0.008354038, -0.008792204, 0.037216727] -gra[2][14][9] = [-0.03965546, 0.12285828, 0.09784784, 0.045220323, -0.016584467, -0.0048348554, 0.04369542, -0.035722323] -gra[2][14][10] = [-0.017961588, 0.061617773, -0.0027846463, 0.041740574, -0.012447634, 0.0, 0.019691546, -0.011759965] -gra[2][14][11] = [-0.043990437, 0.08404583, 0.09661607, 0.036632266, -0.022157721, -0.0040659397, 0.033597667, -0.04387355] -gra[2][14][12] = [-0.043106366, 0.037694193, 0.08272809, 0.01872339, -0.032401294, -0.008058093, 0.07131885, -0.03826637] -gra[2][14][13] = [-0.03528687, 0.057534255, 0.057536703, 0.023469703, -0.029970387, -0.008058093, 0.071832515, -0.03826637] -gra[2][14][14] = [0.4343303, -0.37244362, -0.28004685, -0.12789774, -0.21803154, -0.12783362, -0.21811707, -0.14185552] -gra[3][0][0] = [-0.038961984] -gra[3][0][1] = [0.11764526] -gra[3][0][2] = [-0.0029783393] -gra[3][0][3] = [-0.038961984] -gra[3][1][0] = [0.0022879262, 0.0031182556, 6.20738E-4, 4.4457944E-11, -0.0021720084, 9.538275E-4] -gra[3][1][1] = [-0.012393069, -0.15868439, -0.21871509, -0.18274719, -0.15518439, -0.21593317] -gra[3][1][2] = [0.10560748, -0.042098567, 0.043105654, -0.026443, -0.007685846, -0.035907257] -gra[3][1][3] = [-0.012393069, -0.15868439, -0.21871509, -0.18274719, -0.15518439, -0.21593317] -gra[3][2][0] = [-0.0023283148, 0.0050770696, 6.4378075E-4, 0.0042653317, -0.00452922, 7.4807646E-11, -5.665981E-4, -3.050395E-11, 0.0012653338, 0.0024696218, -0.008016303] -gra[3][2][1] = [-5.13921E-4, -3.7906157E-11, -0.045772243, -0.0041412255, -0.018871907, -0.0028272104, -0.012859132, 0.035186574, -7.720956E-4, 0.0035228117, -0.042637575] -gra[3][2][2] = [-0.1527792, -0.113233194, -0.054301165, -0.15919417, -0.20111087, -0.16079815, -0.25796932, -0.241832, -0.18616161, -0.13430928, -0.21455298] -gra[3][2][3] = [-0.1527792, -0.113233194, -0.054301165, -0.15919417, -0.20111087, -0.16079815, -0.25796932, -0.241832, -0.18616161, -0.13430928, -0.21455298] -gra[3][4][3] = [0.080264926, 0.02579656, -0.16407087, -0.2805622, -0.3278504, -0.15959191, -0.2234307, -0.34202027, -0.100388475, -0.11454372, -0.15381846] -gra[3][4][4] = [0.080264926, 0.02579656, -0.16407087, -0.2805622, -0.3278504, -0.15959191, -0.2234307, -0.34202027, -0.100388475, -0.11454372, -0.15381846] -gra[3][4][5] = [0.19779329, 0.004704324, 0.0028100526, -0.19220777, -0.046565086, -0.12838551, -0.07412594, -0.0021814913, -6.042392E-4, 0.0012229872, 0.0031403098] -gra[3][4][6] = [-0.081183486, -0.028070848, 0.030555831, -0.022723744, 0.025027804, -0.04813345, 0.003595072, 0.047705334, 0.0016591108, 0.002712621, -0.05144971] -gra[3][4][7] = [0.0039748983, 9.6383225E-4, -0.04841364, -0.22035895, -0.03633671, -0.14051624, -0.0058753714, -0.10428843, -0.0016438008, 0.0022671833, -0.03286426] -gra[3][4][8] = [-0.040510423, -0.061654296, 0.030528117, 0.02659813, -0.07196968, -0.081996635, -0.055243164, 0.08190204, 0.0, -0.004978219, -0.037152667] -gra[3][4][9] = [0.11776427, -0.058918525, 0.12595578, -0.11178863, -0.029508589, -0.1381523, -0.047258385, -0.02285704, -6.042392E-4, 0.002051975, -0.022911087] -gra[3][4][10] = [-0.008554228, 0.0412348, -0.12479799, -0.051410124, 0.030709445, -0.042462237, 0.0072704786, -0.006176661, 0.0, 0.008652416, 0.022637697] -gra[3][4][11] = [-0.11572003, -0.04492593, -0.009004474, -0.042554148, -0.010522034, -0.16364421, 0.022561576, -0.048643857, -4.865427E-5, -0.0039698915, -0.0014345944] -gra[3][4][12] = [-0.0069528553, -0.057728425, -0.005433593, -0.06658935, -0.07646103, -0.15282395, 0.011035223, -0.039221756, -0.0032192618, -0.0039698915, -0.010328554] -gra[3][4][13] = [0.04217954, -0.036901977, 0.05292665, -0.092318825, -0.100017145, -0.15756387, 0.008219042, -0.06517905, -0.0016438005, 0.0012229871, -0.04239282] -gra[3][4][14] = [-0.00299038, 0.03920348, -0.042208888, 0.05008921, 0.023527399, 0.020578144, 0.1248354, 0.032437425, -1.8203591E-10, 0.0, -0.051266756] -gra[3][5][3] = [-0.024207622, -0.04951211, -0.22784083, -0.37396744, -0.41374195, -0.26431063, -0.2183969, -0.40905178, -0.11288505, -0.13377653, -0.28086165] -gra[3][5][4] = [-0.057146087, -0.039673835, 0.17305376, -0.01683017, -0.022667397, -0.02753507, 0.01188374, 0.025290381, 9.0512355E-12, -0.012879585, 0.04504322] -gra[3][5][5] = [-0.024207622, -0.04951211, -0.22784083, -0.37396744, -0.41374195, -0.26431063, -0.2183969, -0.40905178, -0.11288505, -0.13377653, -0.28086165] -gra[3][5][6] = [-0.09216936, -0.030741546, 0.03069731, 0.001978191, 0.04201092, -0.037597638, 0.007732113, 0.03876819, 0.0016591108, 0.0048741507, -0.03833175] -gra[3][5][7] = [0.04825837, 0.021060362, -0.08345264, -0.1970743, -0.016389595, -0.1403506, -0.0074517485, -0.1133868, -0.0016438005, -4.6656025E-4, -0.028017744] -gra[3][5][8] = [-0.053781927, -0.098772004, -0.011392334, -0.005794887, -0.033350054, -0.041652158, -0.043947633, 0.06334871, 0.0, -0.004978219, -0.0014865557] -gra[3][5][9] = [0.17482388, -0.048466492, 0.10114264, -0.08527103, -0.041911483, -0.12539127, -0.038351398, -0.027558457, -6.042392E-4, -1.444224E-4, -0.007109831] -gra[3][5][10] = [-0.008337104, 0.016614538, -0.13279286, -0.08460896, 0.019444827, -0.042462237, 0.0050525577, -0.007914498, 0.0, 0.010368334, 0.019255804] -gra[3][5][11] = [-0.06327887, -0.020189673, -0.033281863, 0.0060988883, -0.02684297, -0.14738953, 0.034516916, -0.061666783, 0.0015268069, -0.0039698915, 0.022333067] -gra[3][5][12] = [0.05785005, -0.02568133, -0.03294557, -0.025710281, -0.06816338, -0.12709959, 0.01705242, -0.03655747, 0.0023156772, -0.0039698915, 0.0031419299] -gra[3][5][13] = [0.10470373, -0.024147956, 0.051864047, -0.050332405, -0.100363165, -0.1402328, 0.008766838, -0.067552485, -0.0016438005, 0.0012229871, -0.0146583365] -gra[3][5][14] = [-0.0038765296, 0.036679298, -0.014407332, 0.05955772, 0.017360983, 0.020085067, 0.10783379, 0.016229236, -1.8203591E-10, 0.0, -0.06919619] -gra[3][6][3] = [-0.39042288, -0.20252663] -gra[3][6][4] = [0.11618018, -0.036191344] -gra[3][6][5] = [0.013443776, -0.027157694] -gra[3][6][6] = [-0.39042288, -0.20252663] -gra[3][6][7] = [0.011014465, -0.016218057] -gra[3][6][8] = [-0.10187224, 0.029533952] -gra[3][6][9] = [0.11174672, -0.0030878466] -gra[3][6][10] = [-0.05216477, -0.034098495] -gra[3][6][11] = [0.013574712, -0.042492915] -gra[3][6][12] = [0.07790509, 0.003786453] -gra[3][6][13] = [0.13284796, -0.02833015] -gra[3][6][14] = [-0.086883545, -0.032392908] -gra[3][7][3] = [-0.03810625, -0.07246947, -0.18749088, -0.35617045, -0.0039878795, -0.20469043, -0.30595267, -0.13831393, -0.07891641, -0.14182357, -0.22269824] -gra[3][7][4] = [-0.054191194, -0.04623367, 0.19473083, -0.019242423, -0.028735178, -0.030014966, 0.0035608534, 0.005567723, 9.0512355E-12, -0.012879585, -0.010007761] -gra[3][7][5] = [-0.027313534, -0.049789086, 0.0976167, -0.04305214, -0.02725357, -0.030014966, 0.0036596532, 0.005567723, 9.0512355E-12, -0.0037799405, -0.007157123] -gra[3][7][6] = [-0.022742484, -0.006928928, -0.04051508, -0.003913735, -0.025036301, -0.018571196, -4.731787E-11, 0.0, -0.0045685717, -0.0016083805, 0.0] -gra[3][7][7] = [-0.03810625, -0.07246947, -0.18749088, -0.35617045, -0.0039878795, -0.20469043, -0.30595267, -0.13831393, -0.07891641, -0.14182357, -0.22269824] -gra[3][7][8] = [-0.06396654, -0.10820116, 0.026846237, -0.013104029, -0.099735364, -0.02959507, -0.0341132, 0.05246252, 0.0, -0.0033622796, 0.005457081] -gra[3][7][9] = [0.08995527, -0.042559315, 0.02578675, -0.091648445, 0.08852732, 0.0071767634, -0.025927924, 0.0230534, -6.042392E-4, -0.006980671, -0.056342095] -gra[3][7][10] = [0.04442288, 0.08723284, -0.16664585, -0.037582442, 0.03385026, -0.07331349, 0.026329678, -0.059664503, 0.0, 0.008259046, 0.0040668105] -gra[3][7][11] = [-0.10968651, -0.049679715, -0.091641724, 0.0135395825, 0.10426791, -0.04648871, 0.03418339, 0.00646766, 0.0015268069, -0.007024522, -0.00857213] -gra[3][7][12] = [-8.94831E-4, -0.048872735, -0.07393748, -0.021211132, 0.06579353, -0.028791236, 0.0055351285, 0.09356796, -0.0016438005, -0.007024522, -0.010688173] -gra[3][7][13] = [0.031788692, -0.047926236, 0.005738914, -0.06011968, 0.024804078, -0.045847956, 0.0027329288, 0.06296933, -0.0016438005, -0.0018316432, -0.030455668] -gra[3][7][14] = [-0.0017417222, 0.025195358, 0.0070165694, 3.3167237E-4, 8.169799E-4, 7.0631783E-4, 0.11188539, 0.02086204, -0.0019475454, -0.0010469037, -0.06419305] -gra[3][8][3] = [-0.15412576, -0.12789336, -0.20798595, -0.24514237, -0.30613858, -0.2518991] -gra[3][8][4] = [0.111481294, -0.036286652, -0.05985439, -0.017615488, -0.005918055, 4.770551E-4] -gra[3][8][5] = [0.008234154, -0.030956661, -0.07456523, -0.017615488, -0.0025875743, 4.770551E-4] -gra[3][8][6] = [-0.028704194, 0.002314438, -0.0022998422, -0.018571196, -0.003225636, -0.0043171197] -gra[3][8][7] = [-0.011244033, -0.016609045, -0.057324897, -0.01446133, -6.4382935E-4, -0.008020589] -gra[3][8][8] = [-0.15412576, -0.12789336, -0.20798595, -0.24514237, -0.30613858, -0.2518991] -gra[3][8][9] = [0.14387159, 0.0015868242, -9.2201936E-4, -0.10608127, -0.04583137, -0.046073522] -gra[3][8][10] = [-0.059995398, 0.09151214, -0.05540722, -0.025675789, -0.004103984, -0.017712904] -gra[3][8][11] = [0.052732036, 0.056370113, 0.025641251, -0.10506861, -0.06615821, -0.022662342] -gra[3][8][12] = [0.01624117, 0.07265478, 0.029413441, -0.06037133, -0.069066934, 0.0031176568] -gra[3][8][13] = [0.08026971, 0.06581602, 0.08241708, -0.07446065, -0.09312223, -0.0033769957] -gra[3][8][14] = [-0.061419778, 0.030121334, 0.088266574, 0.019163983, 0.020992978, -0.030493984] -gra[3][9][3] = [-0.021003172, -0.065597035, -0.16535676, -0.25871342, -0.29838958, -0.24498987, -0.3047002, -0.23739927, -0.08985106, -0.117371395, -0.15238857] -gra[3][9][4] = [-0.056511734, -0.050796784, 0.21606155, -0.04224682, -0.02565812, -0.027460705, 0.010665469, 0.02652775, -0.002650973, -0.012879585, 0.010691209] -gra[3][9][5] = [-0.03898397, -0.04384581, 0.10932791, -0.067109935, -0.025863424, -0.027267672, 0.013148798, 0.02652775, 9.0512355E-12, -0.011506752, 0.016392484] -gra[3][9][6] = [-0.026048012, -0.006928928, -0.04699468, -0.0012417085, -0.02850939, -0.02125135, 0.0, 0.0, -0.0045685717, -0.0016083805, -0.0012626576] -gra[3][9][7] = [-0.0125679895, -0.037647933, 0.01847256, -0.069894865, -0.022533493, -0.01942112, 0.007643792, 0.031788614, -1.4217442E-4, -0.007257821, -0.01844468] -gra[3][9][8] = [-0.011030057, -0.027001118, -0.016916927, 0.054259032, 0.046004623, 0.027047869, -0.027326334, 0.019558845, 0.0, 0.005164899, -0.010124459] -gra[3][9][9] = [-0.021003172, -0.065597035, -0.16535676, -0.25871342, -0.29838958, -0.24498987, -0.3047002, -0.23739927, -0.08985106, -0.117371395, -0.15238857] -gra[3][9][10] = [-0.009904943, 0.08271649, -6.605489E-4, -0.05324988, 0.059516188, -0.03834217, 0.021282855, 0.025870191, 0.0, 0.010368334, -0.0012901137] -gra[3][9][11] = [-0.08583092, 0.0026931786, 0.055489168, 0.069315575, 0.06542832, -0.09547536, 0.08125984, -0.030693594, -0.001936182, -0.0025422391, -0.014482316] -gra[3][9][12] = [-0.002932982, -0.029178634, 0.02658984, 0.0762058, -0.03144419, -0.09210541, 0.042617302, -0.0028532404, -0.0051067895, -0.0025422391, -8.367696E-4] -gra[3][9][13] = [0.03893423, -0.02479623, 0.12503432, -0.0042038285, -0.05592381, -0.072107635, 0.040826432, -0.014562405, -0.0051067895, 0.0026506395, -0.054437894] -gra[3][9][14] = [-0.021795094, 0.02577257, -0.031111931, 0.06994245, 0.031381827, 0.060158834, 0.10587171, 0.017498635, 0.0, 0.0, -0.07941664] -gra[3][10][3] = [-0.1329772, -0.15913084, -0.33212945, -0.38628212, -0.17085952, -0.14248645, -0.11814857] -gra[3][10][4] = [0.09687643, -0.03531511, -0.017615488, -0.050107636, 0.0, 0.008792369, -0.04500673] -gra[3][10][5] = [-0.0066100135, -0.02998512, -0.017615488, -0.07391735, 0.0, 0.008792369, -0.028043877] -gra[3][10][6] = [-0.028704194, -0.006928928, -0.020728316, -0.0068972483, -0.0061344863, 0.004557554, -0.022639498] -gra[3][10][7] = [-0.046813827, -0.02181504, -0.01446133, -0.042420294, -0.0033213743, 0.0016988069, -0.00995356] -gra[3][10][8] = [-0.003417932, -0.009956081, 0.033852994, -0.012161942, 0.0017278524, 0.0013890374, -0.0040250965] -gra[3][10][9] = [0.07826676, 0.0033093924, -0.0119619025, -0.03593995, 0.0, 0.009920094, -0.034691177] -gra[3][10][10] = [-0.1329772, -0.15913084, -0.33212945, -0.38628212, -0.17085952, -0.14248645, -0.11814857] -gra[3][10][11] = [0.015245715, 0.13007498, -0.116307035, -0.009605885, -0.006525742, -0.1280925, 0.07482027] -gra[3][10][12] = [-0.0031260774, 0.08639123, -0.07817442, -0.034333423, -0.008802207, -0.061089545, 0.08547191] -gra[3][10][13] = [0.07543126, 0.08516402, -0.07825824, -0.05238478, -0.005011603, -0.08016144, 0.08822032] -gra[3][10][14] = [-0.043887418, 0.005256214, 0.014653939, 0.08381868, -0.021312775, 0.0047443355, 0.041867867] -gra[3][11][3] = [-0.09214447, -0.10365626, -0.052041374, -0.2149998, -0.19054943, -0.13169308, -0.3842526, -0.27320582, -0.08365657, -0.100043, -0.17461441] -gra[3][11][4] = [-0.056511734, -0.05296787, 0.20943795, -0.028145026, -0.02407775, -0.025055174, 0.0059119724, 0.0074535403, 9.0512355E-12, -0.012879585, -0.012467872] -gra[3][11][5] = [-0.037326038, -0.04763788, 0.10435052, -0.05078754, -0.024283057, -0.025055174, 0.008395301, 0.008833618, 9.0512355E-12, -0.012879585, -0.006766601] -gra[3][11][6] = [-0.027569015, -0.006928928, -0.047970586, -0.0033129938, -0.025036301, -0.019172352, 0.0, 0.0, -0.0045685717, -0.0016083805, -0.0012626576] -gra[3][11][7] = [-0.012654685, -0.048454355, 0.0369806, -0.07753024, -0.023927642, -0.01942112, 0.0064100344, 0.007928713, -9.331818E-4, -0.00948236, -0.01761809] -gra[3][11][8] = [-0.017691867, -0.028658904, -0.015097424, 0.023459015, 0.08073837, 0.033852994, -0.03048157, 0.042773336, -0.0017965699, 0.011501777, 0.013622059] -gra[3][11][9] = [-0.036216546, -0.02235225, 0.23496085, -0.04552784, -0.011887079, -0.021881483, 0.008733615, 0.016309183, 9.0512355E-12, -0.0077277506, -0.0013032085] -gra[3][11][10] = [-2.7178368E-4, -0.06855495, 0.027399302, -0.008799138, 0.102962606, -0.09111658, -0.05898697, 0.083916046, 0.0024555703, 0.023591425, -0.0036736613] -gra[3][11][11] = [-0.09214447, -0.10365626, -0.052041374, -0.2149998, -0.19054943, -0.13169308, -0.3842526, -0.27320582, -0.08365657, -0.100043, -0.17461441] -gra[3][11][12] = [-0.04195919, -0.011814356, 0.034449045, 0.049225464, 0.07797931, -0.022044744, 0.020394541, 0.028562825, -0.0016438005, -1.4816411E-4, 0.0416849] -gra[3][11][13] = [-0.019808618, -0.05076483, 0.10389386, -0.009409836, 0.018409714, -0.07892824, 0.0015091486, 0.010321492, -0.0016438005, 0.0026422446, 0.0017031142] -gra[3][11][14] = [0.03876716, 0.024333825, -0.022561122, 0.016644152, 0.006734378, 0.025349773, 0.14653301, 0.040411703, 0.0, 0.0, -0.09829482] -gra[3][12][3] = [-0.11387451, -0.15722544, -0.17891133, -0.31314385, -0.25551414, -0.19353133, -0.33349663, -0.29827237, -0.098324604, -0.13416855, -0.2571352] -gra[3][12][4] = [-0.056511734, -0.04987319, 0.20671012, -0.022405924, -0.015052397, -0.030014966, 0.0035608534, 0.011555983, 5.769341E-4, -0.010628307, -0.020405654] -gra[3][12][5] = [-0.037326038, -0.0445432, 0.09530988, -0.04893767, -0.0135707855, -0.030014966, 0.006044182, 0.010669847, 9.0512355E-12, -0.010628307, -0.01856464] -gra[3][12][6] = [-0.027659994, -0.006928928, -0.0524088, 0.006312619, -0.025585316, -0.019172352, 0.0, 0.0, -0.008284481, -0.0016083805, -0.0012626576] -gra[3][12][7] = [-0.012654685, -0.047222544, 0.025782429, -0.048584756, -0.009962272, -0.021901015, 0.002915925, 0.0064832703, -1.4217442E-4, -0.007231083, -0.031687073] -gra[3][12][8] = [-0.020402493, -0.024556305, -0.015575819, 0.055016555, 0.051806875, 0.033852994, -0.04555193, 0.05035637, 0.0, 0.0031901782, 0.0090892585] -gra[3][12][9] = [-0.033509176, -0.019306917, 0.20735021, -0.005000181, 0.0028634723, -0.029321171, 0.0063824966, 0.024137018, 9.0512355E-12, -0.005476473, -0.013007009] -gra[3][12][10] = [0.011302657, -0.07017854, 0.023033805, 0.015241189, 0.08098403, -0.06386582, -0.012394784, 0.10541846, 0.002381391, 0.011636256, -0.0048150206] -gra[3][12][11] = [-0.044727597, -0.0034954008, 0.13743237, -0.05609268, -0.01628504, -0.02166985, 0.0032368335, 0.023991466, 7.6891546E-4, -0.005476473, -0.0042543197] -gra[3][12][12] = [-0.11387451, -0.15722544, -0.17891133, -0.31314385, -0.25551414, -0.19353133, -0.33349663, -0.29827237, -0.098324604, -0.13416855, -0.2571352] -gra[3][12][13] = [0.10053188, -0.03359089, 0.12973118, -0.013946263, -0.025900569, -0.06678694, -0.013508427, 0.049437862, -0.0016438005, 0.0012229871, 0.013154621] -gra[3][12][14] = [0.038463943, 0.023034256, 0.0101122, 0.026391888, 0.021977, 0.03366942, 0.13214202, 0.020360775, 0.0, -2.2505768E-11, -0.06410605] -gra[3][13][3] = [-0.11463873, -0.06754701, -0.14183052, -0.2948737, -0.20204443, -0.2639251, -0.29475674, -0.24990667, -0.10658293, -0.13451692, -0.2545104] -gra[3][13][4] = [-0.055579588, -0.051395856, 0.22241642, -4.059528E-4, -0.024469772, -0.030014966, 0.007155873, 0.016494725, 9.0512355E-12, -0.012879585, -0.011571843] -gra[3][13][5] = [-0.036240384, -0.046065867, 0.111016184, -0.028104905, -0.022988161, -0.030014966, 0.009639202, 0.015608587, 9.0512355E-12, -0.012879585, -0.008721208] -gra[3][13][6] = [-0.025174934, -0.006928928, -0.0555249, 0.0047137234, -0.025065042, -0.019172352, 0.0, 0.0, -0.0045685717, -0.0016083805, -0.0012626576] -gra[3][13][7] = [-0.010334147, -0.04874521, 0.037647445, -0.026584785, -0.01937965, -0.021901015, 0.006510945, 0.014144414, -1.4217442E-4, -0.007257821, -0.024563886] -gra[3][13][8] = [-0.017435485, -0.025563205, -0.018197112, 0.0629446, 0.07925679, 0.033852994, -0.050028473, 0.046572696, 0.0019757631, 0.005164899, -0.020037295] -gra[3][13][9] = [-0.029525224, -0.020829584, 0.22252294, 0.019572949, -0.006553903, -0.029321171, 0.009977517, 0.026871076, 9.0512355E-12, -0.0077277506, -0.0016536638] -gra[3][13][10] = [0.009529866, -0.06829155, -0.021803388, -3.047292E-4, 0.06953493, -0.066966124, 0.026328605, 0.09766341, 0.002381391, 0.015515008, 0.016775005] -gra[3][13][11] = [-0.045481637, -0.009793117, 0.1632958, -0.023134613, -0.032108083, -0.01738065, 0.0056135817, 0.030979762, 7.6891546E-4, -0.0077277506, 0.007776879] -gra[3][13][12] = [-0.019675596, -0.026981357, 0.1308571, 0.017473653, -0.0012450293, -0.026860807, 0.009749667, 0.03448535, -1.4217423E-4, -0.007257821, -0.008489365] -gra[3][13][13] = [-0.11463873, -0.06754701, -0.14183052, -0.2948737, -0.20204443, -0.2639251, -0.29475674, -0.24990667, -0.10658293, -0.13451692, -0.2545104] -gra[3][13][14] = [-0.01722709, 0.032380998, -0.09424367, 0.027259992, -0.0021256413, 0.0184861, 0.09748994, 0.011856999, 0.0, -0.0013691243, -0.067090854] -gra[3][14][3] = [0.44593877, -0.42780378, -0.3339555, -0.041055933, -0.23774712, -0.11392724, -0.13324136, -0.17313966] -gra[3][14][4] = [-0.050213013, 0.15398705, -0.018582903, -0.023101933, -0.03499973, 0.0020432305, -0.036024883, -0.046984877] -gra[3][14][5] = [-0.057042483, 0.058396146, -0.04672017, -0.01777194, -0.03499973, -0.0048348554, -0.01806613, -0.046984877] -gra[3][14][6] = [-0.055422466, -0.038651124, -0.007950703, -0.006928928, 0.03158737, -0.0045685717, -0.04463454, -0.018571196] -gra[3][14][7] = [-0.046599343, -9.01673E-4, -0.039705895, -0.009601859, -0.027448343, -0.004834855, -9.093541E-4, -0.03576694] -gra[3][14][8] = [-0.0027976157, 0.04381682, 0.11873355, -0.014299808, -0.011449244, 0.008354038, -0.0040250965, 0.030145828] -gra[3][14][9] = [-0.03965546, 0.16102295, 0.032597095, 0.018370427, -0.01859632, -0.0048348554, -0.023131285, -0.033222895] -gra[3][14][10] = [-0.017961588, 0.074451886, -0.015154174, -0.06398133, -0.012447634, 0.0, -0.006365354, -0.005879982] -gra[3][14][11] = [-0.043990437, 0.09489804, 0.035154194, 0.025853252, -0.019943671, -0.0040659397, -0.029561525, -0.038219962] -gra[3][14][12] = [-0.05016438, 0.06303118, 0.037071317, 0.012375867, -0.028478147, -0.008058093, -0.0030354094, -0.03576694] -gra[3][14][13] = [-0.042344883, 0.07444154, 0.0095811095, 0.018891037, -0.026047245, -0.008058093, -0.002521744, -0.03576694] -gra[3][14][14] = [0.44593877, -0.42780378, -0.3339555, -0.041055933, -0.23774712, -0.11392724, -0.13324136, -0.17313966] -gra[4][0][0] = [-0.068558656] -gra[4][0][1] = [0.11764526] -gra[4][0][2] = [-0.041710425] -gra[4][0][3] = [0.0015610885] -gra[4][0][4] = [-0.068558656] -gra[4][1][0] = [0.0022879262, -0.001958814, 6.20738E-4, 4.4457944E-11, -0.0021720084, -9.267408E-4] -gra[4][1][1] = [-0.04198974, -0.15868439, -0.21871509, -0.18274719, -0.15518439, -0.21593317] -gra[4][1][2] = [0.049908973, -0.060012273, 0.0132662775, -0.026443, -0.0023895265, -0.048535112] -gra[4][1][3] = [0.046850376, -0.0399934, 0.0010957995, -0.019397447, -0.00574457, -0.047918677] -gra[4][1][4] = [-0.04198974, -0.15868439, -0.21871509, -0.18274719, -0.15518439, -0.21593317] -gra[4][2][0] = [-0.0023283148, 0.0, 6.4378075E-4, 0.0042653317, -0.008087347, 0.0031306578, 2.969677E-4, -3.050395E-11, 0.0012653338, 0.0024696218, -0.009896872] -gra[4][2][1] = [-5.13921E-4, -3.7906157E-11, -0.045836035, -0.0041412255, -0.02294093, -0.0028272104, -0.014439816, 0.035186574, -7.720956E-4, 0.0035228117, -0.034932088] -gra[4][2][2] = [-0.1527792, -0.16105321, -0.11441286, -0.18570481, -0.263671, -0.16376895, -0.27147496, -0.28773913, -0.20254132, -0.14136088, -0.26420903] -gra[4][2][3] = [-0.004744318, -0.028696006, -0.047554154, -0.029328587, -0.0108278785, 0.0, 0.012152899, -0.009935487, -0.011329165, -0.0052225264, -0.12551941] -gra[4][2][4] = [-0.1527792, -0.16105321, -0.11441286, -0.18570481, -0.263671, -0.16376895, -0.27147496, -0.28773913, -0.20254132, -0.14136088, -0.26420903] -gra[4][3][0] = [-0.0023283148, 0.0, -2.546209E-4, 6.20738E-4, 0.0, 7.4807646E-11, 2.969678E-4, -6.10079E-11, 0.0012653338, 2.1146203E-5, -0.007859215] -gra[4][3][1] = [-5.13921E-4, 0.0, -0.06842534, -0.010353064, -0.035776734, -0.004779683, -0.043350175, 0.079702035, -7.720956E-4, 0.0, -0.09211975] -gra[4][3][2] = [-0.0050252816, -0.021862686, -0.05439042, 0.0, -0.0197254, -0.011747527, -0.010851742, 0.0045674103, -0.008396367, 0.016079204, -0.045323726] -gra[4][3][3] = [-0.15722692, -0.15284958, -0.1687409, -0.21507952, -0.29694274, -0.18014798, -0.21342382, -0.375148, -0.18912332, -0.1695773, -0.22369294] -gra[4][3][4] = [-0.15722692, -0.15284958, -0.1687409, -0.21507952, -0.29694274, -0.18014798, -0.21342382, -0.375148, -0.18912332, -0.1695773, -0.22369294] -gra[4][5][4] = [0.014722959, 0.18275993, -0.0636386, -0.22962478, -0.28831062, -0.19243455, -0.20865887, -0.33900928, -0.098217, -0.11010328, -0.17192467] -gra[4][5][5] = [0.014722959, 0.18275993, -0.0636386, -0.22962478, -0.28831062, -0.19243455, -0.20865887, -0.33900928, -0.098217, -0.11010328, -0.17192467] -gra[4][5][6] = [-0.09911031, -0.02584689, 0.026706154, 0.0064545716, 0.030568566, -0.037597638, 0.0030047887, 0.024394596, 0.0, 0.0048741507, -0.039634243] -gra[4][5][7] = [0.010370938, 0.0097888755, -0.04665061, -0.21829283, -0.03931838, -0.12108123, -0.007544473, -0.10600374, -0.0016438005, -4.6656025E-4, -0.03369571] -gra[4][5][8] = [-0.04795964, -0.08748845, 0.012514722, 0.054292858, -0.046950795, -0.041652158, -0.05227269, 0.042276658, 0.0, -0.004978219, 0.0038085831] -gra[4][5][9] = [0.118447594, -0.048133302, 0.116975956, -0.10744196, -0.042570457, -0.110149436, -0.036007646, -0.02457235, -6.042392E-4, -1.444224E-4, -0.010697803] -gra[4][5][10] = [-0.008554228, 0.041264854, -0.11523878, -0.06722138, 0.020829812, -0.042462237, 0.0072704786, -0.017995058, 0.0, 0.012700643, 0.022817375] -gra[4][5][11] = [-0.12169014, -0.030582886, -0.02897325, -0.031979937, -0.023385987, -0.12917747, 0.031189587, -0.050955363, -6.042392E-4, -0.0039698915, 0.008385656] -gra[4][5][12] = [9.146053E-6, -0.04193567, -0.034431104, -0.06613156, -0.078815356, -0.11424304, 0.013824362, -0.043248564, 0.0023156772, -0.0039698915, -0.0046529626] -gra[4][5][13] = [0.05273106, -0.021414878, 0.04215588, -0.09433008, -0.10508856, -0.124612965, 0.010319007, -0.06516868, -0.0016438005, 0.0055478574, -0.02379297] -gra[4][5][14] = [-0.0270753, 0.041652158, -0.08693187, 0.055251643, 0.015370078, 0.020085067, 0.103559524, 0.026089558, -1.8203591E-10, 0.0, -0.06919619] -gra[4][6][4] = [-0.35341132, -0.20252663] -gra[4][6][5] = [0.092977405, -0.02442189] -gra[4][6][6] = [-0.35341132, -0.20252663] -gra[4][6][7] = [0.019726846, -0.012724133] -gra[4][6][8] = [-0.10187224, 0.029533952] -gra[4][6][9] = [0.11780503, -0.0030878466] -gra[4][6][10] = [-0.064647116, -0.034098495] -gra[4][6][11] = [0.019633012, -0.035545427] -gra[4][6][12] = [0.083963394, 0.003786453] -gra[4][6][13] = [0.13890627, -0.02833015] -gra[4][6][14] = [-0.08874273, -0.031247089] -gra[4][7][4] = [-0.12397108, 0.014455657, -0.15047927, -0.35617045, -0.0039878795, -0.20469043, -0.30595267, -0.13831393, -0.07891641, -0.14182357, -0.21851322] -gra[4][7][5] = [-0.043149117, -0.0449026, 0.16233759, -0.02765031, -0.02725357, -0.030014966, 0.0047791246, 0.005567723, 9.0512355E-12, -0.0018806041, -0.007157123] -gra[4][7][6] = [-0.022742484, -0.006928928, -0.04051508, -0.003913735, -0.025036301, -0.018571196, -4.731787E-11, 0.0, -9.038228E-4, -0.0016083805, 0.0] -gra[4][7][7] = [-0.12397108, 0.014455657, -0.15047927, -0.35617045, -0.0039878795, -0.20469043, -0.30595267, -0.13831393, -0.07891641, -0.14182357, -0.21851322] -gra[4][7][8] = [-0.059728492, -0.106997676, 0.026846237, -0.013104029, -0.099735364, -0.02959507, -0.0341132, 0.05246252, 0.0, -0.0033622796, 0.005457081] -gra[4][7][9] = [0.08231275, -0.038986813, 0.031845048, -0.091648445, 0.087450445, 0.0071767634, -0.025927924, 0.0230534, -6.042392E-4, -0.006980671, -0.056342095] -gra[4][7][10] = [0.04442288, 0.094747745, -0.1791282, -0.037582442, 0.03385026, -0.07331349, 0.026329678, -0.061193362, 0.0, 0.010591356, 0.0040668105] -gra[4][7][11] = [-0.117329046, -0.046107206, -0.08558342, 0.0135395825, 0.10319102, -0.04648871, 0.03418339, 0.00646766, -6.042392E-4, -0.007024522, -0.00857213] -gra[4][7][12] = [-0.008537363, -0.045300227, -0.06787919, -0.021211132, 0.063573614, -0.028791236, 0.0055351285, 0.09356796, -0.0016438005, -0.007024522, -0.010688173] -gra[4][7][13] = [0.024146158, -0.044353727, 0.011797216, -0.06011968, 0.023727208, -0.045847956, 0.0027329288, 0.06296933, -0.0016438005, 0.0024932271, -0.026049387] -gra[4][7][14] = [-0.0017417222, 0.027644029, 0.005157385, 3.3167237E-4, 8.169799E-4, 7.0631783E-4, 0.10761113, 0.02086204, -0.0019475454, -0.0010469037, -0.06419305] -gra[4][8][4] = [-0.11711414, -0.040968277, -0.20798595, -0.24514237, -0.30613858, -0.24771409] -gra[4][8][5] = [0.08426701, -0.028518835, -0.059163406, -0.017615488, -0.0025875743, 4.770551E-4] -gra[4][8][6] = [-0.028704194, 0.002314438, -0.0022998422, -0.018571196, -0.003225636, -0.0043171197] -gra[4][8][7] = [-0.016012147, -0.013587542, -0.057324897, -0.01446133, -6.4382935E-4, -0.008020589] -gra[4][8][8] = [-0.11711414, -0.040968277, -0.20798595, -0.24514237, -0.30613858, -0.24771409] -gra[4][8][9] = [0.1499299, 0.005159328, -9.2201936E-4, -0.10608127, -0.04583137, -0.046073522] -gra[4][8][10] = [-0.07247772, 0.099027045, -0.05540722, -0.025675789, -0.004103984, -0.017712904] -gra[4][8][11] = [0.05879034, 0.059942614, 0.025641251, -0.10506861, -0.058699712, -0.022662342] -gra[4][8][12] = [0.022299469, 0.076227285, 0.029413441, -0.06037133, -0.07426226, 0.0031176568] -gra[4][8][13] = [0.086328015, 0.069388516, 0.08241708, -0.07446065, -0.09312223, 0.0010292889] -gra[4][8][14] = [-0.063278966, 0.032570012, 0.088266574, 0.019163983, 0.020992978, -0.030493984] -gra[4][9][4] = [-0.10686798, 0.02132809, -0.12834515, -0.25871342, -0.29838958, -0.24498987, -0.3047002, -0.23739927, -0.08985106, -0.117371395, -0.14820358] -gra[4][9][5] = [-0.051906407, -0.04059518, 0.18360823, -0.050654702, -0.025863424, -0.027267672, 0.01188374, 0.02652775, 9.0512355E-12, -0.011506752, 0.016392484] -gra[4][9][6] = [-0.026048012, -0.006928928, -0.04699468, -0.0012417085, -0.02850939, -0.02125135, 0.0, 0.0, -9.038228E-4, -0.0016083805, -0.0012626576] -gra[4][9][7] = [-0.0060619293, -0.03462643, 0.013704447, -0.069894865, -0.022533493, -0.01942112, 0.007643792, 0.031788614, -1.4217423E-4, -0.007257821, -0.01844468] -gra[4][9][8] = [-0.012241036, -0.027001118, -0.008912949, 0.059138477, 0.046004623, 0.027047869, -0.027326334, 0.019558845, 0.0, 0.005164899, -0.010124459] -gra[4][9][9] = [-0.10686798, 0.02132809, -0.12834515, -0.25871342, -0.29838958, -0.24498987, -0.3047002, -0.23739927, -0.08985106, -0.117371395, -0.14820358] -gra[4][9][10] = [-0.009904943, 0.09023139, -0.013142893, -0.05324988, 0.059516188, -0.03834217, 0.021282855, 0.024341332, 0.0, 0.012700643, -0.0012901137] -gra[4][9][11] = [-0.093473464, 0.0062656836, 0.061547473, 0.069315575, 0.064351425, -0.09547536, 0.08125984, -0.030693594, -0.004067228, -0.0025422391, -0.014482316] -gra[4][9][12] = [-0.010575512, -0.025606124, 0.03264815, 0.0762058, -0.03366411, -0.09210541, 0.042617302, -0.0028532404, -0.0051067895, -0.0025422391, -8.367696E-4] -gra[4][9][13] = [0.0312917, -0.02122373, 0.13109264, -0.0042038285, -0.057000685, -0.072107635, 0.040826432, -0.014562405, -0.0051067895, 0.0069755097, -0.05003162] -gra[4][9][14] = [-0.021795094, 0.028221246, -0.032971114, 0.06994245, 0.031381827, 0.060158834, 0.10159744, 0.017498635, 0.0, 0.0, -0.07941664] -gra[4][10][4] = [-0.095965564, -0.07220575, -0.33212945, -0.38628212, -0.17085952, -0.13830143, -0.2040134] -gra[4][10][5] = [0.072923616, -0.027547294, -0.017615488, -0.058515526, 0.0, 0.008792369, -0.042624243] -gra[4][10][6] = [-0.028704194, -0.006928928, -0.020728316, -0.0068972483, -0.0022654566, 0.004557554, -0.022639498] -gra[4][10][7] = [-0.051581945, -0.018793536, -0.01446133, -0.042420294, -0.0033213743, 0.0016988069, -0.003447506] -gra[4][10][8] = [0.0045860405, -0.009956081, 0.033852994, -0.0072824936, 0.0028213095, 0.0013890374, -0.0052360767] -gra[4][10][9] = [0.073498644, 0.007381615, -0.0119619025, -0.03593995, 0.0, 0.009920094, -0.034691177] -gra[4][10][10] = [-0.095965564, -0.07220575, -0.33212945, -0.38628212, -0.17085952, -0.13830143, -0.2040134] -gra[4][10][11] = [0.02130402, 0.13364749, -0.116307035, -0.009605885, -0.006525742, -0.1280925, 0.06717774] -gra[4][10][12] = [0.0029322281, 0.08996374, -0.07817442, -0.034333423, -0.008802207, -0.061089545, 0.077829376] -gra[4][10][13] = [0.08148956, 0.08873653, -0.07825824, -0.05238478, -0.005011603, -0.075755164, 0.08057779] -gra[4][10][14] = [-0.045746606, 0.0077048903, 0.014653939, 0.08381868, -0.021312775, 0.0047443355, 0.041867867] -gra[4][11][4] = [-0.17800932, -0.016731167, -0.015029761, -0.2149998, -0.19054943, -0.13169308, -0.3842526, -0.27320582, -0.08365657, -0.100043, -0.17042941] -gra[4][11][5] = [-0.051906407, -0.04520005, 0.1781785, -0.035385706, -0.024283057, -0.025055174, 0.007130244, 0.008833618, 9.0512355E-12, -0.012879585, -0.006766601] -gra[4][11][6] = [-0.027569015, -0.006928928, -0.047970586, -0.0033129938, -0.025036301, -0.019172352, 0.0, 0.0, -9.038228E-4, -0.0016083805, -0.0012626576] -gra[4][11][7] = [-0.006148626, -0.04543285, 0.032212485, -0.07753024, -0.023927642, -0.01942112, 0.0064100344, 0.007928713, -9.331816E-4, -0.00948236, -0.01761809] -gra[4][11][8] = [-0.018902846, -0.028658904, -0.007093447, 0.028338464, 0.08073837, 0.033852994, -0.03048157, 0.042773336, -0.0017965699, 0.011501777, 0.013622059] -gra[4][11][9] = [-0.036216546, -0.018280027, 0.23019274, -0.04552784, -0.011887079, -0.021881483, 0.008733615, 0.016309183, 9.0512355E-12, -0.0077277506, -0.0013032085] -gra[4][11][10] = [0.0011478947, -0.06855495, 0.029414356, -0.005431766, 0.102962606, -0.09111658, -0.05898697, 0.083916046, 0.0024555703, 0.023591425, -0.0036736613] -gra[4][11][11] = [-0.17800932, -0.016731167, -0.015029761, -0.2149998, -0.19054943, -0.13169308, -0.3842526, -0.27320582, -0.08365657, -0.100043, -0.17042941] -gra[4][11][12] = [-0.04960172, -0.008241851, 0.04050735, 0.049225464, 0.075759396, -0.022044744, 0.020394541, 0.028562825, -0.0016438005, -1.4816411E-4, 0.0416849] -gra[4][11][13] = [-0.027451143, -0.047192324, 0.10995217, -0.009409836, 0.017332839, -0.07892824, 0.0015091486, 0.010321492, -0.0016438005, 0.0069671148, 0.006109395] -gra[4][11][14] = [0.03876716, 0.0267825, -0.024420308, 0.016644152, 0.006734378, 0.025349773, 0.14225875, 0.040411703, 0.0, 0.0, -0.09829482] -gra[4][12][4] = [-0.19973935, -0.070300326, -0.14189972, -0.31314385, -0.25551414, -0.19353133, -0.33349663, -0.29827237, -0.098324604, -0.13416855, -0.2529502] -gra[4][12][5] = [-0.051906407, -0.042105377, 0.17027168, -0.033535838, -0.0135707855, -0.030014966, 0.0047791246, 0.010669847, 9.0512355E-12, -0.010628307, -0.01856464] -gra[4][12][6] = [-0.027659994, -0.006928928, -0.0524088, 0.006312619, -0.025585316, -0.019172352, 0.0, 0.0, -0.0046197325, -0.0016083805, -0.0012626576] -gra[4][12][7] = [-0.006148626, -0.04420104, 0.021014318, -0.048584756, -0.009962272, -0.021901015, 0.002915925, 0.0064832703, -1.4217423E-4, -0.007231083, -0.031687073] -gra[4][12][8] = [-0.021613473, -0.024556305, -0.007571841, 0.059896007, 0.051806875, 0.033852994, -0.04555193, 0.05035637, 0.0, 0.0031901782, 0.0090892585] -gra[4][12][9] = [-0.033509176, -0.015234692, 0.20258209, -0.005000181, 0.0028634723, -0.029321171, 0.0063824966, 0.024137018, 9.0512355E-12, -0.005476473, -0.013007009] -gra[4][12][10] = [0.012722332, -0.07017854, 0.025048874, 0.01860856, 0.08098403, -0.06386582, -0.012394784, 0.10541846, 0.002381391, 0.011636256, -0.0048150206] -gra[4][12][11] = [-0.044727597, -4.738964E-4, 0.13266425, -0.0487614, -0.01628504, -0.02166985, 0.0032368335, 0.023991466, 7.6891546E-4, -0.005476473, -0.0064276056] -gra[4][12][12] = [-0.19973935, -0.070300326, -0.14189972, -0.31314385, -0.25551414, -0.19353133, -0.33349663, -0.29827237, -0.098324604, -0.13416855, -0.2529502] -gra[4][12][13] = [0.09288935, -0.03001839, 0.13578948, -0.013946263, -0.02697745, -0.06678694, -0.013508427, 0.049437862, -0.0016438005, 0.0055478574, 0.017560903] -gra[4][12][14] = [0.038463943, 0.025482932, 0.008253016, 0.026391888, 0.021977, 0.03366942, 0.12786776, 0.020360775, 0.0, -2.2505768E-11, -0.06410605] -gra[4][13][4] = [-0.20050356, 0.019378092, -0.10481889, -0.2948737, -0.20204443, -0.2639251, -0.29475674, -0.24990667, -0.10658293, -0.13451692, -0.2503254] -gra[4][13][5] = [-0.05082075, -0.043628044, 0.18484417, -0.012703076, -0.022988161, -0.030014966, 0.008374145, 0.015608587, 9.0512355E-12, -0.012879585, -0.008721208] -gra[4][13][6] = [-0.025174934, -0.006928928, -0.0555249, 0.0047137234, -0.025065042, -0.019172352, 0.0, 0.0, -9.038228E-4, -0.0016083805, -0.0012626576] -gra[4][13][7] = [-0.0038280855, -0.045723706, 0.032879326, -0.026584785, -0.01937965, -0.021901015, 0.006510945, 0.014144414, -1.4217423E-4, -0.007257821, -0.024563886] -gra[4][13][8] = [-0.018646464, -0.025563205, -0.010193134, 0.06782404, 0.07925679, 0.033852994, -0.050028473, 0.046572696, 0.0019757631, 0.005164899, -0.020037295] -gra[4][13][9] = [-0.029525224, -0.01675736, 0.21775483, 0.019572949, -0.006553903, -0.029321171, 0.009977517, 0.026871076, 9.0512355E-12, -0.0077277506, -0.0016536638] -gra[4][13][10] = [0.010949548, -0.06829155, -0.019788323, 0.0030626338, 0.06953493, -0.066966124, 0.026328605, 0.09766341, 0.002381391, 0.015515008, 0.016775005] -gra[4][13][11] = [-0.045481637, -0.006771613, 0.15852769, -0.015803333, -0.032108083, -0.01738065, 0.0056135817, 0.030979762, 7.6891546E-4, -0.0077277506, 0.005603589] -gra[4][13][12] = [-0.019675596, -0.023959853, 0.12608898, 0.017473653, -0.002820584, -0.026860807, 0.009749667, 0.03448535, -1.4217423E-4, -0.007257821, -0.008489365] -gra[4][13][13] = [-0.20050356, 0.019378092, -0.10481889, -0.2948737, -0.20204443, -0.2639251, -0.29475674, -0.24990667, -0.10658293, -0.13451692, -0.2503254] -gra[4][13][14] = [-0.01722709, 0.034829676, -0.096102856, 0.027259992, -0.0021256413, 0.0184861, 0.093215674, 0.011856999, 0.0, -0.0013691243, -0.067090854] -gra[4][14][4] = [0.45614722, -0.39079216, -0.3339555, 0.04586918, -0.23774712, -0.11392724, -0.21910615, -0.17313966] -gra[4][14][5] = [-0.050213013, 0.1317033, -0.028418455, -0.015334114, -0.03740633, -0.0032232369, -0.032646503, -0.046984877] -gra[4][14][6] = [-0.055422466, -0.038651124, -0.007950703, -0.006928928, 0.03158737, -9.038228E-4, -0.04463454, -0.018571196] -gra[4][14][7] = [-0.046599343, -0.005669792, -0.039705895, -0.006580356, -0.028630001, -0.0048348545, 0.0055967015, -0.03576694] -gra[4][14][8] = [-0.005233598, 0.0518208, 0.12361299, -0.014299808, -0.011449244, 0.008354038, -0.0052360767, 0.030145828] -gra[4][14][9] = [-0.03965546, 0.15625483, 0.032597095, 0.02244265, -0.019777976, -0.0048348554, -0.023131285, -0.033222895] -gra[4][14][10] = [-0.017961588, 0.076466955, -0.011786802, -0.06398133, -0.012447634, 0.0, -0.004945674, -0.005879982] -gra[4][14][11] = [-0.043990437, 0.09012992, 0.042485476, 0.028874757, -0.021125326, -0.0040659397, -0.029561525, -0.038219962] -gra[4][14][12] = [-0.05016438, 0.058263067, 0.037071317, 0.015397372, -0.029659806, -0.008058093, -0.0030354094, -0.03576694] -gra[4][14][13] = [-0.042344883, 0.06967342, 0.0095811095, 0.021912538, -0.027228897, -0.008058093, -0.002521744, -0.03576694] -gra[4][14][14] = [0.45614722, -0.39079216, -0.3339555, 0.04586918, -0.23774712, -0.11392724, -0.21910615, -0.17313966] -gra[5][0][0] = [-0.041981116] -gra[5][0][1] = [0.11165683] -gra[5][0][2] = [-0.034699466] -gra[5][0][3] = [-0.02278647] -gra[5][0][4] = [0.008478554] -gra[5][0][5] = [-0.041981116] -gra[5][1][0] = [0.0022879262, -0.011053883, -0.0029869583, 4.4457944E-11, -0.0021720084, 0.0016348341] -gra[5][1][1] = [-0.0048823073, -0.17523552, -0.21583569, -0.18218835, -0.15518439, -0.17397918] -gra[5][1][2] = [0.06058336, -0.05580195, 0.016498303, -0.026443, -0.0023895265, -0.05305188] -gra[5][1][3] = [0.027758041, -0.051798172, -0.024388602, -0.019397447, -0.00574457, -0.07174558] -gra[5][1][4] = [0.06279293, -0.035783082, 0.011646223, -0.019397447, -0.00574457, -0.047943484] -gra[5][1][5] = [-0.0048823073, -0.17523552, -0.21583569, -0.18218835, -0.15518439, -0.17397918] -gra[5][2][0] = [-0.003264381, -0.009095069, 6.4378075E-4, 6.57636E-4, -0.008087347, 0.0031306578, 2.969677E-4, -3.050395E-11, 0.006577885, 0.0016814994, -0.0073352964] -gra[5][2][1] = [-5.13921E-4, -3.7906157E-11, -0.034460317, -0.0041412255, -0.02294093, -0.0028272104, -0.014439816, 0.035186574, -7.720956E-4, 0.0035228117, -0.03578559] -gra[5][2][2] = [-0.1457395, -0.17760435, -0.07730542, -0.1828254, -0.2647875, -0.16321008, -0.27147496, -0.27251524, -0.22298351, -0.12651624, -0.22225499] -gra[5][2][3] = [-0.0016788694, -0.038602162, -0.05481774, -0.024850672, -0.02118981, 0.0, 0.0043394, -0.00686435, -0.009372383, -0.0052225264, -0.14019503] -gra[5][2][4] = [-0.004744318, -0.028696006, -0.04212549, -0.023079613, 0.008764084, -0.0016386209, 0.008595209, -0.014020145, -0.011329165, 0.01450398, -0.14975825] -gra[5][2][5] = [-0.1457395, -0.17760435, -0.07730542, -0.1828254, -0.2647875, -0.16321008, -0.27147496, -0.27251524, -0.22298351, -0.12651624, -0.22225499] -gra[5][3][0] = [-0.003264381, -0.009095069, -2.546209E-4, -0.0029869583, -0.003558128, 0.0031306578, 2.969677E-4, -6.10079E-11, 0.006577885, -7.669762E-4, -0.00529764] -gra[5][3][1] = [-5.13921E-4, 0.0, -0.055911075, -0.010353064, -0.043891303, -0.004779683, -0.048092224, 0.07863838, -7.720956E-4, 0.0, -0.081802025] -gra[5][3][2] = [-0.0050252816, -0.018022431, -0.0586132, 0.0, -0.025096912, -0.010560441, -0.010851742, 0.003503757, -0.008396367, 0.016079204, -0.051743556] -gra[5][3][3] = [-0.15018721, -0.21722075, -0.16214848, -0.23871076, -0.3606194, -0.1825599, -0.2269295, -0.40583122, -0.22281976, -0.16284533, -0.23139495] -gra[5][3][4] = [-0.004744318, -0.026590846, 0.0044537648, -0.016619466, -0.014093055, -0.0016386209, -0.014388094, -0.010515601, -0.014348841, 0.0076769954, 0.06554818] -gra[5][3][5] = [-0.15018721, -0.21722075, -0.16214848, -0.23871076, -0.3606194, -0.1825599, -0.2269295, -0.40583122, -0.22281976, -0.16284533, -0.23139495] -gra[5][4][0] = [-0.003264381, -0.009095069, 0.002269707, -0.0029869583, 0.0, 7.4807646E-11, 2.969678E-4, -6.10079E-11, 0.006577885, 0.0016814994, -0.00529764] -gra[5][4][1] = [-5.13921E-4, 0.0, -0.055783495, -0.010353064, -0.035753258, -0.004779683, -0.043350175, 0.07863838, -7.720956E-4, 0.0, -0.09297326] -gra[5][4][2] = [-0.005025282, -0.015917271, -0.072601005, 0.0, -0.022037786, -0.008486157, -0.010851742, 0.0037559327, -0.008396367, 0.01512564, -0.04806168] -gra[5][4][3] = [-0.007702251, -0.01236854, -0.09266366, 0.0, -0.013876671, -0.0062228492, -0.0065214084, -2.5217576E-4, -0.017297493, 0.014535915, -0.03168124] -gra[5][4][4] = [-0.14797053, -0.17172992, -0.13163346, -0.21220012, -0.2980593, -0.17958912, -0.20716432, -0.35681802, -0.2095655, -0.15473267, -0.22386813] -gra[5][4][5] = [-0.14797053, -0.17172992, -0.13163346, -0.21220012, -0.2980593, -0.17958912, -0.20716432, -0.35681802, -0.2095655, -0.15473267, -0.22386813] -gra[5][6][5] = [-0.273783, -0.19260272] -gra[5][6][6] = [-0.273783, -0.19260272] -gra[5][6][7] = [0.026080359, -0.05859648] -gra[5][6][8] = [-0.055209685, 0.026170224] -gra[5][6][9] = [0.10992134, -0.022323119] -gra[5][6][10] = [-0.050101317, -0.028544003] -gra[5][6][11] = [0.005098313, -0.056581404] -gra[5][6][12] = [0.07325858, -0.028917471] -gra[5][6][13] = [0.12126222, -0.052550822] -gra[5][6][14] = [-0.18744022, -0.021810113] -gra[5][7][5] = [-0.088803455, 0.012399701, -0.18343398, -0.33039725, 0.0035305163, -0.20047185, -0.29768315, -0.13658378, -0.07891641, -0.12767604, -0.21282771] -gra[5][7][6] = [-0.009979254, -0.012053755, -0.037562795, -0.0026720262, -0.029374257, -0.011606998, 0.0022069581, 0.0, -9.038228E-4, -0.0016083805, 0.0] -gra[5][7][7] = [-0.088803455, 0.012399701, -0.18343398, -0.33039725, 0.0035305163, -0.20047185, -0.29768315, -0.13658378, -0.07891641, -0.12767604, -0.21282771] -gra[5][7][8] = [-0.03904423, -0.104260705, 0.029854566, 0.018256059, -0.099735364, -0.02959507, -0.0341132, 0.05730655, 3.9559263E-12, -0.0033622796, 0.005457081] -gra[5][7][9] = [0.056280468, -0.04836492, 0.024749145, -0.11790468, 0.080051094, 0.009676195, -0.023595946, 0.02369406, 4.957353E-4, -0.006980671, -0.056342095] -gra[5][7][10] = [0.042196833, 0.10275036, -0.16647932, -0.029836236, 0.03385026, -0.07331349, 0.025126554, -0.061193362, 0.0, 0.010591356, 0.0040668105] -gra[5][7][11] = [-0.14350367, -0.06622134, -0.09880382, -0.029879933, 0.09920868, -0.043989282, 0.03849998, 0.00678799, -6.042392E-4, -0.008943624, -0.00857213] -gra[5][7][12] = [-0.034875587, -0.068832435, -0.078401625, -0.072721116, 0.059591286, -0.026291808, 0.007867106, 0.09388829, -0.0016438005, -0.007024522, -0.010688173] -gra[5][7][13] = [0.014372572, -0.05017042, 0.0039873943, -0.12054504, 0.013673367, -0.0408491, 0.007396889, 0.06328966, -0.0016438005, -0.0025402955, -0.030455668] -gra[5][7][14] = [-0.01984039, 0.02907966, -0.0645227, 0.006852205, 8.169799E-4, 7.0631783E-4, 0.10761113, 0.02086204, -0.0019475454, -0.0010469037, -0.06419305] -gra[5][8][5] = [-0.15006886, -0.043024227, -0.18221274, -0.24092379, -0.30613858, -0.2420286] -gra[5][8][6] = [-0.027445583, -0.0028103888, -9.990334E-6, -0.011606998, -0.0011211394, -0.0043171197] -gra[5][8][7] = [0.02187673, -0.011981823, -0.044713516, -0.01446133, -6.4382935E-4, -0.008020589] -gra[5][8][8] = [-0.15006886, -0.043024227, -0.18221274, -0.24092379, -0.30613858, -0.2420286] -gra[5][8][9] = [0.14283398, -0.004218774, -0.02915368, -0.10358184, -0.04583137, -0.046073522] -gra[5][8][10] = [-0.059828877, 0.10702966, -0.047661014, -0.025675789, -0.004103984, -0.017712904] -gra[5][8][11] = [0.04556992, 0.039828476, -0.01777824, -0.10256919, -0.05208561, -0.022662342] -gra[5][8][12] = [0.011777036, 0.052695084, -0.022096545, -0.0578719, -0.07426226, 0.0031176568] -gra[5][8][13] = [0.0785182, 0.06357183, 0.021991728, -0.0694618, -0.09312223, -0.0033769957] -gra[5][8][14] = [-0.13295905, 0.034005634, 0.0947871, 0.019163983, 0.020992978, -0.030493984] -gra[5][9][5] = [-0.07170036, 0.019272119, -0.16129984, -0.2329402, -0.2908712, -0.2407713, -0.29643065, -0.23566912, -0.08985106, -0.10322386, -0.14251806] -gra[5][9][6] = [-0.01328478, -0.012053755, -0.045736067, 2.3667912E-10, -0.030533638, -0.014287151, 0.0022069581, 0.0, -9.038228E-4, -0.0016083805, -0.0012626576] -gra[5][9][7] = [-0.019936927, -0.030214485, 0.05159333, -0.057283472, -0.017923662, -0.01942112, 0.007643792, 0.031788614, -1.4217423E-4, -0.008607306, -0.01844468] -gra[5][9][8] = [-0.011030057, -0.027001118, 0.0011033802, 0.06461177, 0.046004623, 0.027047869, -0.027326334, 0.019558845, 0.0, 0.005164899, -0.010124459] -gra[5][9][9] = [-0.07170036, 0.019272119, -0.16129984, -0.2329402, -0.2908712, -0.2407713, -0.29643065, -0.23566912, -0.08985106, -0.10322386, -0.14251806] -gra[5][9][10] = [-0.012130983, 0.09650746, -5.0354283E-4, -0.045503683, 0.059516188, -0.03834217, 0.020079736, 0.024341332, 0.0, 0.012700643, -0.0012901137] -gra[5][9][11] = [-0.119648054, -0.01384846, 0.04832706, 0.025896091, 0.060369093, -0.09297593, 0.08557644, -0.030373264, -0.004067228, -0.004461341, -0.014482316] -gra[5][9][12] = [-0.036913738, -0.049138326, 0.022125714, 0.024695782, -0.037646454, -0.089605995, 0.044949282, -0.00253291, -0.0051067895, -0.0025422391, -8.367696E-4] -gra[5][9][13] = [0.021518111, -0.027040415, 0.12328279, -0.064629175, -0.067054525, -0.06710879, 0.04549039, -0.014242074, -0.0051067895, 0.0019419871, -0.054437894] -gra[5][9][14] = [-0.03989376, 0.029656876, -0.10265121, 0.076463, 0.031381827, 0.060158834, 0.10159744, 0.017498635, 0.0, 0.0, -0.07941664] -gra[5][10][5] = [-0.12892027, -0.07426171, -0.32791087, -0.3605089, -0.16736083, -0.13261594, -0.1688458] -gra[5][10][6] = [-0.027445583, -0.012053756, -0.013764117, -0.0056555397, 0.0011308042, 0.001230255, -0.009876266] -gra[5][10][7] = [-0.013693058, -0.014381591, -0.01446133, -0.029808905, -0.0033213743, 0.0016988069, -0.0173225] -gra[5][10][8] = [0.023623126, -0.009956081, 0.033852994, -2.0788843E-4, 0.0, 0.0013890374, -0.0040250965] -gra[5][10][9] = [0.1047408, 0.008987334, -0.0119619025, -0.02332857, 0.0, 0.009920094, -0.04130316] -gra[5][10][10] = [-0.12892027, -0.07426171, -0.32791087, -0.3605089, -0.16736083, -0.13261594, -0.1688458] -gra[5][10][11] = [-0.01158366, 0.10779621, -0.1138076, -0.04182522, -0.006525742, -0.1280925, 0.042965613] -gra[5][10][12] = [-0.0075902045, 0.066431545, -0.075674996, -0.08584342, -0.008802207, -0.061089545, 0.05149115] -gra[5][10][13] = [0.073679745, 0.08291984, -0.073259376, -0.11281013, -0.005011603, -0.08016144, 0.07080418] -gra[5][10][14] = [-0.11542668, 0.009140518, 0.014653939, 0.090339206, -0.020985536, 0.0047443355, 0.023769205] -gra[5][11][5] = [-0.14284168, -0.018787133, -0.047984466, -0.18922658, -0.18303105, -0.1274745, -0.3759831, -0.27147567, -0.08365657, -0.08589547, -0.1647439] -gra[5][11][6] = [-0.014805781, -0.012053755, -0.046711966, -0.002071285, -0.029374257, -0.0122081535, 0.0022069581, 0.0, -9.038228E-4, -0.0016083805, -0.0012626576] -gra[5][11][7] = [-0.020023625, -0.041020907, 0.07010135, -0.06491886, -0.01931781, -0.01942112, 0.0064100344, 0.007928713, -9.331816E-4, -0.010831846, -0.01761809] -gra[5][11][8] = [-0.017691867, -0.028658904, 0.011943636, 0.03541307, 0.08073837, 0.033852994, -0.03048157, 0.042773336, -0.0017965699, 0.011501777, 0.013622059] -gra[5][11][9] = [-0.04666806, -0.016674306, 0.25624982, -0.030828482, -0.0072772484, -0.021881483, 0.008733615, 0.017590906, 9.0512355E-12, -0.0077277506, -0.0013032085] -gra[5][11][10] = [-0.0011052168, -0.06855495, 0.05807885, 0.00960215, 0.10751539, -0.09111658, -0.056654997, 0.088760085, 0.0024555703, 0.023591425, -0.0036736613] -gra[5][11][11] = [-0.14284168, -0.018787133, -0.047984466, -0.18922658, -0.18303105, -0.1274745, -0.3759831, -0.27147567, -0.08365657, -0.08589547, -0.1647439] -gra[5][11][12] = [-0.073813826, -0.034093127, 0.007619664, 0.017006135, 0.07177706, -0.019545313, 0.022726525, 0.028883155, -0.0016438005, -1.4816411E-4, 0.0416849] -gra[5][11][13] = [-0.037224732, -0.05300902, 0.10214235, -0.069835186, 0.0072789937, -0.073929384, 0.006173106, 0.010641823, -0.0016438005, 0.0019335924, 0.0017031142] -gra[5][11][14] = [0.02066849, 0.028218132, -0.09410041, 0.023164688, 0.006734378, 0.025349773, 0.14225875, 0.040411703, 0.0, 0.0, -0.09829482] -gra[5][12][5] = [-0.16457172, -0.07235628, -0.17485441, -0.2873706, -0.24799576, -0.18931276, -0.32522708, -0.29654223, -0.098324604, -0.12002101, -0.2472647] -gra[5][12][6] = [-0.01489676, -0.012053755, -0.043595865, 2.3667912E-10, -0.029923273, -0.0122081535, 0.0022069581, 0.0, -0.0046197325, -0.0016083805, -0.0012626576] -gra[5][12][7] = [-0.020023625, -0.03978909, 0.05890319, -0.035973374, -0.0053524417, -0.021901015, 0.002915925, 0.0064832703, -1.4217423E-4, -0.008580568, -0.031687073] -gra[5][12][8] = [-0.020402493, -0.024556305, 0.011465237, 0.06697061, 0.051806875, 0.033852994, -0.04555193, 0.05035637, 0.0, 0.0031901782, 0.0090892585] -gra[5][12][9] = [-0.043960694, -0.013628973, 0.22863914, 0.009699177, 0.007473303, -0.029321171, 0.0063824966, 0.02541874, 9.0512355E-12, -0.005476473, -0.013007009] -gra[5][12][10] = [0.010469224, -0.07017854, 0.05371337, 0.033642486, 0.085536815, -0.06386582, -0.0100628035, 0.1102625, 0.002381391, 0.011636256, -0.0048150206] -gra[5][12][11] = [-0.05133958, 0.0011318253, 0.16840415, -0.03615002, -0.011675207, -0.02166985, 0.0032368335, 0.023991466, -0.001044167, -0.005476473, -0.0042543197] -gra[5][12][12] = [-0.16457172, -0.07235628, -0.17485441, -0.2873706, -0.24799576, -0.18931276, -0.32522708, -0.29654223, -0.098324604, -0.12002101, -0.2472647] -gra[5][12][13] = [0.085241884, -0.03815415, 0.105614424, -0.055080954, -0.037031293, -0.061788075, -0.008844467, 0.049758192, -0.0016438005, 5.143347E-4, 0.013154621] -gra[5][12][14] = [0.020365266, 0.026918562, -0.06142708, 0.032912422, 0.021977, 0.03366942, 0.12786776, 0.020360775, 0.0, -2.2505768E-11, -0.06410605] -gra[5][13][5] = [-0.16533595, 0.017322127, -0.1377736, -0.26910052, -0.19452605, -0.25970653, -0.28648722, -0.24817653, -0.10658293, -0.12036938, -0.2446399] -gra[5][13][6] = [-0.012411703, -0.012053755, -0.046711966, 2.3667912E-10, -0.029374257, -0.0122081535, 0.0022069581, 0.0, -9.038228E-4, -0.0016083805, -0.0012626576] -gra[5][13][7] = [-0.017703082, -0.041311763, 0.0707682, -0.013973404, -0.014769816, -0.021901015, 0.006510945, 0.014144414, -1.4217423E-4, -0.008607306, -0.024563886] -gra[5][13][8] = [-0.017435485, -0.025563205, 0.008843945, 0.07489865, 0.07925679, 0.033852994, -0.050028473, 0.046572696, 0.0019757631, 0.005164899, -0.020037295] -gra[5][13][9] = [-0.039976742, -0.015151639, 0.24381188, 0.034272306, -0.0019440728, -0.029321171, 0.009977517, 0.028152797, 9.0512355E-12, -0.0077277506, -0.0016536638] -gra[5][13][10] = [0.008696433, -0.06829155, 0.008876181, 0.018096564, 0.07408771, -0.066966124, 0.028660584, 0.10250744, 0.002381391, 0.015515008, 0.016775005] -gra[5][13][11] = [-0.052093625, -0.0051658917, 0.1951475, -0.0031919498, -0.027498253, -0.01738065, 0.0056135817, 0.030979762, -0.001044167, -0.0077277506, 0.007776879] -gra[5][13][12] = [-0.033426333, -0.02074841, 0.17519033, 0.03881295, 0.0033648005, -0.026860807, 0.009749667, 0.03448535, -1.4217423E-4, -0.007257821, -0.008489365] -gra[5][13][13] = [-0.16533595, 0.017322127, -0.1377736, -0.26910052, -0.19452605, -0.25970653, -0.28648722, -0.24817653, -0.10658293, -0.12036938, -0.2446399] -gra[5][13][14] = [-0.019099027, 0.036265306, -0.13302729, 0.02993108, -0.0021256413, 0.0184861, 0.093215674, 0.011856999, 0.0, -0.0013691243, -0.067090854] -gra[5][14][5] = [0.33870053, -0.42374685, -0.3081823, 0.04381322, -0.23774712, -0.11392724, -0.18393855, -0.16892108] -gra[5][14][6] = [-0.056123417, -0.037392512, -0.004025396, -0.012053755, 0.022590073, -9.038228E-4, -0.031871308, -0.011606998] -gra[5][14][7] = [-0.046599343, 0.032219093, -0.027094513, -0.0021684086, -0.03156339, -0.0048348545, -0.00827829, -0.03576694] -gra[5][14][8] = [-0.0027976157, 0.07085788, 0.1306876, -0.014299808, -0.011449244, 0.008354038, -0.0040250965, 0.030145828] -gra[5][14][9] = [-0.03965546, 0.18231188, 0.047296464, 0.024048371, -0.01859632, -0.0048348554, -0.033582807, -0.033222895] -gra[5][14][10] = [-0.017961588, 0.10513146, 0.0032471213, -0.06398133, -0.012447634, 0.0, -0.0071987854, -0.005879982] -gra[5][14][11] = [-0.043990437, 0.12674975, 0.055096857, 0.030480476, -0.02856384, -0.005879022, -0.036173504, -0.038219962] -gra[5][14][12] = [-0.05016438, 0.108244374, 0.058410615, 0.018608809, -0.027041396, -0.008058093, -0.01678615, -0.03576694] -gra[5][14][13] = [-0.042344883, 0.11877477, 0.030920394, 0.02512398, -0.026047245, -0.008058093, -0.0131179225, -0.02687248] -gra[5][14][14] = [0.33870053, -0.42374685, -0.3081823, 0.04381322, -0.23774712, -0.11392724, -0.18393855, -0.16892108] -gra[6][0][0] = [-0.0520868] -gra[6][0][1] = [0.020259421] -gra[6][0][2] = [0.061750766] -gra[6][0][3] = [-0.049322076] -gra[6][0][4] = [-0.047721907] -gra[6][0][5] = [-0.02267837] -gra[6][0][6] = [-0.0520868] -gra[6][1][0] = [0.0031002467, 0.0, -0.002491934, 0.0] -gra[6][1][1] = [0.049295496, -0.096181266, -0.3106086, -0.1417824] -gra[6][1][2] = [0.1821127, 0.016802724, -0.02820033, -0.035232577] -gra[6][1][3] = [0.029964954, -0.06578781, -0.049592726, -0.023792237] -gra[6][1][4] = [0.04059021, -0.05346136, -0.05182021, -0.021564748] -gra[6][1][5] = [0.062091388, 0.0072983084, -0.04054499, -0.023792237] -gra[6][1][6] = [0.049295496, -0.096181266, -0.3106086, -0.1417824] -gra[6][2][0] = [0.0048480295, -0.00452922, 0.0, 0.0014561015, -0.0013292956, 0.0027307644] -gra[6][2][1] = [-0.13200061, -0.03380664, 0.054160275, 0.049062416, 7.308892E-4, -0.0031911298] -gra[6][2][2] = [-0.35208467, -0.16831768, -0.22614019, -0.12026106, -0.290771, -0.13263008] -gra[6][2][3] = [0.120697245, -0.035563417, -0.021171255, -0.08613308, -0.022132695, 0.012480451] -gra[6][2][4] = [0.16963743, -0.002057733, -0.026586981, -0.09008388, -0.027917873, 0.029292444] -gra[6][2][5] = [0.23159663, 7.6528685E-4, -0.022216301, -0.07861159, -0.0074495035, 0.020050207] -gra[6][2][6] = [-0.35208467, -0.16831768, -0.22614019, -0.12026106, -0.290771, -0.13263008] -gra[6][3][0] = [-0.0012814738, 0.0, -3.050395E-11, 5.5769994E-4, -0.0013292956, 2.8228876E-4] -gra[6][3][1] = [-0.1598347, -0.05478049, 0.10485771, 0.037768897, -0.026972052, -0.009370182] -gra[6][3][2] = [-0.023424674, -0.027183225, 0.041496, 0.06436883, -0.009571605, 0.040809743] -gra[6][3][3] = [0.0011476716, -0.26414952, -0.35945618, -0.20510413, -0.24622552, -0.16895914] -gra[6][3][4] = [0.23088562, -0.036115717, -0.023082443, -0.042083472, -0.052124094, 0.017406179] -gra[6][3][5] = [0.31934902, 3.0982628E-4, -0.020309359, -0.035055503, -0.033990495, 0.018293062] -gra[6][3][6] = [0.0011476716, -0.26414952, -0.35945618, -0.20510413, -0.24622552, -0.16895914] -gra[6][4][0] = [0.0012428539, 0.0, -3.050395E-11, 0.0030820277, -0.0013292956, 0.0027307644] -gra[6][4][1] = [-0.1598347, -0.05478049, 0.10485771, 0.037768897, -0.026972052, -0.009370182] -gra[6][4][2] = [-0.043183934, -0.02951909, 0.044765297, 0.046928365, -0.009571605, 0.03985618] -gra[6][4][3] = [0.0027969033, -0.023397336, 0.03161981, -0.034741208, -0.0065214084, 0.076208204] -gra[6][4][4] = [-0.012960361, -0.26414952, -0.35635012, -0.20510413, -0.23996602, -0.16895914] -gra[6][4][5] = [0.26218465, -0.026485048, -0.018711757, -0.03359469, -0.03442338, 0.013655335] -gra[6][4][6] = [-0.012960361, -0.26414952, -0.35635012, -0.20510413, -0.23996602, -0.16895914] -gra[6][5][0] = [-0.0017187535, 0.0, -3.050395E-11, 0.0030820277, -0.0013292956, 0.0027307644] -gra[6][5][1] = [-0.10557446, -0.04316245, 0.10485771, 0.029551987, -0.022230003, -0.009370182] -gra[6][5][2] = [-0.054362144, -0.024124099, 0.034623988, 0.03486527, -0.009571605, 0.040809743] -gra[6][5][3] = [-0.02192422, -0.02033821, 0.024495622, -0.034176692, -0.0065214084, 0.077751495] -gra[6][5][4] = [-7.854495E-5, -0.018002346, 0.024495622, -0.03897927, -0.0065214084, 0.077751495] -gra[6][5][5] = [0.080813274, -0.19254147, -0.32115835, -0.19457859, -0.2488755, -0.1573673] -gra[6][5][6] = [0.080813274, -0.19254147, -0.32115835, -0.19457859, -0.2488755, -0.1573673] -gra[6][7][6] = [-0.27941313, 0.13089189, -0.022864778, -0.1894565, -0.24034312, -0.14318681] -gra[6][7][7] = [-0.27941313, 0.13089189, -0.022864778, -0.1894565, -0.24034312, -0.14318681] -gra[6][7][8] = [0.13626447, -0.010419474, 0.11848972, -0.0025080154, -0.054712977, -0.015601757] -gra[6][7][9] = [0.05903992, 0.10894001, 0.07556343, -0.13363816, 0.010766433, 0.02050259] -gra[6][7][10] = [-0.060981005, 0.036591463, -0.052527767, -0.09514893, 0.08080975, 0.015361834] -gra[6][7][11] = [0.081102386, 0.14399157, 0.0072408943, -0.10286424, 0.11418423, 0.03336997] -gra[6][7][12] = [0.0667256, 0.11857207, 0.15086734, -0.070225924, 0.08513642, 0.0020601233] -gra[6][7][13] = [0.043629616, 0.08298377, 0.14208359, -0.058361705, 0.09083914, 4.4306018E-4] -gra[6][7][14] = [0.042588964, 0.014345749, 0.010220808, -0.027615786, 0.028633617, 0.092909016] -gra[6][8][6] = [-0.06964812, -0.019270714, -0.29129454, -0.1736677] -gra[6][8][7] = [6.975997E-4, -0.07367525, 0.03137342, 0.0] -gra[6][8][8] = [-0.06964812, -0.019270714, -0.29129454, -0.1736677] -gra[6][8][9] = [0.0038991189, 0.2681948, 0.018138103, -0.046538807] -gra[6][8][10] = [0.014519747, -0.070914745, 0.060340714, -0.020789059] -gra[6][8][11] = [-4.2284792E-4, 0.23502588, 0.05704205, -0.039293878] -gra[6][8][12] = [-0.0044890544, 0.32156876, 0.055704113, -0.03788216] -gra[6][8][13] = [0.010043448, 0.362284, 0.05945589, -0.05903426] -gra[6][8][14] = [-0.057631012, 0.086892076, -0.053914443, -0.0020066085] -gra[6][9][6] = [-0.23794961, -0.17617488, -0.119824715, -0.13024254, -0.25661156, -0.121382065] -gra[6][9][7] = [-0.08579465, 0.037450098, 0.015798284, 0.025958829, 0.0491146, -0.0017362321] -gra[6][9][8] = [-0.07514248, 0.080687106, 0.023700405, -0.053454973, -0.02913708, 0.0046982104] -gra[6][9][9] = [-0.23794961, -0.17617488, -0.119824715, -0.13024254, -0.25661156, -0.121382065] -gra[6][9][10] = [-0.032659143, 0.065354556, 0.035408407, 0.034957655, 0.073601834, 0.017471122] -gra[6][9][11] = [0.16451277, 0.1343211, -0.028546996, 0.022039177, 0.1550293, 0.03785225] -gra[6][9][12] = [0.1499453, 0.042843826, 0.050664313, 0.025564509, 0.121892266, 0.0065424056] -gra[6][9][13] = [0.116907224, 0.0015404057, 0.07024962, 0.07451293, 0.1282733, 0.0049253437] -gra[6][9][14] = [-0.027205631, 0.034512695, 0.0068574054, -0.052349146, 0.022619942, 0.09395592] -gra[6][10][6] = [-0.15888286, -0.3138391, -0.20539969, -0.090248756, -0.13080679, -0.21882577] -gra[6][10][7] = [0.039945565, 0.020518731, -0.045851756, -0.016429346, -0.019353565, -0.058723222] -gra[6][10][8] = [0.02214892, 0.031443782, -0.05955004, -0.0027019721, -0.019615663, 0.084891655] -gra[6][10][9] = [0.015036379, 0.024928685, -0.058278434, -0.050845973, -0.022102375, -0.06784104] -gra[6][10][10] = [-0.15888286, -0.3138391, -0.20539969, -0.090248756, -0.13080679, -0.21882577] -gra[6][10][11] = [0.013768813, 0.01700349, 0.062490392, -0.028850764, -0.014016453, 0.2212303] -gra[6][10][12] = [0.036062263, 0.08016446, 0.077293545, 0.04093059, -0.0024978905, 0.21134187] -gra[6][10][13] = [0.016277056, 0.100216605, 0.06005934, 0.06515343, 0.026563412, 0.18100214] -gra[6][10][14] = [0.008751316, -0.048622817, -0.042715497, -0.01140897, -0.02455731, 0.062376864] -gra[6][11][6] = [-0.2685444, -0.0683347, -0.15563123, -0.016927153, -0.336164, -0.104053676] -gra[6][11][7] = [-0.078098536, 0.036055945, -0.008061613, 0.04446686, 0.047880843, -0.0017362321] -gra[6][11][8] = [-0.10716042, 0.12169289, 0.056964055, -0.02944395, -0.037702125, 0.011035088] -gra[6][11][9] = [-0.042997826, 0.043761387, -0.040120546, 0.10305196, 0.06304089, 0.002002405] -gra[6][11][10] = [0.053359248, 0.15490454, 0.15116541, 0.13195065, -0.109551705, 0.041787107] -gra[6][11][11] = [-0.2685444, -0.0683347, -0.15563123, -0.016927153, -0.336164, -0.104053676] -gra[6][11][12] = [0.066963956, 0.15725373, 0.06591427, -0.006932204, 0.09140407, 0.008936482] -gra[6][11][13] = [0.13743879, 0.07587393, 0.09513351, 0.053372484, 0.088956, 0.0049169487] -gra[6][11][14] = [0.008520744, 0.009865254, 0.029770477, -0.043798335, 0.06328126, 0.09395592] -gra[6][12][6] = [-0.27087486, -0.13329938, -0.18069777, -0.14379713, -0.28540802, -0.13817921] -gra[6][12][7] = [-0.091557376, 0.050021313, -0.009507055, 0.033268698, 0.044386722, 5.1504583E-4] -gra[6][12][8] = [-0.1065508, 0.0927614, 0.0645471, -0.029922348, -0.052772477, 0.0027234897] -gra[6][12][9] = [-0.06354022, 0.058511935, -0.03229271, 0.07544131, 0.060689773, 0.0042536827] -gra[6][12][10] = [0.070965834, 0.124543056, 0.1796476, 0.14080608, -0.06596581, 0.029831933] -gra[6][12][11] = [-0.05151954, 0.032910287, 0.03701201, 0.07359792, 0.054370165, 0.002251278] -gra[6][12][12] = [-0.27087486, -0.13329938, -0.18069777, -0.14379713, -0.28540802, -0.13817921] -gra[6][12][13] = [-0.0059878826, 0.036550015, 0.11808377, 0.038853873, 0.06567299, 0.0034976904] -gra[6][12][14] = [0.0017822781, 0.025107872, 0.009719546, -0.011125006, 0.04889026, 0.09395592] -gra[6][13][6] = [-0.22575764, -0.07982966, -0.13233209, -0.10671632, -0.24666817, -0.13852759] -gra[6][13][7] = [-0.09758964, 0.040603936, -0.0018459143, 0.045133702, 0.047981754, -0.0017362321] -gra[6][13][8] = [-0.09510926, 0.1202113, 0.060763415, -0.032543637, -0.05724903, 0.0046982104] -gra[6][13][9] = [-0.0669956, 0.049094565, -0.029558651, 0.090614036, 0.064284794, 0.002002405] -gra[6][13][10] = [0.07920076, 0.11309396, 0.17189252, 0.09596887, -0.027242426, 0.033710685] -gra[6][13][11] = [-0.058955528, 0.018443067, 0.027779505, 0.08748881, 0.06905725, 8.713861E-11] -gra[6][13][12] = [-0.101597026, 0.01910264, 0.020095045, 0.07021575, 0.054787323, 4.699302E-4] -gra[6][13][13] = [-0.22575764, -0.07982966, -0.13233209, -0.10671632, -0.24666817, -0.13852759] -gra[6][13][14] = [-0.006698521, -0.012949264, -0.010005177, -0.06663247, 0.011589371, 0.08487903] -gra[6][14][6] = [0.45508236, -0.21231659, -0.25286, -0.33567595, -0.13115937, -0.14486317, -0.18183614, -0.22559977, -0.24659869, -0.08959103, -0.100985184] -gra[6][14][7] = [-0.04559906, 0.06038591, 0.027435044, 0.004346365, 0.014812058, 0.0385217, -0.06002618, -0.038745835, 0.20625146, -0.011164435, 0.0065670083] -gra[6][14][8] = [-0.0015442646, -0.0227673, -0.08524036, 0.063609034, 0.0050346516, 0.0035762223, 0.23346017, -0.0061080162, 0.021447917, 0.005901302, -0.0037276738] -gra[6][14][9] = [-0.038655173, 0.08559073, 0.011954381, 0.026875805, -0.010552221, 0.011435814, -0.00301829, -0.01681796, 0.1082497, -0.011164436, 0.0051845433] -gra[6][14][10] = [-0.024287913, 0.027374256, 0.0133876195, 0.12225391, -0.0051552514, 0.041741583, -0.03067777, 0.014676357, 0.04385982, 0.0, 0.013415361] -gra[6][14][11] = [-0.04299015, 0.08978732, 0.060956437, 0.01685282, 0.020332731, 0.07663676, -0.0086626075, -0.025221316, 0.09362389, -0.011164436, 0.006370598] -gra[6][14][12] = [-0.049164087, 0.08459338, 0.0136726005, -0.011820925, 0.010157926, 0.03883238, -0.01981043, -0.039680198, 0.103250325, -0.014387673, 0.006370598] -gra[6][14][13] = [-0.041344598, 0.07045057, -0.026481139, 0.0137648545, 0.008764668, 0.033259735, -0.0365325, -0.03504498, 0.0953349, -0.014387673, 0.006370598] -gra[6][14][14] = [0.45508236, -0.21231659, -0.25286, -0.33567595, -0.13115937, -0.14486317, -0.18183614, -0.22559977, -0.24659869, -0.08959103, -0.100985184] -gra[7][0][0] = [-0.09400473] -gra[7][0][1] = [0.063014895] -gra[7][0][2] = [0.008203407] -gra[7][0][3] = [0.04336482] -gra[7][0][4] = [0.04336482] -gra[7][0][5] = [0.045217585] -gra[7][0][6] = [-0.012236582] -gra[7][0][7] = [-0.09400473] -gra[7][1][0] = [0.0022879262, -0.001958814, 0.002719991, 4.4457944E-11, -0.0021720084, 9.538276E-4] -gra[7][1][1] = [-0.080664985, -0.1498559, -0.1748334, -0.16505879, -0.15219411, -0.13811535] -gra[7][1][2] = [0.09982281, -0.042137515, 0.039627425, -0.020901661, -0.008630434, -0.04557295] -gra[7][1][3] = [0.09390932, -0.037475146, -0.0055839457, -0.019397447, -0.009961956, -0.06605266] -gra[7][1][4] = [0.10293442, -0.037475146, 0.0012364213, -0.019397447, -0.009961956, -0.06607746] -gra[7][1][5] = [0.08429182, -0.027172701, 0.036659725, -0.019397447, -0.009961956, -0.05051318] -gra[7][1][6] = [-0.012236582, 8.6579437E-4, 0.0038837004, -0.016195, 0.002059937, -0.003209465] -gra[7][1][7] = [-0.080664985, -0.1498559, -0.1748334, -0.16505879, -0.15219411, -0.13811535] -gra[7][2][0] = [-3.8481143E-5, 0.0, 6.4378075E-4, 0.006364585, -0.00452922, 0.0031306578, 3.69985E-4, 0.0, 0.0012653338, 0.0015309223, -0.008016303] -gra[7][2][1] = [4.5733654E-4, -3.7906157E-11, -0.0498366, -0.0041412255, -0.02294093, -0.0067321556, -0.014439816, 0.034137405, 0.0019214812, 0.0035228117, -0.034932088] -gra[7][2][2] = [-0.16109464, -0.1522247, -0.15308808, -0.14182311, -0.24778378, -0.14608057, -0.2882911, -0.2643619, -0.17109688, -0.10580697, -0.18639117] -gra[7][2][3] = [-0.0130428625, -0.0263843, 0.008692514, -0.008148272, -0.02118981, 0.0, 0.0043394, -0.009604603, -0.0094120335, -0.0052225264, -0.1345021] -gra[7][2][4] = [-0.01706918, -0.02848946, 0.0072037163, -0.0035270967, -0.0015978473, -0.0016386209, 7.817097E-4, -0.0126001, -0.0094120335, 0.003701211, -0.16767177] -gra[7][2][5] = [-0.010582655, -0.024485687, -0.010048743, -0.0019876226, 0.008764084, 0.0, 0.01246951, -0.01570706, -0.010316748, -0.0013686286, -0.14882436] -gra[7][2][6] = [0.019011011, -0.0020981468, -0.043214638, -0.003755305, 0.019529367, -0.015389417, -0.012197308, -0.015615815, 0.0, 0.0, -0.08651045] -gra[7][2][7] = [-0.16109464, -0.1522247, -0.15308808, -0.14182311, -0.24778378, -0.14608057, -0.2882911, -0.2643619, -0.17109688, -0.10580697, -0.18639117] -gra[7][3][0] = [-3.8481143E-5, 0.0, -2.546209E-4, 0.002719991, 0.0, 0.0031306578, 3.69985E-4, -3.050395E-11, 0.0012653338, -9.175534E-4, -0.0059786467] -gra[7][3][1] = [4.5733654E-4, 0.0, -0.06010697, -0.010353064, -0.04391478, -0.012589575, -0.048092224, 0.078652866, 0.0019214812, 0.0, -0.08094852] -gra[7][3][2] = [-0.00847032, -0.013719019, -0.057563722, 0.0, -0.028270295, -0.0064118747, -0.009571605, 0.0045674103, 0.0011093304, 0.00255187, -0.045079764] -gra[7][3][3] = [-0.16554235, -0.19184113, -0.23793115, -0.19770847, -0.34361568, -0.16543038, -0.24374564, -0.39767784, -0.17093313, -0.14213605, -0.19553113] -gra[7][3][4] = [-0.016108312, -0.0263843, 0.05114194, 8.307928E-4, -0.030055411, -0.0016386209, -0.023424516, -0.009095556, -0.01243171, -0.0031257737, 0.04524743] -gra[7][3][5] = [-0.010582655, -0.024485687, 0.03350733, 0.0044725235, 0.008308632, 0.0, -0.014071485, -0.013800123, -0.014241234, -0.0031257737, 0.048553314] -gra[7][3][6] = [0.0072282003, 0.0, -0.03128368, 0.0, 0.014126777, -0.01838149, -0.006137472, -0.010240156, 0.0017409262, 3.0340515E-11, -0.06437046] -gra[7][3][7] = [-0.16554235, -0.19184113, -0.23793115, -0.19770847, -0.34361568, -0.16543038, -0.24374564, -0.39767784, -0.17093313, -0.14213605, -0.19553113] -gra[7][4][0] = [-3.8481143E-5, 0.0, 0.002269707, 0.002719991, 0.0, 0.0031306578, 3.69985E-4, -3.050395E-11, 0.0012653338, 0.0015309223, -0.0059786467] -gra[7][4][1] = [4.5733654E-4, 0.0, -0.06010697, -0.010353064, -0.04391478, -0.012589575, -0.048092224, 0.078652866, 0.0019214812, 0.0, -0.08094852] -gra[7][4][2] = [-0.008470321, -0.013719019, -0.07689501, 0.0, -0.03060616, -0.0108750155, -0.009571605, 0.007836706, 0.001859782, 0.0015983053, -0.049368795] -gra[7][4][3] = [-0.012485486, -0.012182354, -0.09273422, 0.0, -0.022421567, -0.004148566, -0.0065214084, -2.5217576E-4, -0.0036188248, 0.0010085813, -0.038101066] -gra[7][4][4] = [-0.16332567, -0.19417033, -0.23793115, -0.19770847, -0.34361568, -0.16543038, -0.23748614, -0.39457178, -0.17093313, -0.14213605, -0.23766032] -gra[7][4][5] = [-0.010582655, -0.022380527, 0.03301778, 0.0023702672, -0.012885826, -0.0030399878, -0.014504371, -0.012202517, -0.012083008, -0.004008526, 0.06235572] -gra[7][4][6] = [0.008184545, -0.0015748128, -0.03128368, -0.0013104129, 0.014126777, -0.01838149, -0.006137472, -0.010240156, 0.0, -0.0012154061, -0.066418] -gra[7][4][7] = [-0.16332567, -0.19417033, -0.23793115, -0.19770847, -0.34361568, -0.16543038, -0.23748614, -0.39457178, -0.17093313, -0.14213605, -0.23766032] -gra[7][5][0] = [-3.8481143E-5, -0.0019296022, 0.002269707, 0.0013423589, 0.0, -0.0023391629, 3.6998512E-4, -3.050395E-11, 0.0012653338, 0.0015309223, -0.0059786467] -gra[7][5][1] = [4.5733654E-4, 0.0, -0.06681095, -0.010353064, -0.035776734, -0.012589575, -0.043350175, 0.078652866, 0.0019214812, 0.0, -0.09211975] -gra[7][5][2] = [-0.00847032, -0.013719019, -0.07761786, 0.0, -0.02521117, -0.0108750155, -0.009571605, 0.004819586, 0.0011093304, 0.00255187, -0.04139789] -gra[7][5][3] = [-0.012507373, -0.011716097, -0.08894238, 0.0, -0.019362442, -0.008611707, -0.0065214084, -2.5217576E-4, -0.0036188248, 0.00255187, -0.034885447] -gra[7][5][4] = [-0.010043007, -0.013198066, -0.094590135, 0.0, -0.017026579, -0.0027493846, -0.0065214084, 0.0022252216, -0.0036188248, 0.00255187, -0.03168124] -gra[7][5][5] = [-0.16332567, -0.18746553, -0.25135505, -0.16596697, -0.28105557, -0.16543038, -0.2368377, -0.3664208, -0.17093313, -0.14213605, -0.2239882] -gra[7][5][6] = [0.0075485897, 0.0, -0.030092647, 0.0, 0.014126777, -0.01838149, -0.0035625359, -0.013210811, 0.0011668268, 3.0340515E-11, -0.062408306] -gra[7][5][7] = [-0.16332567, -0.18746553, -0.25135505, -0.16596697, -0.28105557, -0.16543038, -0.2368377, -0.3664208, -0.17093313, -0.14213605, -0.2239882] -gra[7][6][0] = [6.4378075E-4, 0.0] -gra[7][6][1] = [-0.060440436, 0.026094327] -gra[7][6][2] = [-0.08302259, 0.0] -gra[7][6][3] = [-0.09992734, 0.0026769685] -gra[7][6][4] = [-0.09992734, 0.0] -gra[7][6][5] = [-0.113697976, -0.0012286699] -gra[7][6][6] = [-0.31237385, -0.23130569] -gra[7][6][7] = [-0.31237385, -0.23130569] -gra[7][8][7] = [-0.14233668, -0.14756092, -0.044601977, -0.18925315, -0.2837601, -0.16813198] -gra[7][8][8] = [-0.14233668, -0.14756092, -0.044601977, -0.18925315, -0.2837601, -0.16813198] -gra[7][8][9] = [0.116245195, -0.0227675, 0.1501364, -0.08012412, -0.035148308, -0.009997491] -gra[7][8][10] = [0.025993222, 0.049919903, -0.08549047, -0.025898118, -3.6705425E-4, -0.011883774] -gra[7][8][11] = [0.14915608, -0.0051115504, 0.11367791, -0.048788004, -0.05031695, 0.022126378] -gra[7][8][12] = [0.10679064, 0.04075294, 0.069916554, -0.023135131, -0.055469196, 0.03254832] -gra[7][8][13] = [0.10665981, 0.07543501, 0.16509528, -0.02731902, -0.0676342, 0.038390566] -gra[7][8][14] = [-0.18697277, 0.012405168, 0.06522049, 0.019131955, 0.020992978, -0.030493984] -gra[7][9][7] = [-0.11762953, -0.14489782, -0.20298205, -0.19647896, -0.34765953, -0.2502451, -0.2935088, -0.25860205, -0.09332765, -0.09703251, -0.110088095] -gra[7][9][8] = [-0.011532839, -0.024351576, -0.023128346, 0.040395692, 0.054172352, 0.027047869, -0.023652218, 0.01099829, 0.0, 0.005164899, -0.012177394] -gra[7][9][9] = [-0.11762953, -0.14489782, -0.20298205, -0.19647896, -0.34765953, -0.2502451, -0.2935088, -0.25860205, -0.09332765, -0.09703251, -0.110088095] -gra[7][9][10] = [-0.0053148326, 0.032591105, 0.08589532, -0.065572426, 0.057028472, -0.0385645, 0.021282855, 0.01835112, 0.0, 0.012099067, 0.008352403] -gra[7][9][11] = [-0.050017238, -0.052683227, 0.12402754, 0.11143928, 0.06660414, -0.053028144, 0.09611938, -0.04782975, -0.004067228, 8.262127E-4, 0.008645253] -gra[7][9][12] = [-0.015160622, -0.05497521, 0.054767463, 0.08498106, -0.030994065, -0.06664673, 0.04961324, -0.023644354, -3.876005E-4, 8.262127E-4, 0.011072626] -gra[7][9][13] = [0.047767337, -0.014375355, 0.10950356, 0.052034695, -0.058833968, -0.04414952, 0.05015435, -0.03535352, -0.0051067895, 8.262127E-4, -0.043190517] -gra[7][9][14] = [-0.008160759, 0.005809472, -0.15416811, 0.05876962, 0.024954624, 0.059738718, 0.1186391, 0.017498635, 0.0, 0.001237925, -0.07941664] -gra[7][10][7] = [-0.17060247, -0.23843166, -0.33738467, -0.32404765, -0.16877839, -0.100185975, -0.21477497] -gra[7][10][8] = [0.0033476613, -0.0073065395, 0.033852994, -0.02442397, 0.0, -6.638963E-4, -0.006660041] -gra[7][10][9] = [0.055700943, 0.047137737, -0.008807744, 0.04429596, 2.5751462E-4, 0.0040959795, 0.004527896] -gra[7][10][10] = [-0.17060247, -0.23843166, -0.33738467, -0.32404765, -0.16877839, -0.100185975, -0.21477497] -gra[7][10][11] = [0.027160797, 0.06803705, -0.07385983, 0.052746348, -0.007360163, -0.10496495, 0.093874976] -gra[7][10][12] = [0.025051562, 0.060594648, -0.05271573, -0.025558125, 7.2789623E-4, -0.04918014, 0.07324426] -gra[7][10][13] = [0.059900522, 0.09558491, -0.050300118, 0.003853741, 0.002008081, -0.06891406, 0.09705341] -gra[7][10][14] = [-0.1669436, -0.014706884, 0.014233817, 0.07264586, -0.01725235, 0.0047443355, 0.05550222] -gra[7][11][7] = [-0.18877086, -0.18295705, -0.089666635, -0.15276533, -0.23981941, -0.1369483, -0.37306124, -0.29440862, -0.08713316, -0.07970412, -0.1323139] -gra[7][11][8] = [-0.016062489, -0.026009362, -0.008331828, 0.011196983, 0.08981819, 0.033852994, -0.026807453, 0.03652016, -0.0017965699, 0.011501777, 0.011569124] -gra[7][11][9] = [-8.3700445E-4, 0.018604184, 0.197153, 0.039537385, 0.004949229, -0.018727323, 0.0107252635, 0.014077867, -0.0137060415, -0.018733032, -0.007127323] -gra[7][11][10] = [-0.0037351365, -0.039604805, 0.08834917, 0.047203198, 0.09250858, -0.09111658, -0.058497563, 0.08510176, 0.0024555703, 0.023591425, -0.0023401042] -gra[7][11][11] = [-0.18877086, -0.18295705, -0.089666635, -0.15276533, -0.23981941, -0.1369483, -0.37306124, -0.29440862, -0.08713316, -0.07970412, -0.1323139] -gra[7][11][12] = [-0.051172394, -0.043835588, 0.05621762, 0.074865945, 0.07842945, 0.0034139452, 0.027390484, 0.007771712, 0.0030753883, 0.0032202876, 0.0535943] -gra[7][11][13] = [-0.010975514, -0.040343948, 0.0883631, 0.046828676, 0.015499551, -0.050970126, 0.010837065, -0.01046962, -0.0016438005, 8.178175E-4, 0.01295049] -gra[7][11][14] = [0.052401498, 0.0043707276, -0.14561729, 0.0054713218, 3.071786E-4, 0.024929654, 0.15930042, 0.040411703, 0.0, 0.001237925, -0.09829482] -gra[7][12][7] = [-0.21050091, -0.23652624, -0.21653661, -0.25090933, -0.3047841, -0.19878656, -0.32230523, -0.31947517, -0.10180121, -0.11382966, -0.21483472] -gra[7][12][8] = [-0.018773116, -0.021906763, -0.008810226, 0.042754523, 0.061202444, 0.033852994, -0.041877814, 0.04072256, 0.0, 0.0031901782, 0.0070363255] -gra[7][12][9] = [0.0018703595, 0.021649519, 0.16954234, 0.08006504, 0.019699778, -0.026167009, 0.008374144, 0.021905703, -0.0137060415, -0.016481753, -0.018831125] -gra[7][12][10] = [0.010217155, -0.0412284, 0.0839837, 0.071243525, 0.07052999, -0.06651417, -0.011905368, 0.106604174, 0.002381391, 0.011636256, -0.0034814635] -gra[7][12][11] = [-0.010060661, 0.023870783, 0.18013962, 0.027321486, -0.025711982, -0.018515691, 0.0052284813, 0.023991466, 7.689154E-4, -0.0016940457, -0.0042543197] -gra[7][12][12] = [-0.21050091, -0.23652624, -0.21653661, -0.25090933, -0.3047841, -0.19878656, -0.32230523, -0.31947517, -0.10180121, -0.11382966, -0.21483472] -gra[7][12][13] = [0.11237939, -0.029394656, 0.10779137, 0.059157457, -0.028810736, -0.038828816, -0.0041805073, 0.028646749, -0.0016438005, -6.0143974E-4, 0.024401996] -gra[7][12][14] = [0.05209828, 0.00307116, -0.11294398, 0.015219055, 0.015549801, 0.0332493, 0.14490941, 0.020360775, 0.0, 0.001237925, -0.06410605] -gra[7][13][7] = [-0.21126512, -0.14684778, -0.17945582, -0.23263925, -0.2513144, -0.26918033, -0.28356537, -0.27110946, -0.11005954, -0.11417803, -0.21220993] -gra[7][13][8] = [-0.017938271, -0.022913663, -0.011431517, 0.05068257, 0.09294045, 0.033852994, -0.046354357, 0.039811414, 0.0019757631, 0.005164899, -0.022090228] -gra[7][13][9] = [0.0058543156, 0.020126855, 0.18471506, 0.104638174, 0.010282405, -0.026167009, 0.011969165, 0.024639761, -0.0137060415, -0.018733032, -0.0074777785] -gra[7][13][10] = [0.008444371, -0.039341405, 0.039146483, 0.055697598, 0.059080895, -0.06961448, 0.026818028, 0.09884912, 0.002381391, 0.015515008, 0.018108562] -gra[7][13][11] = [-0.010814704, 0.019341925, 0.2075875, 0.06027955, -0.041535035, -0.014226491, 0.0076052295, 0.030979762, 7.689154E-4, -0.0039453236, 0.007776879] -gra[7][13][12] = [0.024077337, -0.012258323, 0.17245317, 0.1343428, -0.014438946, -0.026206074, 0.008978962, 0.03448535, 0.0018748178, -0.0034753936, -0.008489365] -gra[7][13][13] = [-0.21126512, -0.14684778, -0.17945582, -0.23263925, -0.2513144, -0.26918033, -0.28356537, -0.27110946, -0.11005954, -0.11417803, -0.21220993] -gra[7][13][14] = [0.010951025, 0.009298121, -0.14688809, 0.01865165, -0.008552837, 0.018065976, 0.10271375, 0.011856999, 0.0, -1.3119925E-4, -0.067090854] -gra[7][14][7] = [0.5241708, -0.46542898, -0.27172104, -0.12035675, -0.21927318, -0.117403835, -0.22986774, -0.17839494] -gra[7][14][8] = [-0.0016250344, 0.03413689, 0.10002088, -0.011650267, -0.014161643, 0.008354038, -0.006660041, 0.030145828] -gra[7][14][9] = [-0.03830725, 0.12321507, 0.117662326, 0.05932686, -0.01487538, -0.018540896, 0.012248252, -0.030068738] -gra[7][14][10] = [-0.017961588, 0.13540176, 0.040848166, -0.035031192, -0.0056500686, 0.0, -0.007450852, -0.008528335] -gra[7][14][11] = [-0.043990437, 0.13918974, 0.11856836, 0.054988295, -0.020448634, -0.0040659397, 0.005105417, -0.035065804] -gra[7][14][12] = [-0.04144368, 0.10621174, 0.15394047, 0.028867757, -0.0306922, -0.0060411, 0.04071752, -0.03511221] -gra[7][14][13] = [-0.033624183, 0.116037644, 0.12645026, 0.033614065, -0.028261295, -0.0060411, 0.041231185, -0.03511221] -gra[7][14][14] = [0.5241708, -0.46542898, -0.27172104, -0.12035675, -0.21927318, -0.117403835, -0.22986774, -0.17839494] -gra[8][0][0] = [-0.14417496] -gra[8][0][1] = [-0.0045984997] -gra[8][0][2] = [-0.015381893] -gra[8][0][3] = [-2.1490036E-5] -gra[8][0][4] = [-2.1490036E-5] -gra[8][0][5] = [-0.0015194325] -gra[8][0][6] = [0.003301489] -gra[8][0][7] = [0.004572891] -gra[8][0][8] = [-0.14417496] -gra[8][1][0] = [0.0016441452] -gra[8][1][1] = [-0.088203505] -gra[8][1][2] = [0.07636672] -gra[8][1][3] = [0.05065222] -gra[8][1][4] = [0.059677303] -gra[8][1][5] = [0.037684016] -gra[8][1][6] = [0.003301489] -gra[8][1][7] = [0.09311825] -gra[8][1][8] = [-0.088203505] -gra[8][2][0] = [0.0036445942, 0.0, 0.0031306578, -0.010473219, -0.0020841712, -0.0070527056] -gra[8][2][1] = [-0.0041412255, 0.0035309494, -8.747375E-4, -0.024372065, -0.023927271, -0.034932088] -gra[8][2][2] = [-0.2532087, -0.17914829, -0.24883613, -0.3441101, -0.2326756, -0.24048056] -gra[8][2][3] = [-0.0055313455, 0.0011138088, -0.011980485, -0.031063369, -0.035564486, -0.1411826] -gra[8][2][4] = [0.0063980464, 0.0011138088, -0.013619106, -0.010086369, -0.038962904, -0.1785424] -gra[8][2][5] = [0.009107003, 0.0011138088, -0.011980485, 2.7556764E-4, -0.05956607, -0.159695] -gra[8][2][6] = [-0.00513966, -0.0020981468, -0.0028909168, 0.018890928, -0.027676575, -0.08680173] -gra[8][2][7] = [0.0026903795, 0.0011138088, -0.011960017, 0.014541798, -0.015871506, -0.18325953] -gra[8][2][8] = [-0.2532087, -0.17914829, -0.24883613, -0.3441101, -0.2326756, -0.24048056] -gra[8][3][0] = [0.0, 0.0, 0.0031306578, -0.005943999, -0.0029825727, -0.005015048] -gra[8][3][1] = [-0.008866866, 0.001660333, -8.747375E-4, -0.045345914, -0.042694468, -0.08094852] -gra[8][3][2] = [-0.0024275752, -0.0073068766, -0.008529195, -0.025120389, 0.030459536, -0.04988506] -gra[8][3][3] = [-0.30909407, -0.21876469, -0.26818597, -0.43994185, -0.31751865, -0.24962053] -gra[8][3][4] = [0.0063663553, 0.0011138088, -0.013619106, -0.03854393, 0.0068849414, 0.038566932] -gra[8][3][5] = [0.01556715, 0.0011138088, -0.011980485, -1.798892E-4, -0.016009998, 0.037682675] -gra[8][3][6] = [-0.0013843551, 0.0, -0.0058829887, 0.013488339, -0.015745612, -0.06466174] -gra[8][3][7] = [0.0056626936, 0.0011138088, -0.011960017, -0.008537625, -0.0044912873, 0.0040028263] -gra[8][3][8] = [-0.30909407, -0.21876469, -0.26818597, -0.43994185, -0.31751865, -0.24962053] -gra[8][4][0] = [0.0, 0.0, 0.0031306578, -0.005943999, -4.5824505E-4, -0.005015048] -gra[8][4][1] = [-0.008866866, 0.001660333, -8.747375E-4, -0.045345914, -0.042694468, -0.08094852] -gra[8][4][2] = [-0.0024275752, -0.0073068766, -0.012697934, -0.027456252, 0.0023085428, -0.05417409] -gra[8][4][3] = [-0.0024275752, -0.0019607393, -0.008350256, -0.01927166, 0.008416267, -0.036242567] -gra[8][4][4] = [-0.30909407, -0.22109388, -0.26818597, -0.43994185, -0.31751865, -0.29174975] -gra[8][4][5] = [0.009075312, 0.0011138088, -0.015020473, -0.021374347, -0.014589924, 0.055675216] -gra[8][4][6] = [-0.002694768, -0.0015748128, -0.0058829887, 0.013488339, -0.015745612, -0.06670928] -gra[8][4][7] = [0.0056626936, 0.0011138088, -0.011960017, -0.008036301, -0.0044912873, -1.2353621E-4] -gra[8][4][8] = [-0.30909407, -0.22109388, -0.26818597, -0.43994185, -0.31751865, -0.29174975] -gra[8][5][0] = [-0.0013776321, -0.0019296022, -0.0023391629, -0.005943999, -4.5824505E-4, -0.005015048] -gra[8][5][1] = [-0.008866866, 0.001660333, -8.747375E-4, -0.037207868, -0.049398426, -0.09211975] -gra[8][5][2] = [-0.0024275752, -0.0073068766, -0.012697934, -0.022061262, 0.0015857005, -0.046203177] -gra[8][5][3] = [-0.0024275752, -0.001494481, -0.012518995, -0.016212534, 0.003388402, -0.03302695] -gra[8][5][4] = [-0.0024275752, -0.0037581453, -0.004672005, -0.01491863, 0.0065603466, -0.03205142] -gra[8][5][5] = [-0.2773526, -0.2143891, -0.26818597, -0.37738183, -0.33094257, -0.27807763] -gra[8][5][6] = [-0.0013843551, 0.0, -0.0074605006, 0.013488339, -0.014554577, -0.064160265] -gra[8][5][7] = [0.0056626936, 0.0011138088, -0.014376583, -0.01484395, -0.0030712152, -0.0025116857] -gra[8][5][8] = [-0.2773526, -0.2143891, -0.26818597, -0.37738183, -0.33094257, -0.27807763] -gra[8][6][0] = [-0.0020841712] -gra[8][6][1] = [-0.04302792] -gra[8][6][2] = [-0.0050475206] -gra[8][6][3] = [-0.008825058] -gra[8][6][4] = [-0.008825058] -gra[8][6][5] = [-0.012781609] -gra[8][6][6] = [-0.41294762] -gra[8][6][7] = [-0.0036576067] -gra[8][6][8] = [-0.41294762] -gra[8][7][0] = [-0.003605175, 0.0, 3.0349702E-11, -0.005943999, 0.0, -0.0034732886] -gra[8][7][1] = [-0.0047256397, 0.001660333, -8.747375E-4, -0.025625348, -0.029110229, -0.05507951] -gra[8][7][2] = [-0.0024275752, -0.0073068766, -0.010434626, -0.02700362, 2.0877292E-4, -0.03593757] -gra[8][7][3] = [0.0059763296, -0.013574859, -0.013208415, -0.016524691, 0.0015131709, -0.02000734] -gra[8][7][4] = [0.0059763296, -0.015372265, -0.012518995, -0.017566651, 0.0015131709, -0.022236021] -gra[8][7][5] = [0.0059763296, -0.015372265, -0.00639748, -0.017453253, 0.005679493, -0.021238362] -gra[8][7][6] = [0.0047623203, -9.316074E-4, 0.003376759, 0.0, -0.0023392674, -0.00691407] -gra[8][7][7] = [-0.2170329, -0.21450336, -0.23716104, -0.18752718, -0.29549456, -0.22514722] -gra[8][7][8] = [-0.2170329, -0.21450336, -0.23716104, -0.18752718, -0.29549456, -0.22514722] -gra[8][9][8] = [-0.022827793, -0.068379566, -0.25837877, -0.21213788, -0.18123251, -0.06280679] -gra[8][9][9] = [-0.022827793, -0.068379566, -0.25837877, -0.21213788, -0.18123251, -0.06280679] -gra[8][9][10] = [-0.04248844, -0.015347177, -0.06022135, 0.059880435, 0.030355116, 0.02373868] -gra[8][9][11] = [0.1324003, -0.03536785, 0.072841264, 0.111723945, 0.16686207, 0.004373795] -gra[8][9][12] = [0.148417, -0.062015627, 0.03661561, 0.028872918, 0.10492425, -0.00793882] -gra[8][9][13] = [0.115055285, -0.06980443, 0.03620458, 0.002651147, 0.17650467, -0.051590923] -gra[8][9][14] = [0.0024404947, -0.014385754, 0.052796006, 0.032367773, -0.037356302, -0.083207875] -gra[8][10][8] = [-0.3744933, -0.16784373, -0.22703753, -0.27977395, -0.079930805] -gra[8][10][9] = [-0.00495979, -0.015150558, -0.024016019, -0.024264883, 0.0040959795] -gra[8][10][10] = [-0.3744933, -0.16784373, -0.22703753, -0.27977395, -0.079930805] -gra[8][10][11] = [0.009161118, 0.06431773, -0.028824054, 0.06274183, -0.11322439] -gra[8][10][12] = [0.00397792, 0.034380853, -0.0059177973, 0.060738035, -0.070336334] -gra[8][10][13] = [-0.0165147, 0.08674023, 0.01999219, 0.1095151, -0.07945923] -gra[8][10][14] = [0.004430178, -0.009117239, 0.003957929, -0.014807275, 9.530978E-4] -gra[8][11][8] = [-0.018760176, -0.13557921, -0.19221872, -0.24474324, -0.18942925, -0.117233455] -gra[8][11][9] = [-0.02862041, -0.0266835, -0.017359264, -0.0026410976, 0.101478025, -0.007127323] -gra[8][11][10] = [0.12575564, -0.008013563, -0.13465624, 0.042924937, 0.10461114, -0.013226186] -gra[8][11][11] = [-0.018760176, -0.13557921, -0.19221872, -0.24474324, -0.18942925, -0.117233455] -gra[8][11][12] = [0.16262418, -0.06352125, 0.13524722, 0.13732867, 0.07395467, 0.032438103] -gra[8][11][13] = [0.14645974, -0.096206084, 0.02090235, 0.07344408, 0.15144207, 0.0024053212] -gra[8][11][14] = [-0.059860162, -0.015824499, 0.017986942, 0.0066039376, -0.022695731, -0.10208605] -gra[8][12][8] = [-0.1169041, -0.18914837, -0.254057, -0.30970794, -0.31629923, -0.19975424] -gra[8][12][9] = [0.011907245, -0.023638166, -0.024798952, 0.012109455, 0.073867366, -0.018831125] -gra[8][12][10] = [0.1423337, -0.007672596, -0.10740548, 0.020946361, 0.110106535, -0.014367545] -gra[8][12][11] = [-0.036603082, -0.021824643, -0.013993474, -0.009670965, 0.062927134, -0.0042543197] -gra[8][12][12] = [-0.1169041, -0.18914837, -0.254057, -0.30970794, -0.31629923, -0.19975424] -gra[8][12][13] = [0.1698632, -0.097934745, 0.07009623, 0.029133787, 0.13945653, 0.013856832] -gra[8][12][14] = [-0.050112426, -0.017124066, 0.026306588, 0.021846559, 0.009977598, -0.06789728] -gra[8][13][8] = [-0.09863404, -0.09946993, -0.3244508, -0.25623825, -0.27921844, -0.19712944] -gra[8][13][9] = [0.03648038, -0.025160834, -0.024798952, 0.0026920782, 0.08904009, -0.0074777785] -gra[8][13][10] = [0.12678777, -0.0057856096, -0.11050579, 0.0094972495, 0.065269336, 0.0072224857] -gra[8][13][11] = [-0.008817717, -0.02160719, -0.009704274, -0.02549401, 0.08290721, 0.007776879] -gra[8][13][12] = [0.02728383, -0.02116654, -0.01983916, 0.008786059, 0.08503172, -0.009510772] -gra[8][13][13] = [-0.09863404, -0.09946993, -0.3244508, -0.25623825, -0.27921844, -0.19712944] -gra[8][13][14] = [-0.047285203, -0.013819384, -2.9367127E-4, -0.0011396939, -0.051197436, -0.07088209] -gra[8][14][8] = [0.27659905, -0.15125082, -0.11054209] -gra[8][14][9] = [-0.04892659, 0.04652346, -0.010434729] -gra[8][14][10] = [-0.0171581, 0.05569372, 0.0020520485] -gra[8][14][11] = [-0.057897132, 0.046490017, -0.011281329] -gra[8][14][12] = [-0.073342204, 0.038727716, -0.019339422] -gra[8][14][13] = [-0.06552271, 0.016410215, -0.019339422] -gra[8][14][14] = [0.27659905, -0.15125082, -0.11054209] -gra[9][0][0] = [-0.1773251] -gra[9][0][1] = [0.07775881] -gra[9][0][2] = [-0.03473952] -gra[9][0][3] = [-7.944107E-4] -gra[9][0][4] = [-7.944107E-4] -gra[9][0][5] = [0.00966204] -gra[9][0][6] = [-0.007829653] -gra[9][0][7] = [-0.0057671433] -gra[9][0][8] = [0.020644845] -gra[9][0][9] = [-0.1773251] -gra[9][1][0] = [0.0016247655, -0.001958814, 6.20738E-4, 5.2270518E-11, -0.0021720084, 9.538275E-4] -gra[9][1][1] = [-0.19433363, -0.15237986, -0.23557648, -0.20321801, -0.15950295, -0.17264925] -gra[9][1][2] = [0.056879885, -0.045482695, 0.028423216, -0.026443, -0.01245614, -0.048355818] -gra[9][1][3] = [0.049750097, -0.040081326, -0.014490077, -0.021925595, -0.014794135, -0.067049526] -gra[9][1][4] = [0.058775187, -0.04147892, -0.0076697078, -0.019397447, -0.014794135, -0.06707433] -gra[9][1][5] = [0.04873628, -0.029277861, 0.024150392, -0.021289404, -0.010774887, -0.051510047] -gra[9][1][6] = [-0.007829653, -0.0024341857, 0.0038837004, -0.012754725, 0.0061575435, -0.001778353] -gra[9][1][7] = [0.07907056, -0.033471376, 0.025322549, -0.024018921, -0.006669964, -0.07393278] -gra[9][1][8] = [0.026585741, -3.4384023E-11, -0.024732247, -0.0073345173, -0.0014129442, -0.0036619226] -gra[9][1][9] = [-0.19433363, -0.15237986, -0.23557648, -0.20321801, -0.15950295, -0.17264925] -gra[9][2][0] = [-3.8481143E-5, 0.0, -1.9379833E-5, 0.0042653317, -0.00452922, 0.0040684794, 0.004997642, 0.0, 0.0012653338, 0.012965051, -0.008016303] -gra[9][2][1] = [-5.13921E-4, -3.7906157E-11, -0.02825313, -0.0041412255, -0.02294093, -0.0013798745, -0.00706416, 0.035186574, -7.720956E-4, 0.019359952, -0.0476656] -gra[9][2][2] = [-0.15411112, -0.15474868, -0.2667567, -0.2025662, -0.2436716, -0.18423976, -0.27013993, -0.2716599, -0.2620662, -0.12707642, -0.22092506] -gra[9][2][3] = [-0.010340879, -0.028990483, -0.03546672, -0.0149521455, -0.02118981, -0.0025281478, 0.0043394, -0.00686435, -0.002073156, -0.009318697, -0.13549897] -gra[9][2][4] = [-0.013003577, -0.03249323, -0.036955513, -0.012433228, -0.0015978473, -0.0016386209, 7.817097E-4, -0.008992363, -0.002073156, 9.969876E-4, -0.16866863] -gra[9][2][5] = [-0.004744318, -0.026590846, -0.04560429, -0.014496949, 0.008764084, -0.0018919576, 0.012585785, -0.013152661, -0.00433054, -0.004072852, -0.14982122] -gra[9][2][6] = [0.008839857, -0.005398127, -0.038807712, -0.003755305, 0.018350098, -0.009624145, -0.007742171, -0.015615815, 0.0, 0.004373548, -0.08937369] -gra[9][2][7] = [-0.005842864, -0.0263843, -0.029211506, -0.020425018, 0.029116679, 0.0024165655, 0.019620195, 0.008007627, -0.0065089096, -0.0107359085, -0.1680537] -gra[9][2][8] = [0.0028593205, -0.029040482, 0.020325596, -0.0065694638, 0.02993482, -0.006035342, -0.033911515, -0.012498216, 0.002475134, 8.743692E-4, -0.024541838] -gra[9][2][9] = [-0.15411112, -0.15474868, -0.2667567, -0.2025662, -0.2436716, -0.18423976, -0.27013993, -0.2716599, -0.2620662, -0.12707642, -0.22092506] -gra[9][3][0] = [-3.8481143E-5, 0.0, -9.177815E-4, 6.20738E-4, 0.0, 0.0040684794, 0.004997642, -3.050395E-11, 0.0012653338, 0.0105165765, -0.0059786467] -gra[9][3][1] = [-5.13921E-4, 0.0, -0.031104738, -0.010353064, -0.04391478, -0.0033323471, -0.04071657, 0.079702035, -7.720956E-4, 0.01583714, -0.093682036] -gra[9][3][2] = [-0.009741628, -0.019480554, -0.0440849, 0.0, -0.025120389, -0.0064118747, -0.009571605, 0.0045674103, -0.0014879347, 0.00255187, -0.051743556] -gra[9][3][3] = [-0.15855883, -0.1943651, -0.3515998, -0.25845155, -0.33950344, -0.20358957, -0.22559446, -0.4049759, -0.26190245, -0.16340552, -0.23006502] -gra[9][3][4] = [-0.012042707, -0.03038807, 0.006982708, -0.0059730806, -0.030055411, -0.0016386209, -0.023424516, -0.0063553033, -0.0050928323, -0.0058299974, 0.044250567] -gra[9][3][5] = [-0.004744318, -0.026590846, -0.002048215, -0.008036802, 0.008308632, -0.0018919576, -0.013955208, -0.011245721, -0.008255026, -0.0058299974, 0.04755645] -gra[9][3][6] = [-0.0029429542, -0.00329998, -0.026876753, 0.0, 0.012947509, -0.012616217, -0.0016823349, -0.010240156, 0.0017409262, 0.004373548, -0.06723371] -gra[9][3][7] = [-0.0076958933, -0.0263843, -0.017831288, -0.017452704, 0.006037254, 0.0024165655, -0.0066935206, 0.011656271, -0.008786375, -0.008534221, 0.019957142] -gra[9][3][8] = [0.0, -0.023754772, 0.022294685, -0.0065694638, 0.02787349, -0.006035342, -0.03937225, 0.008614166, 0.002475134, 2.4045661E-11, -0.053164832] -gra[9][3][9] = [-0.15855883, -0.1943651, -0.3515998, -0.25845155, -0.33950344, -0.20358957, -0.22559446, -0.4049759, -0.26190245, -0.16340552, -0.23006502] -gra[9][4][0] = [-3.8481143E-5, 0.0, 0.0016065463, 6.20738E-4, 0.0, 0.0040684794, 0.004997642, -3.050395E-11, 0.0012653338, 0.012965051, -0.0059786467] -gra[9][4][1] = [-5.13921E-4, 0.0, -0.031104738, -0.010353064, -0.04391478, -0.0033323471, -0.04071657, 0.079702035, -7.720956E-4, 0.01583714, -0.093682036] -gra[9][4][2] = [-0.009741628, -0.019480554, -0.06341619, 0.0, -0.027456252, -0.008486157, -0.009571605, 0.007836706, -0.0015743364, 0.0015983053, -0.056032587] -gra[9][4][3] = [-0.011068651, -0.0161157, -0.083996825, 0.0032001403, -0.01927166, -0.008297132, -0.0065214084, -2.5217576E-4, -0.009947379, 0.0010085813, -0.038101066] -gra[9][4][4] = [-0.15634215, -0.1966943, -0.3515998, -0.25845155, -0.33950344, -0.20358957, -0.21933496, -0.40186983, -0.26190245, -0.16340552, -0.27219427] -gra[9][4][5] = [-0.004744318, -0.024485687, -0.0025377665, -0.008036802, -0.012885826, -0.0049319454, -0.014388094, -0.010515601, -0.0060968003, -0.0067127496, 0.061358854] -gra[9][4][6] = [-0.00198661, -0.004874793, -0.026876753, -0.0013104129, 0.012947509, -0.012616217, -0.0016823349, -0.010240156, 0.0, 0.0031581419, -0.06928125] -gra[9][4][7] = [-0.0076958933, -0.0263843, -0.017831288, -0.017452704, 0.0065385774, 0.0024165655, -0.0066935206, 0.011656271, -0.008786375, -0.00811267, 0.01583078] -gra[9][4][8] = [-0.0030642115, -0.023754772, 0.022294685, -0.0065694638, 0.02787349, -0.006035342, -0.03937225, 0.008614166, 0.0024751339, -5.004493E-4, -0.053164832] -gra[9][4][9] = [-0.15634215, -0.1966943, -0.3515998, -0.25845155, -0.33950344, -0.20358957, -0.21933496, -0.40186983, -0.26190245, -0.16340552, -0.27219427] -gra[9][5][0] = [-3.8481143E-5, -0.0019296022, 0.0016065463, -7.568941E-4, 0.0, -0.0014013414, 0.004997642, -3.050395E-11, 0.0012653338, 0.012965051, -0.0059786467] -gra[9][5][1] = [-5.13921E-4, 0.0, -0.037808705, -0.010353064, -0.035776734, -0.0033323471, -0.03597452, 0.079702035, -7.720956E-4, 0.01583714, -0.10485327] -gra[9][5][2] = [-0.009741628, -0.019480554, -0.06413903, 0.0, -0.022061262, -0.008486157, -0.009571605, 0.004819586, -0.002324788, 0.00255187, -0.04806168] -gra[9][5][3] = [-0.0110905375, -0.015649442, -0.08020499, 0.0032001403, -0.016212534, -0.010371415, -0.0065214084, -2.5217576E-4, -0.010784232, 0.00255187, -0.034885447] -gra[9][5][4] = [-0.008626172, -0.017131412, -0.08585275, 0.0032001403, -0.013876671, -0.006897951, -0.0065214084, 0.0022252216, -0.009080861, 0.00255187, -0.03168124] -gra[9][5][5] = [-0.15634215, -0.18998952, -0.36502373, -0.22671008, -0.2769434, -0.20358957, -0.21868652, -0.37371886, -0.26190245, -0.16340552, -0.2585221] -gra[9][5][6] = [-0.0026225648, -0.00329998, -0.025685718, 0.0, 0.012947509, -0.012616217, -7.880372E-4, -0.013210811, 0.0011668268, 0.004373548, -0.06527156] -gra[9][5][7] = [-0.0076958933, -0.0263843, -0.016411217, -0.017452704, -2.6907446E-4, 4.886615E-13, -0.0057870867, 0.011656271, -0.008786375, -0.00811267, 0.0031243209] -gra[9][5][8] = [0.0, -0.01895187, 0.022294685, -0.0065694638, 0.022793658, -0.006035342, -0.04394223, 0.014637312, 0.002475134, 2.4045661E-11, -0.06604334] -gra[9][5][9] = [-0.15634215, -0.18998952, -0.36502373, -0.22671008, -0.2769434, -0.20358957, -0.21868652, -0.37371886, -0.26190245, -0.16340552, -0.2585221] -gra[9][6][0] = [-1.9379833E-5, -0.004478236] -gra[9][6][1] = [-0.031438198, 0.030764] -gra[9][6][2] = [-0.069543764, 0.001318386] -gra[9][6][3] = [-0.09118996, 0.0026769685] -gra[9][6][4] = [-0.09118996, 0.0] -gra[9][6][5] = [-0.10496058, -0.0012286699] -gra[9][6][6] = [-0.5014086, -0.22156538] -gra[9][6][7] = [-0.013997644, -0.01767266] -gra[9][6][8] = [0.0023319586, -6.0892664E-4] -gra[9][6][9] = [-0.5014086, -0.22156538] -gra[9][7][0] = [-3.8481143E-5, 0.0, -1.9379833E-5, -0.0029844372, 0.0, 9.378215E-4, 0.004997642, 0.0, 0.0012653338, 0.012965051, -0.004436887] -gra[9][7][1] = [-5.13921E-4, 0.0, -0.026578074, -0.006211838, -0.02472724, -0.0033323471, -0.0122409295, 0.043953314, 8.230112E-4, 0.018503062, -0.07874879] -gra[9][7][2] = [-0.011755253, -0.019480554, -0.06551596, 0.0, -0.02700362, -0.0062228492, -0.009571605, 0.0052266098, -0.004360152, 0.0, -0.037890106] -gra[9][7][3] = [-0.0051616803, -0.02772982, -0.08208022, 0.011604045, -0.016524691, -0.011060836, -0.0065214084, 0.0014358414, -0.010784232, 0.0, -0.02186584] -gra[9][7][4] = [-0.0035729608, -0.028745532, -0.08208022, 0.011604045, -0.016524691, -0.012650484, -0.0065214084, 0.0039132386, -0.009917714, 0.0, -0.02186584] -gra[9][7][5] = [-0.0020350767, -0.02772982, -0.09057815, 0.011604045, -0.017453253, -0.008297132, -0.009280194, 0.0016880172, -0.009947379, -0.0020343647, -0.023096858] -gra[9][7][6] = [-0.0015405889, -9.316074E-4, -0.05381691, 0.0047623203, 0.0, 0.0053935135, 4.2076397E-4, 0.005881849, -6.80316E-4, 0.0016483099, -0.0069982223] -gra[9][7][7] = [-0.16224875, -0.19711332, -0.36457542, -0.17255223, -0.11015577, -0.17975295, -0.2606367, -0.1860249, -0.28262648, -0.14453895, -0.2916181] -gra[9][7][8] = [0.0, -0.020787204, 0.022655375, -0.003890037, 0.04273223, -0.006035342, -0.04434924, 7.8614766E-4, 0.0024751343, 2.4045661E-11, -0.05973374] -gra[9][7][9] = [-0.16224875, -0.19711332, -0.36457542, -0.17255223, -0.11015577, -0.17975295, -0.2606367, -0.1860249, -0.28262648, -0.14453895, -0.2916181] -gra[9][8][0] = [0.008273305, 0.0, 6.20738E-4, 4.4457944E-11, -0.0021720084, 9.538275E-4] -gra[9][8][1] = [0.023566004, 0.0, -9.987416E-4, -0.0050757998, 0.005938728, 0.012229878] -gra[9][8][2] = [-0.05634791, -0.019480554, -0.0053461394, -0.0062228492, 0.009140637, -0.0064943894] -gra[9][8][3] = [-0.08876743, -0.009889483, -0.002145999, -0.010371415, 0.0069431528, -0.007944971] -gra[9][8][4] = [-0.07633048, -0.010905196, -0.002145999, -0.012650484, 0.0069431528, -0.007944971] -gra[9][8][5] = [-0.089960665, -0.009889483, -0.002145999, -0.008297132, 0.0069431528, -0.007944971] -gra[9][8][6] = [-0.056910094, 0.0, 0.0, -0.012947457, -0.0017974195, -0.0031688735] -gra[9][8][7] = [-0.06844245, -0.021147298, -0.006194906, -0.0066199475, 0.009164523, -0.011917457] -gra[9][8][8] = [-0.2550567, -0.09885185, -0.22504526, -0.18872045, -0.1348899, -0.17494895] -gra[9][8][9] = [-0.2550567, -0.09885185, -0.22504526, -0.18872045, -0.1348899, -0.17494895] -gra[9][10][9] = [0.10852815, -0.025776992, -0.2302414, -0.31093428, -0.15383463, -0.024499029, -0.094033964] -gra[9][10][10] = [0.10852815, -0.025776992, -0.2302414, -0.31093428, -0.15383463, -0.024499029, -0.094033964] -gra[9][10][11] = [-0.02225552, 0.09129608, -0.1057563, -0.024842158, -0.006525742, -0.120727904, 0.11680413] -gra[9][10][12] = [-0.062789634, 0.061075095, -0.06308911, -0.07374247, -8.7093055E-4, -0.065352134, 0.11862738] -gra[9][10][13] = [9.415448E-4, 0.09611326, -0.04225102, -0.07940817, 0.0029196735, -0.085086055, 0.15611345] -gra[9][10][14] = [-0.115164116, -1.8879399E-4, 0.020602407, 0.062252887, -0.01980718, 0.0047443355, 0.026617764] -gra[9][11][9] = [-0.0668847, -0.040929336, 0.04409513, -0.16642815, -0.20053107, -0.10886454, -0.4057592, -0.2498812, -0.09408637, -0.08808707, -0.14613786] -gra[9][11][10] = [0.0013266006, 0.0033504684, 0.021805383, 0.052153945, 0.10140834, -0.09087926, -0.06761236, 0.07752701, 0.0014439123, 0.023591425, 0.011768046] -gra[9][11][11] = [-0.0668847, -0.040929336, 0.04409513, -0.16642815, -0.20053107, -0.10886454, -0.4057592, -0.2498812, -0.09408637, -0.08808707, -0.14613786] -gra[9][11][12] = [-0.02479161, -0.049128816, -0.046256132, 0.038998794, 0.0664641, -0.013100912, 0.024784435, 0.033664178, -0.0016438005, 0.005044714, 0.0374223] -gra[9][11][13] = [0.055205453, -0.02576902, 0.062797636, -0.01856041, 0.005523918, -0.04292103, 0.010837065, 0.016201805, -0.0016438005, -9.234785E-4, -0.0032215076] -gra[9][11][14] = [0.04499191, 0.023527658, -0.11728629, 0.013822016, 0.00838391, 0.031298243, 0.14430822, 0.040411703, 0.0, 0.0, -0.09829482] -gra[9][12][9] = [-0.088614725, -0.094498485, -0.08277482, -0.2645721, -0.26549575, -0.1707028, -0.3550032, -0.2749477, -0.10875442, -0.1222126, -0.22865866] -gra[9][12][10] = [0.01290104, -2.3767166E-4, 0.010322846, 0.081089616, 0.07942977, -0.063628495, -0.018640457, 0.09832135, 0.0013697329, 0.011636256, 0.010626682] -gra[9][12][11] = [-0.032606002, 0.042882897, 0.17033508, -0.0199083, -0.014172083, -0.027323436, 0.004347658, 0.023991466, 7.6891546E-4, -0.002900556, -0.0042543197] -gra[9][12][12] = [-0.088614725, -0.094498485, -0.08277482, -0.2645721, -0.26549575, -0.1707028, -0.3550032, -0.2749477, -0.10875442, -0.1222126, -0.22865866] -gra[9][12][13] = [0.17182983, -0.009854233, 0.06964333, -0.0068727885, -0.038786367, -0.036921203, -0.0041805073, 0.05531818, -0.0016438005, -0.0023427363, 0.008229998] -gra[9][12][14] = [0.044688687, 0.022228086, -0.08461296, 0.023569753, 0.023626532, 0.039617892, 0.12991723, 0.020360775, 0.0, -2.2505768E-11, -0.06410605] -gra[9][13][9] = [-0.089378946, -0.0048200767, -0.045694027, -0.24630201, -0.21202603, -0.24109656, -0.31626335, -0.22658204, -0.11701275, -0.12256098, -0.22603387] -gra[9][13][10] = [0.012254806, 0.0016493145, -0.017773198, 0.07629947, 0.07468779, -0.06672881, 0.011702432, 0.09033154, 0.0013697329, 0.015515008, 0.037934404] -gra[9][13][11] = [-0.03336004, 0.03658518, 0.18911833, 0.004911943, -0.029995129, -0.023034235, 0.006724406, 0.030979762, 7.6891546E-4, -0.005151834, 0.007776879] -gra[9][13][12] = [-0.0013462165, 0.017152274, 0.14371338, 0.05429946, -0.0017973538, -0.031859662, 0.011744333, 0.03448535, -1.4217425E-4, -0.004681904, -0.008489365] -gra[9][13][13] = [-0.089378946, -0.0048200767, -0.045694027, -0.24630201, -0.21202603, -0.24109656, -0.31626335, -0.22658204, -0.11701275, -0.12256098, -0.22603387] -gra[9][13][14] = [2.063606E-4, 0.030281678, -0.17126273, 0.029621735, -0.0021256413, 0.019744035, 0.093215674, 0.011856999, 0.0, -0.0013691243, -0.067090854] -gra[9][14][9] = [0.4212072, -0.33166724, -0.28538382, 0.02167102, -0.22091122, -0.12435703, -0.107981555, -0.15031114] -gra[9][14][10] = [-0.017961588, 0.058655586, 0.031953864, 5.054381E-4, -0.0062238164, -0.001011658, -0.0025138534, -0.007839976] -gra[9][14][11] = [-0.043990437, 0.12072055, 0.06320075, 0.07223154, -0.025583364, -0.0040659397, -0.017439922, -0.04387355] -gra[9][14][12] = [-0.051827066, 0.06880729, 0.065759294, 0.056509502, -0.034117844, -0.008058093, 0.015293969, -0.040765796] -gra[9][14][13] = [-0.04400757, 0.087297834, 0.046406917, 0.06302466, -0.03168694, -0.008058093, 0.015807634, -0.040765796] -gra[9][14][14] = [0.4212072, -0.33166724, -0.28538382, 0.02167102, -0.22091122, -0.12435703, -0.107981555, -0.15031114] -gra[10][0][0] = [-0.10724866] -gra[10][0][1] = [-0.023958247] -gra[10][0][2] = [-0.015149269] -gra[10][0][3] = [0.021138027] -gra[10][0][4] = [0.022920009] -gra[10][0][5] = [0.030904416] -gra[10][0][6] = [0.0013775101] -gra[10][0][7] = [0.056586806] -gra[10][0][8] = [-0.03225985] -gra[10][0][9] = [0.017028254] -gra[10][0][10] = [-0.10724866] -gra[10][1][0] = [0.0016441452, 0.0, -0.0021720084, 0.0] -gra[10][1][1] = [-0.048993174, -0.25442305, -0.15137123, -0.16780452] -gra[10][1][2] = [0.07379909, 0.0388396, -0.016389685, -0.026443] -gra[10][1][3] = [0.06901149, -0.007807495, -0.012324876, -0.02191716] -gra[10][1][4] = [0.079818554, -9.871258E-4, -0.010499197, -0.020035459] -gra[10][1][5] = [0.067307614, 0.03540191, -0.012324876, -0.02191716] -gra[10][1][6] = [0.00137751, 0.0038837004, 6.091478E-4, -0.0039868616] -gra[10][1][7] = [0.13875346, 0.056739453, -0.011917006, -0.024018921] -gra[10][1][8] = [-0.023770995, -0.03150455, -0.0077087167, -0.0012991752] -gra[10][1][9] = [0.07292722, 0.014448465, -0.015642967, -0.019397447] -gra[10][1][10] = [-0.048993174, -0.25442305, -0.15137123, -0.16780452] -gra[10][2][0] = [5.761308E-4, -0.0015712132, 0.0036445942, 0.0, 3.5459347E-11, -0.00452922, -9.497553E-4, 0.0031306578] -gra[10][2][1] = [0.035186574, -0.0010594062, -0.0041412255, -3.7906157E-11, -0.0074518225, -0.026237296, -0.019708391, 0.0068521057] -gra[10][2][2] = [-0.24751812, -0.1072654, -0.23525298, -0.14890505, -0.2227314, -0.2392259, -0.4945354, -0.15355895] -gra[10][2][3] = [-0.0034905192, 0.0012402993, -0.012895271, 0.0013912377, -0.014404967, -0.022028076, 0.07092665, -0.002519714] -gra[10][2][4] = [-0.006486016, -0.002786019, -0.010376353, 0.0013912377, -0.01602141, -0.0024361145, 0.09002073, -0.0022766325] -gra[10][2][5] = [-0.010646315, -0.0018251493, -0.007871137, -0.0011139774, -0.027142221, 0.00792582, 0.12973902, -0.002519714] -gra[10][2][6] = [-0.015615815, 0.008577139, -0.002648871, -0.0020981468, -0.028376034, 0.020017283, 0.051820286, -8.903948E-4] -gra[10][2][7] = [0.011381457, 2.787984E-5, 0.006366184, 0.005368133, 0.030362133, 0.027474642, -0.032702655, 0.0024165655] -gra[10][2][8] = [-0.02509948, 0.0028593205, -0.0036909212, -0.050199, -0.02083967, 0.04475024, -0.014748111, 3.69642E-11] -gra[10][2][9] = [0.0010847622, -0.005951785, -0.036049217, 0.0013912377, -0.03142338, 0.051694456, 0.017777147, -1.1858091E-11] -gra[10][2][10] = [-0.24751812, -0.1072654, -0.23525298, -0.14890505, -0.2227314, -0.2392259, -0.4945354, -0.15355895] -gra[10][3][0] = [5.7613075E-4, -0.0015712132, 0.0, 0.0, -8.9840154E-4, 0.0, -0.007079258, 0.0031306578] -gra[10][3][1] = [0.079702035, -0.0010594062, -0.010353064, 0.0, -0.01857777, -0.047211148, -0.027547482, 0.0068521057] -gra[10][3][2] = [0.0045674103, -0.0020977946, -7.2137534E-4, -0.0011517848, 0.060968373, -0.028034722, -0.019437145, -0.0022633083] -gra[10][3][3] = [-0.3808341, -0.11171311, -0.29113835, -0.18852146, -0.3075745, -0.33505765, -0.14130302, -0.17290878] -gra[10][3][4] = [-0.0029814718, -0.0018251492, -0.0039162054, 0.0013912377, 0.02982644, -0.030893678, 0.1712429, -0.0022766325] -gra[10][3][5] = [-0.0087393755, -0.0018251492, -0.0014109905, -0.0011139774, 0.016413854, 0.007470367, 0.21749142, -0.002519714] -gra[10][3][6] = [-0.010240156, -0.0032056724, 0.001106434, 0.0, -0.01644507, 0.014614694, 0.10100887, -0.0038824668] -gra[10][3][7] = [0.015030102, -0.0018251494, 0.0093385, 0.005368133, 0.041742355, 0.0043952167, -0.007053854, 0.0024165655] -gra[10][3][8] = [-0.0039870986, -1.0503716E-10, -0.0036909212, -0.04491329, -0.018870585, 0.042688906, 0.050200105, 3.69642E-11] -gra[10][3][9] = [0.022444844, -0.005951785, -0.031732466, 0.0013912377, -0.007614853, -0.0018208846, 0.14795507, 3.051486E-4] -gra[10][3][10] = [-0.3808341, -0.11171311, -0.29113835, -0.18852146, -0.3075745, -0.33505765, -0.14130302, -0.17290878] -gra[10][4][0] = [5.7613075E-4, -0.0015712132, 0.0, 0.0, 0.0016259261, 0.0, -0.0045549306, 0.0031306578] -gra[10][4][1] = [0.079702035, -0.0010594062, -0.010353064, 0.0, -0.01857777, -0.047211148, -0.027547482, 0.0068521057] -gra[10][4][2] = [0.007836706, -0.0020977946, -7.2137534E-4, -0.0011517848, 0.035989325, -0.030370584, -0.031994678, -0.0022633083] -gra[10][4][3] = [0.0014574399, -8.537594E-4, 0.0, 0.0035487313, 0.05433384, -0.0207291, -0.0020670719, -0.00507246] -gra[10][4][4] = [-0.37772804, -0.10949644, -0.29113835, -0.19085066, -0.3075745, -0.33505765, -0.15541108, -0.17290878] -gra[10][4][5] = [-0.0071417717, -0.0018251492, -0.0014109905, -0.0011139774, 0.017833926, -0.013724092, 0.1913245, -0.0055597015] -gra[10][4][6] = [-0.010240156, -0.002249328, -2.0397897E-4, -0.0015748128, -0.01644507, 0.014614694, 0.10100887, -0.0038824668] -gra[10][4][7] = [0.015030102, -0.0018251494, 0.0093385, 0.005368133, 0.041742355, 0.00489654, -0.008712063, 0.0024165655] -gra[10][4][8] = [-0.0039870986, -0.0030642115, -0.0036909212, -0.04491329, -0.018870585, 0.042688906, 0.054841205, 3.69642E-11] -gra[10][4][9] = [0.022444844, -0.005951785, -0.031732466, 0.0013912377, -0.007614853, -6.1365584E-4, 0.14629687, 4.9778556E-11] -gra[10][4][10] = [-0.37772804, -0.10949644, -0.29113835, -0.19085066, -0.3075745, -0.33505765, -0.15541108, -0.17290878] -gra[10][5][0] = [5.7613075E-4, -0.0015712132, -0.0013776321, -0.0019296022, 0.0016259261, 0.0, -0.0066208825, -0.0023391629] -gra[10][5][1] = [0.079702035, -0.0010594062, -0.010353064, 0.0, -0.025281731, -0.039073102, 0.0036873422, 0.0068521057] -gra[10][5][2] = [0.004819586, -0.0020977946, -7.2137534E-4, -0.0011517848, 0.03526648, -0.024975596, -0.02962697, -0.0022633083] -gra[10][5][3] = [0.0014574399, -8.756455E-4, 0.0, 0.00401499, 0.052477915, -0.017669976, -0.007751686, -0.00507246] -gra[10][5][4] = [0.00145744, 0.0, 0.0, 0.0054343482, 0.052477915, -0.015334111, 0.0026334636, -0.0013942088] -gra[10][5][5] = [-0.34957707, -0.10949644, -0.25939685, -0.18414588, -0.32099843, -0.27249756, -0.08553642, -0.17290878] -gra[10][5][6] = [-0.013210811, -0.002885283, 0.001106434, 0.0, -0.015254037, 0.014614694, 0.0835998, -0.0038824668] -gra[10][5][7] = [0.015030102, -0.0018251494, 0.0093385, 0.005368133, 0.043162428, -0.0019111116, -0.020885175, 4.886615E-13] -gra[10][5][8] = [0.0050476207, -1.0503716E-10, -0.0036909212, -0.037708938, -0.018870585, 0.0292247, 0.06806866, 3.69642E-11] -gra[10][5][9] = [0.022444844, -0.005951785, -0.019626053, 0.0013912377, -0.0061947796, -0.0074213073, 0.13643174, 4.9778556E-11] -gra[10][5][10] = [-0.34957707, -0.10949644, -0.25939685, -0.18414588, -0.32099843, -0.27249756, -0.08553642, -0.17290878] -gra[10][6][0] = [0.0019107888, 3.5459347E-11] -gra[10][6][1] = [0.029803114, -0.018911218] -gra[10][6][2] = [-5.509861E-4, 0.028633261] -gra[10][6][3] = [6.034209E-11, 0.040264454] -gra[10][6][4] = [6.034209E-11, 0.040264454] -gra[10][6][5] = [4.487872E-11, 0.03214158] -gra[10][6][6] = [-0.16041966, -0.3927623] -gra[10][6][7] = [-0.01347043, 0.048356306] -gra[10][6][8] = [-0.011656463, -0.054429226] -gra[10][6][9] = [0.016295122, 0.0040693013] -gra[10][6][10] = [-0.16041966, -0.3927623] -gra[10][7][0] = [5.761308E-4, -0.0015712132, -0.003605175, 0.0, 3.5459347E-11, 0.0, -9.497553E-4, 3.0349702E-11] -gra[10][7][1] = [0.043953314, -0.0010594062, -0.006211838, 0.0, -0.0140511, -0.028023608, -0.027011054, 0.0068521057] -gra[10][7][2] = [0.0052266098, -0.0041114204, -7.2137534E-4, -0.0011517848, 0.033889554, -0.029917952, 0.00254313, -2.2155085E-11] -gra[10][7][3] = [0.003145457, 0.0050532115, 0.008403905, -0.008065389, 0.050602682, -0.01798213, 0.0076085986, -0.0057618804] -gra[10][7][4] = [0.0031454572, 0.0050532115, 0.008403905, -0.006179772, 0.050602682, -0.01798213, 0.0076085986, -0.00507246] -gra[10][7][5] = [0.0031454572, 0.008180746, 0.008403905, -0.008065389, 0.050602682, -0.017407378, 0.009909841, -0.00507246] -gra[10][7][6] = [0.0010625808, -4.1459492E-4, 0.0036949979, -0.0028234723, -0.0023392674, -0.0028964565, 0.0150217265, 0.003376759] -gra[10][7][7] = [-0.16188312, -0.115403034, -0.205239, -0.1912697, -0.32055005, -0.10571001, -0.38804692, -0.14907216] -gra[10][7][8] = [-0.008803545, -1.0503716E-10, -0.0010114949, -0.03954427, -0.025353342, 0.049163274, 0.017981954, 3.69642E-11] -gra[10][7][9] = [0.0083061075, -0.004127358, -0.03981907, 0.0013912377, -0.015796406, 0.08416972, -0.006380614, 7.39957E-11] -gra[10][7][10] = [-0.16188312, -0.115403034, -0.205239, -0.1912697, -0.32055005, -0.10571001, -0.38804692, -0.14907216] -gra[10][8][0] = [0.0076038064, 0.0, -0.0021720084, 0.0] -gra[10][8][1] = [0.04922101, -9.987416E-4, 0.002922766, 0.007726843] -gra[10][8][2] = [0.04503881, -0.011413654, 0.004687597, 1.9001073E-11] -gra[10][8][3] = [0.045896675, -0.010692279, 0.0037861012, -0.00507246] -gra[10][8][4] = [0.058333617, -0.010692279, 0.0037861012, -0.00507246] -gra[10][8][5] = [0.053201366, -0.010692279, 0.0037861012, -0.00507246] -gra[10][8][6] = [-0.007944579, -0.0022261534, -0.010934131, -0.024378616] -gra[10][8][7] = [0.027071448, -0.010692279, 0.006007472, -0.0045456644] -gra[10][8][8] = [-0.23839745, -0.27353147, -0.13540275, -0.1630716] -gra[10][8][9] = [0.045568958, 0.009596035, -0.022897031, -0.016538091] -gra[10][8][10] = [-0.23839745, -0.27353147, -0.13540275, -0.1630716] -gra[10][9][0] = [5.761308E-4, -5.123068E-4, 0.0072497693, 0.0, 3.5459347E-11, -0.0018813149, 0.0, 3.0349702E-11] -gra[10][9][1] = [0.042927664, -0.0029176604, -0.006211838, 0.0, -0.014741326, -0.019474655, -0.004241555, -8.7473745E-4] -gra[10][9][2] = [0.0043670787, -0.0020977946, -7.2137534E-4, -0.0011517848, 0.034133404, -0.019950185, -0.022405695, -0.0022633083] -gra[10][9][3] = [0.0014574399, 0.0, 0.0010881305, 0.0, 0.051389784, -0.017669974, -0.018819861, -0.00507246] -gra[10][9][4] = [0.00145744, 0.0, 0.0010881305, 0.0018856167, 0.051389784, -0.017669974, -0.018819861, -0.00507246] -gra[10][9][5] = [0.00145744, -4.5008247E-4, 0.0010881305, -3.2877305E-12, 0.051389784, -0.016166661, -0.016518619, -0.00507246] -gra[10][9][6] = [-0.0021946991, 0.0, 0.0010157842, -0.0018918649, -0.0012785172, -0.004598216, 7.150832E-4, -0.0025067397] -gra[10][9][7] = [0.0039554364, -0.0011536116, -8.487664E-4, 0.041617688, 0.03015891, -0.020984316, -0.006567695, -0.0022633083] -gra[10][9][8] = [0.024523886, 0.0, -0.0020706127, -9.234166E-4, -0.0130427005, -0.0047317725, -0.02894469, -0.0021502178] -gra[10][9][9] = [-0.1832146, -0.103708565, -0.18610916, -0.15677848, -0.16264665, -0.23057386, -0.3202236, -0.170793] -gra[10][9][10] = [-0.1832146, -0.103708565, -0.18610916, -0.15677848, -0.16264665, -0.23057386, -0.3202236, -0.170793] -gra[10][11][10] = [-0.26761565, -0.14027157, -0.13171935, -0.124156564, -0.10518143, -0.16079436, -0.2556547, -0.0296514] -gra[10][11][11] = [-0.26761565, -0.14027157, -0.13171935, -0.124156564, -0.10518143, -0.16079436, -0.2556547, -0.0296514] -gra[10][11][12] = [0.008379771, -0.058434255, 0.03282719, -0.026505746, 0.037004553, 0.071838595, 0.009776115, -0.022090515] -gra[10][11][13] = [0.015646577, -0.048322476, 0.087542325, -0.033848234, 0.075140424, 0.02229148, 0.043451987, -0.07398519] -gra[10][11][14] = [0.03841678, 0.0666777, 0.007093721, -0.049995307, -0.029425904, 0.01705503, 0.02315872, -0.0044668466] -gra[10][12][10] = [-0.3153644, -0.17907926, -0.2795965, -0.1764041, -0.25483686, -0.26501107, -0.29615897, -0.1761473] -gra[10][12][11] = [0.021941906, -0.008812627, -0.022413656, -0.032252528, 0.04717913, -0.0048893415, -0.0111137815, -0.01108202] -gra[10][12][12] = [-0.3153644, -0.17907926, -0.2795965, -0.1764041, -0.25483686, -0.26501107, -0.29615897, -0.1761473] -gra[10][12][13] = [0.03465397, 0.09053512, 0.070818484, -0.04267802, 0.061774462, -0.023255207, -0.034763303, -0.06168799] -gra[10][12][14] = [0.023088023, 0.07583694, -0.006512917, -0.050077446, -0.013676573, 0.015877765, 0.017984802, 0.003852799] -gra[10][13][10] = [-0.26699868, -0.17984349, -0.26132643, -0.08672568, -0.21775608, -0.21154135, -0.2510417, -0.2465411] -gra[10][13][11] = [0.026880646, -0.007880481, 0.0059093176, -0.032035075, 0.0749675, -0.019367468, -0.025300737, -0.0133296205] -gra[10][13][12] = [0.03448535, -0.0041715456, 0.028034342, -0.05057187, 0.053446256, 0.008786059, -0.033961922, -0.016927706] -gra[10][13][13] = [-0.26699868, -0.17984349, -0.26132643, -0.08672568, -0.21775608, -0.21154135, -0.2510417, -0.2465411] -gra[10][13][14] = [0.014584247, 0.035479832, -4.2649265E-4, -0.046772767, -0.08912952, -0.008224874, 0.024729319, -0.006639992] -gra[10][14][10] = [0.24545878, -0.13058239, -0.012254239, -0.43756452] -gra[10][14][11] = [-0.036215328, -0.022168951, -9.78672E-4, -0.020904908] -gra[10][14][12] = [-0.05016438, -0.018123059, -0.0023689207, -0.024299968] -gra[10][14][13] = [-0.033437256, -0.018123059, -9.786718E-4, -0.0047152033] -gra[10][14][14] = [0.24545878, -0.13058239, -0.012254239, -0.43756452] -gra[11][0][0] = [-0.12389924] -gra[11][0][1] = [0.11250799] -gra[11][0][2] = [-0.020803642] -gra[11][0][3] = [-0.015740056] -gra[11][0][4] = [-0.015740056] -gra[11][0][5] = [0.009709348] -gra[11][0][6] = [-0.011211409] -gra[11][0][7] = [0.0140898395] -gra[11][0][8] = [0.10553579] -gra[11][0][9] = [0.004992515] -gra[11][0][10] = [0.06241366] -gra[11][0][11] = [-0.12389924] -gra[11][1][0] = [0.0022879262, -0.001958814, 6.207379E-4, 4.4457944E-11, -0.0021720084, 9.538275E-4] -gra[11][1][1] = [-0.0980223, -0.1556874, -0.17940705, -0.191914, -0.15800656, -0.2076993] -gra[11][1][2] = [0.070815764, -0.04019269, 0.061212253, -0.021304604, -0.008943601, -0.046964385] -gra[11][1][3] = [0.03480445, -0.040399235, 0.009230967, -0.019397447, -0.010305206, -0.06565809] -gra[11][1][4] = [0.043829545, -0.040399235, 0.016051337, -0.019397447, -0.010305206, -0.065682895] -gra[11][1][5] = [0.048783593, -0.030501723, 0.049452126, -0.014411522, -0.010305206, -0.062384807] -gra[11][1][6] = [-0.011211409, -0.0024341857, -0.0018631071, -0.018473925, 0.002059937, -0.002325139] -gra[11][1][7] = [0.098927535, -0.030079987, 0.05705068, -0.027755124, -0.0062002833, -0.072541356] -gra[11][1][8] = [0.112763375, -3.4384023E-11, -0.029062023, -0.009225717, -0.003922395, -0.0036619226] -gra[11][1][9] = [0.074122116, -0.03479038, 0.0171996, -0.019397447, -0.007929913, -0.04117297] -gra[11][1][10] = [0.070592314, 0.05356895, 0.025417577, 0.0056302026, 0.005816114, -0.03663111] -gra[11][1][11] = [-0.0980223, -0.1556874, -0.17940705, -0.191914, -0.15800656, -0.2076993] -gra[11][2][0] = [-3.8481143E-5, 0.0, 6.4378086E-4, 0.0042653317, -0.00452922, 0.0031306578, 2.969677E-4, -0.0035838732, 0.0012653338, 0.004467465, -0.008016303] -gra[11][2][1] = [0.030020196, -3.7906157E-11, -0.047747806, -0.0041412255, -0.02294093, -0.0028272104, -0.0042415615, 0.035186574, 0.0038279954, 0.0010309231, -0.03033242] -gra[11][2][2] = [-0.16756175, -0.15805623, -0.17044538, -0.14639679, -0.26190105, -0.1729358, -0.2613429, -0.26960972, -0.21621762, -0.14156401, -0.25597513] -gra[11][2][3] = [-0.0045980383, -0.027203228, -0.05041236, 0.0087688975, -0.02118981, 0.0, 0.0055504087, -0.00686435, -0.0013193127, 0.0010214404, -0.13410753] -gra[11][2][4] = [-0.008624356, -0.031413544, -0.05190116, 0.011287816, -0.0015978473, -0.0016386209, 0.00510925, -0.009859847, -0.0013193127, 0.009945178, -0.16727719] -gra[11][2][5] = [-0.016839283, -0.027814709, -0.045556985, 0.01080478, 0.008764084, 0.0049859243, 0.024772864, -0.014020145, -0.0065963734, 0.0048753386, -0.160696] -gra[11][2][6] = [0.010826467, -0.005398127, -0.042189464, -0.009502113, 0.020070488, -0.015343344, -0.007742171, -0.015615815, 0.0, -2.2300222E-11, -0.08992048] -gra[11][2][7] = [-0.0058104573, -0.022992909, -0.0093545215, 0.011303109, 0.029116679, -0.0013196387, 0.022071034, 0.008007627, -0.009063331, 9.1650593E-4, -0.16666228] -gra[11][2][8] = [0.0028593205, -0.033843383, 0.10937937, -0.0012483946, 0.045643046, -0.007926542, -0.049703237, -0.029244697, 0.002475134, 8.743692E-4, -0.048316423] -gra[11][2][9] = [-0.008840187, -0.028816238, -0.04115401, 0.004407729, 0.06700909, -6.163665E-11, 0.03132334, -0.008266031, -0.0051215123, 9.1650593E-4, -0.14523569] -gra[11][2][10] = [-0.012713343, 0.06271266, 0.03047761, -0.0023483417, 0.085967824, 0.013169683, 7.657199E-4, -0.039369643, 0.0349213, 0.0033671232, -0.056439284] -gra[11][2][11] = [-0.16756175, -0.15805623, -0.17044538, -0.14639679, -0.26190105, -0.1729358, -0.2613429, -0.26960972, -0.21621762, -0.14156401, -0.25597513] -gra[11][3][0] = [-3.8481143E-5, 0.0, -2.546208E-4, 6.207379E-4, 0.0, 0.0031306578, 2.969677E-4, -0.0035838732, 0.0012653338, 0.0020189893, -0.0059786467] -gra[11][3][1] = [0.030020196, 0.0, -0.0709532, -0.010353064, -0.04391478, -0.004779683, -0.03789397, 0.079702035, 0.0038279954, -0.0024918886, -0.076348856] -gra[11][3][2] = [-0.010050564, -0.020074947, -0.09627534, 0.0, -0.025120389, -0.010792062, -0.009571605, 0.0045674103, -0.005357419, 0.004071039, -0.049354907] -gra[11][3][3] = [-0.17200947, -0.19767262, -0.25528848, -0.20228212, -0.3577328, -0.19228561, -0.21679747, -0.40292573, -0.21605387, -0.17789312, -0.2651151] -gra[11][3][4] = [-0.0076634865, -0.027203228, -0.007962941, 0.017747963, -0.030055411, -0.0016386209, -0.02221351, -0.0063553033, -0.004338989, 0.0031181932, 0.045642] -gra[11][3][5] = [-0.016839283, -0.027814709, -0.0020009093, 0.017264927, 0.008308632, 0.0049859243, -0.0017681323, -0.012113207, -0.01052086, 0.0031181932, 0.036681686] -gra[11][3][6] = [-9.563443E-4, -0.00329998, -0.030258507, -0.0057468074, 0.0146678975, -0.018335417, -0.0016823349, -0.010240156, 0.0017409262, 8.040292E-12, -0.0677805] -gra[11][3][7] = [-0.007663487, -0.022992909, 0.002025697, 0.014275422, 0.006037254, -0.0013196387, -0.00424268, 0.011656271, -0.011340797, 0.0031181932, 0.021348575] -gra[11][3][8] = [0.0, -0.028557673, 0.111348465, -0.0012483946, 0.043581713, -0.007926542, -0.057652134, -0.008132312, 0.002475134, 2.4045661E-11, -0.08010083] -gra[11][3][9] = [-0.008840187, -0.027703306, -0.01734548, 0.008724481, 0.019094173, 3.0514854E-4, -0.008290166, 0.013094053, -0.0051215123, 0.007877499, 0.033490654] -gra[11][3][10] = [-0.012713343, 0.055398878, 0.024536688, -0.0044680266, 0.016944142, 0.01225795, 0.009501182, -0.013563797, 0.0349213, -1.8246614E-11, 8.919211E-4] -gra[11][3][11] = [-0.17200947, -0.19767262, -0.25528848, -0.20228212, -0.3577328, -0.19228561, -0.21679747, -0.40292573, -0.21605387, -0.17789312, -0.2651151] -gra[11][4][0] = [-3.8481143E-5, 0.0, 0.002269707, 6.207379E-4, 0.0, 0.0031306578, 2.969677E-4, -0.0035838732, 0.0012653338, 0.004467465, -0.0059786467] -gra[11][4][1] = [0.030020196, 0.0, -0.0709532, -0.010353064, -0.04391478, -0.004779683, -0.03789397, 0.079702035, 0.0038279954, -0.0024918886, -0.076348856] -gra[11][4][2] = [-0.010050564, -0.020074947, -0.11560663, 0.0, -0.027456252, -0.014940629, -0.009571605, 0.007836706, -0.0046069673, 0.0031174747, -0.05364394] -gra[11][4][3] = [-0.013581293, -0.023612332, -0.12310233, 0.0, -0.01927166, -0.008297132, -0.0065214084, -2.5217576E-4, -0.009064015, 0.0025277506, -0.040145326] -gra[11][4][4] = [-0.16979279, -0.20000182, -0.25528848, -0.20228212, -0.3577328, -0.19228561, -0.21053797, -0.39981967, -0.21605387, -0.17789312, -0.3072443] -gra[11][4][5] = [-0.016839283, -0.02360439, -0.0024904609, 0.017264927, -0.012885826, 0.0019459366, -0.0053175483, -0.010515601, -0.008362633, 0.002235441, 0.05048409] -gra[11][4][6] = [1.1364407E-11, -0.004874793, -0.030258507, -0.0070572207, 0.0146678975, -0.018335417, -0.0016823349, -0.010240156, 0.0, -0.0012154061, -0.06982803] -gra[11][4][7] = [-0.007663487, -0.022992909, 0.002025697, 0.014275422, 0.0065385774, -0.0013196387, -0.00424268, 0.011656271, -0.011340797, 0.0035397436, 0.017222213] -gra[11][4][8] = [-0.0030642115, -0.028557673, 0.111348465, -0.0012483946, 0.043581713, -0.007926542, -0.057652134, -0.008132312, 0.0024751339, -5.004493E-4, -0.08010083] -gra[11][4][9] = [-0.008840187, -0.027703306, -0.01734548, 0.008724481, 0.020301398, 0.0, -0.008290166, 0.013094053, -0.0051215123, 0.00829905, 0.029364292] -gra[11][4][10] = [-0.009854687, 0.055398878, 0.024536688, -0.0067656627, 0.016944142, 0.01225795, 0.007954158, -0.013563797, 0.0349213, -1.8246614E-11, -0.0039156247] -gra[11][4][11] = [-0.16979279, -0.20000182, -0.25528848, -0.20228212, -0.3577328, -0.19228561, -0.21053797, -0.39981967, -0.21605387, -0.17789312, -0.3072443] -gra[11][5][0] = [-3.8481143E-5, -0.0019296022, 0.002269707, -7.5689424E-4, 0.0, -0.0023391629, 2.969678E-4, -0.0035838732, 0.0012653338, 0.004467465, -0.0059786467] -gra[11][5][1] = [0.030020196, 0.0, -0.07765716, -0.010353064, -0.035776734, -0.004779683, -0.03315192, 0.079702035, 0.0038279954, -0.0024918886, -0.08752008] -gra[11][5][2] = [-0.010050564, -0.020074947, -0.11632947, 0.0, -0.022061262, -0.014940629, -0.009571605, 0.004819586, -0.005357419, 0.004071039, -0.045673024] -gra[11][5][3] = [-0.013603179, -0.023146072, -0.1193105, 0.0, -0.016212534, -0.012445698, -0.0065214084, -2.5217576E-4, -0.009064015, 0.004071039, -0.036929708] -gra[11][5][4] = [-0.011138814, -0.024628043, -0.124958254, 0.0, -0.013876671, -0.006897951, -0.0065214084, 0.0022252216, -0.009064015, 0.004071039, -0.0337255] -gra[11][5][5] = [-0.16979279, -0.19329701, -0.26871237, -0.17054062, -0.29517272, -0.19228561, -0.20988953, -0.3716687, -0.21605387, -0.17789312, -0.2935722] -gra[11][5][6] = [-6.359549E-4, -0.00329998, -0.029067473, -0.0057468074, 0.0146678975, -0.018335417, -7.880372E-4, -0.013210811, 0.0011668268, 3.0340515E-11, -0.06581834] -gra[11][5][7] = [-0.007663487, -0.022992909, 0.0034457669, 0.014275422, -2.6907446E-4, -0.0037362042, -0.003336246, 0.011656271, -0.011340797, 0.0035397436, 0.004515754] -gra[11][5][8] = [0.0, -0.021353321, 0.111348465, -0.0012483946, 0.030117506, -0.007926542, -0.06296009, 9.024069E-4, 0.002475134, 2.4045661E-11, -0.10057392] -gra[11][5][9] = [-0.008840187, -0.027703306, -0.015925407, 0.02083089, 0.00789333, 0.0, -0.00805038, 0.013094053, -0.0051215123, 0.00829905, 0.025783729] -gra[11][5][10] = [-0.012713343, 0.055398878, 0.024536688, -0.0067656627, 0.014414227, 0.007067173, 0.0078884885, -0.013563797, 0.0349213, -1.8246614E-11, 0.0035325633] -gra[11][5][11] = [-0.16979279, -0.19329701, -0.26871237, -0.17054062, -0.29517272, -0.19228561, -0.20988953, -0.3716687, -0.21605387, -0.17789312, -0.2935722] -gra[11][6][0] = [6.4378086E-4, -1.1624451E-11] -gra[11][6][1] = [-0.071286656, 0.030801235] -gra[11][6][2] = [-0.1217342, 0.0070741083] -gra[11][6][3] = [-0.13029547, 0.0013777877] -gra[11][6][4] = [-0.13029547, -0.0012991808] -gra[11][6][5] = [-0.1440661, -0.0012286699] -gra[11][6][6] = [-0.40509716, -0.22688024] -gra[11][6][7] = [0.0058593405, -0.016482558] -gra[11][6][8] = [0.084555104, -0.004157832] -gra[11][6][9] = [-0.007966436, 0.011194] -gra[11][6][10] = [0.06020448, -0.0011195537] -gra[11][6][11] = [-0.40509716, -0.22688024] -gra[11][7][0] = [-3.8481143E-5, 0.0, 6.4378086E-4, -0.0029844372, 0.0, 7.4807646E-11, 2.969678E-4, -0.0035838732, 0.0012653338, 0.004467465, -0.004436887] -gra[11][7][1] = [0.030020196, 0.0, -0.06642654, -0.006211838, -0.02472724, -0.004779683, -0.009418331, 0.043953314, 0.005423102, 1.7403252E-4, -0.06141561] -gra[11][7][2] = [-0.012064191, -0.020074947, -0.11770639, 0.0, -0.02700362, -0.01267732, -0.009571605, 0.0052266098, -0.007392783, 0.0015191694, -0.035501458] -gra[11][7][3] = [-0.0076743215, -0.035226453, -0.12118573, 0.008403905, -0.016524691, -0.013135118, -0.0065214084, 0.0014358414, -0.009064015, 0.0015191694, -0.0239101] -gra[11][7][4] = [-0.0060856016, -0.036242165, -0.12118573, 0.008403905, -0.016524691, -0.014724767, -0.0065214084, 0.0039132386, -0.009064015, 0.0015191694, -0.0239101] -gra[11][7][5] = [-0.0029837268, -0.035226453, -0.13455348, 0.008403905, -0.017453253, -0.008297132, -0.009280194, 0.0016880172, -0.009064015, 0.005695792, -0.025141122] -gra[11][7][6] = [-0.0015405889, -0.0022070524, -0.06335769, 0.0047623203, 0.0, 0.003376759, 0.0, 0.005881849, -6.80316E-4, 0.0021720878, -0.011135231] -gra[11][7][7] = [-0.17569938, -0.20042084, -0.26826409, -0.1163828, -0.12838514, -0.16844898, -0.2518397, -0.1839747, -0.23677793, -0.15902653, -0.32666808] -gra[11][7][8] = [0.0, -0.023188654, 0.110703185, 0.0014310319, 0.050056085, -0.007926542, -0.06307818, -0.012948758, 0.0024751343, 2.4045661E-11, -0.09486357] -gra[11][7][9] = [-0.009591804, -0.027703306, -0.025527036, 6.3787866E-4, 0.09388393, 2.4217142E-11, 0.048461273, -0.0010446829, -0.0051215123, 0.0059014526, -0.068173446] -gra[11][7][10] = [-0.017215462, 0.05885046, 0.053072125, -0.0054148408, 0.07146499, 0.004019258, 0.012924673, -0.018397888, 0.02149223, -0.0018405669, -0.0021806522] -gra[11][7][11] = [-0.17569938, -0.20042084, -0.26826409, -0.1163828, -0.12838514, -0.16844898, -0.2518397, -0.1839747, -0.23677793, -0.15902653, -0.32666808] -gra[11][8][0] = [0.008247588, -0.0055409744, 6.207379E-4, 4.4457944E-11, -0.0021720084, 9.538275E-4] -gra[11][8][1] = [-0.003154425, 0.0, -9.987416E-4, -0.0039049454, 0.005938728, 0.029147219] -gra[11][8][2] = [-0.10532865, -0.020074947, -0.010692279, -0.01267732, 0.006616043, -0.0041057393] -gra[11][8][3] = [-0.12466324, -0.017386114, -0.010692279, -0.012445698, 0.0044185594, -0.009989234] -gra[11][8][4] = [-0.1122263, -0.018401826, -0.010692279, -0.014724767, 0.0044185594, -0.009989234] -gra[11][8][5] = [-0.13072634, -0.017386114, -0.010692279, -0.008297132, 0.0044185594, -0.009989234] -gra[11][8][6] = [-0.07253664, -0.001275445, 0.0, -0.024378616, -0.0017974195, -0.0031688735] -gra[11][8][7] = [-0.11197672, -0.030472117, -0.011541045, -0.008694231, 0.0066399304, -0.013961719] -gra[11][8][8] = [-0.28742653, -0.13806987, -0.1985154, -0.18718107, -0.14203808, -0.16507426] -gra[11][8][9] = [0.057564765, -0.03289177, 0.025465125, -0.016538091, -0.011358074, -0.04761328] -gra[11][8][10] = [0.12816171, 0.050723344, 0.060807187, 0.0056302026, 0.018332137, -0.008218465] -gra[11][8][11] = [-0.28742653, -0.13806987, -0.1985154, -0.18718107, -0.14203808, -0.16507426] -gra[11][9][0] = [0.0010204252, 0.0, 6.4378086E-4, 0.0078705065, -0.0018813149, 7.4807646E-11, 2.969678E-4, -0.0035838732, 5.0569617E-4, 0.004467465, -0.0059786467] -gra[11][9][1] = [0.028161941, 0.0, -0.06711676, -0.010353064, -0.0019592715, -0.004779683, -0.014528066, 0.042927664, 0.0038279954, -0.017432136, -0.0529898] -gra[11][9][2] = [-0.010050564, -0.020074947, -0.11746254, 0.0, -0.018879909, -0.014940629, -0.0045123687, -0.0017202278, -0.005357419, 0.0067355065, -0.048507597] -gra[11][9][3] = [-0.0127275335, -0.027161064, -0.120398626, 0.0010881304, -0.016212534, -0.012445698, -0.00331613, -2.5217576E-4, -0.009064015, 0.0067355065, -0.0414674] -gra[11][9][4] = [-0.011138814, -0.028176775, -0.120398626, 0.0010881304, -0.016212534, -0.014724767, -0.00331613, 0.0022252216, -0.009064015, 0.0067355065, -0.0414674] -gra[11][9][5] = [-0.0116145555, -0.027161064, -0.1337664, 0.0010881305, -0.011718331, -0.008297132, -0.00331613, 0.0, -0.009064015, 0.010838056, -0.04269842] -gra[11][9][6] = [-0.001125994, -0.001275445, -0.06587058, 0.002083107, -0.0033310815, -0.0025067397, 0.0, 0.0067280075, 0.004428481, 0.0, -0.0050727697] -gra[11][9][7] = [-0.016229458, 0.0032243507, -0.11327399, -0.0016975328, -0.020984316, -0.0064118747, -2.3427873E-4, 0.004819586, -0.0042669233, 0.006619178, -0.03747481] -gra[11][9][8] = [-0.0030206593, -6.7004E-11, -0.06808654, -0.0041412255, 5.461057E-4, -0.0019524727, -0.005559218, 0.024523886, -1.2932688E-10, -0.012585728, -0.024195785] -gra[11][9][9] = [-0.17914513, -0.15761071, -0.18235621, -0.111305825, -0.2861288, -0.19290504, -0.27690607, -0.2174945, -0.20727476, -0.15304866, -0.2752755] -gra[11][9][10] = [-0.03073125, 0.055398878, 0.019012246, -0.004389991, 0.025585605, 0.006306789, 0.004576511, -0.026553776, 0.023517668, 0.0018559321, 0.0010926872] -gra[11][9][11] = [-0.17914513, -0.15761071, -0.18235621, -0.111305825, -0.2861288, -0.19290504, -0.27690607, -0.2174945, -0.20727476, -0.15304866, -0.2752755] -gra[11][10][0] = [0.002703113, 2.4087886E-4, 1.3065474E-10, 6.20738E-4, 0.005225119, 0.002607383, 5.579681E-4] -gra[11][10][1] = [-0.0060856375, -0.004854968, -0.0039049454, 0.0, -0.022862324, -0.026488628, 0.00603679] -gra[11][10][2] = [-0.12743556, -0.060402133, -0.015324981, -0.0019249346, -9.88245E-11, -0.009251966, -0.008425626] -gra[11][10][3] = [-0.1443296, -0.047476254, -0.014137894, -0.0060540326, 0.0, -0.012429759, -0.0074963025] -gra[11][10][4] = [-0.1443296, -0.048491962, -0.016416963, -0.009311951, 0.0, -0.012516822, -0.0059075826] -gra[11][10][5] = [-0.15567769, -0.051322438, -0.009989329, -0.0060540326, 2.0781049E-10, -0.011479491, -0.004819333] -gra[11][10][6] = [-0.05157347, -0.001275445, 0.0031626287, -8.813711E-12, -0.011463992, -0.0019164708, -0.001125994] -gra[11][10][7] = [-0.13018884, -0.0692743, -0.005840762, -0.004201497, -0.0015797014, -0.0077053998, -0.012563205] -gra[11][10][8] = [-0.05328215, -6.7004E-11, -0.0039049454, 0.0011713473, -0.011135569, -0.020431118, 0.0] -gra[11][10][9] = [-0.13123956, -0.046941087, -0.019473545, -0.0025065367, 6.714482E-4, -0.009728871, -0.009844616] -gra[11][10][10] = [-0.003632035, -0.03903123, -0.12923068, -0.17222962, -0.2806601, -0.24402468, -0.1653744] -gra[11][10][11] = [-0.003632035, -0.03903123, -0.12923068, -0.17222962, -0.2806601, -0.24402468, -0.1653744] -gra[11][12][11] = [-0.100144096, -0.09158604, 0.0055445293, -0.11755938, -0.16096544, -0.10694665, -0.3415111, -0.27591932, -0.08365657, -0.10801351, -0.113322936] -gra[11][12][12] = [-0.100144096, -0.09158604, 0.0055445293, -0.11755938, -0.16096544, -0.10694665, -0.3415111, -0.27591932, -0.08365657, -0.10801351, -0.113322936] -gra[11][12][13] = [0.056215376, -0.01025449, 0.11834774, 0.07818649, -0.021850904, -0.089146726, -0.006384445, 0.068023905, -0.0016438005, 0.0012229871, -0.0060240654] -gra[11][12][14] = [0.07236886, 0.05657126, -0.059863858, 0.0061641093, 0.019986097, 0.03692759, 0.120455004, 0.0302211, 9.96112E-11, -2.2505768E-11, -0.06410605] -gra[11][13][11] = [-0.22570372, -0.14725454, -0.08456526, -0.24363197, -0.23292705, -0.24921647, -0.31250927, -0.29759613, -0.10658293, -0.13203514, -0.21545014] -gra[11][13][12] = [0.021744007, 0.03055122, 0.16523585, 0.059659015, 0.00602818, -0.030682772, 0.0113601005, 0.038531862, -1.4217425E-4, -0.004681904, -0.00916585] -gra[11][13][13] = [-0.22570372, -0.14725454, -0.08456526, -0.24363197, -0.23292705, -0.24921647, -0.31250927, -0.29759613, -0.10658293, -0.13203514, -0.21545014] -gra[11][13][14] = [0.040641047, 0.060274042, -0.101044156, 0.018038081, -0.0021256413, 0.021744264, 0.08580291, 0.011856999, 9.96112E-11, -0.0013691243, -0.067090854] -gra[11][14][11] = [0.46145654, -0.37053853, -0.2827138, -0.120763496, -0.23904912, -0.11392724, -0.24430634, -0.15843105] -gra[11][14][12] = [-0.04333491, 0.09871555, 0.08215656, 0.070761316, -0.027274026, -0.0064464738, 0.03838419, -0.039588906] -gra[11][14][13] = [-0.042344883, 0.027202541, 0.02599654, 0.071606465, -0.024843121, -0.008798459, 0.05347822, -0.042369526] -gra[11][14][14] = [0.46145654, -0.37053853, -0.2827138, -0.120763496, -0.23904912, -0.11392724, -0.24430634, -0.15843105] -gra[12][0][0] = [-0.10515191] -gra[12][0][1] = [0.13606499] -gra[12][0][2] = [-0.0035667932] -gra[12][0][3] = [0.005201453] -gra[12][0][4] = [0.005201453] -gra[12][0][5] = [0.02007929] -gra[12][0][6] = [-0.010218365] -gra[12][0][7] = [0.03649012] -gra[12][0][8] = [0.062039126] -gra[12][0][9] = [-0.028238326] -gra[12][0][10] = [0.052713778] -gra[12][0][11] = [-0.039478898] -gra[12][0][12] = [-0.10515191] -gra[12][1][0] = [0.0022879262, -0.001958814, 6.20738E-4, 4.4457944E-11, -0.0021720084, 9.538275E-4] -gra[12][1][1] = [-0.07858301, -0.17721513, -0.19805442, -0.17806304, -0.16245575, -0.20236821] -gra[12][1][2] = [0.088052616, -0.04784693, 0.019412948, -0.026443, -0.0077710547, -0.046964385] -gra[12][1][3] = [0.055745967, -0.050158635, -0.01847103, -0.019397447, -0.00913266, -0.06744409] -gra[12][1][4] = [0.064771056, -0.050158635, -0.011650659, -0.019397447, -0.00913266, -0.0674689] -gra[12][1][5] = [0.059153542, -0.03625734, 0.019686403, -0.019397447, -0.00913266, -0.051904615] -gra[12][1][6] = [-0.010218365, -0.0024341857, 0.0038837004, -0.016613597, 0.002059937, -0.003209465] -gra[12][1][7] = [0.12132782, -0.03562906, 0.010628009, -0.027755124, -0.005027737, -0.072541356] -gra[12][1][8] = [0.06926671, 3.8416823E-5, -0.033108108, -0.019686462, -8.5449056E-4, -0.0036619226] -gra[12][1][9] = [0.040891282, -0.03618892, -0.022440419, -0.019397447, -0.007967199, -0.046652183] -gra[12][1][10] = [0.07534326, 0.06808784, 0.04575908, -0.0033964338, 0.005816114, -0.03659642] -gra[12][1][11] = [0.049664095, -0.032417957, 0.040280573, -0.025225509, -0.026482048, -0.044036984] -gra[12][1][12] = [-0.07858301, -0.17721513, -0.19805442, -0.17806304, -0.16245575, -0.20236821] -gra[12][2][0] = [-3.8481143E-5, 0.0, 6.4378075E-4, 0.0042653317, -0.009577542, 0.0031306578, 2.969677E-4, 1.1202662E-4, -6.5726263E-4, 0.0015309223, -0.008016303] -gra[12][2][1] = [-5.13921E-4, -3.7906157E-11, -0.051293716, -0.0041412255, -0.020474708, -0.0028272104, -0.0042415615, 0.035186574, 0.0019214812, 0.0035228117, -0.034274463] -gra[12][2][2] = [-0.1648293, -0.17958395, -0.15100609, -0.16504414, -0.26511794, -0.15908478, -0.27147496, -0.28317097, -0.20314461, -0.13655183, -0.25064403] -gra[12][2][3] = [-0.0016788694, -0.03485746, -0.029470855, -0.018933097, -0.02044635, 0.0, 0.0066471035, -0.0063043977, -0.002073156, -0.0052225264, -0.13589352] -gra[12][2][4] = [-0.0057051876, -0.041172937, -0.030959653, -0.016414179, -8.543874E-4, -0.0016386209, 0.008664845, -0.009299895, -0.002073156, 0.003701211, -0.16906321] -gra[12][2][5] = [-0.004744318, -0.033570327, -0.035187043, -0.018960936, 0.009507546, 0.0, 0.01801002, -0.013460195, -0.0052353498, -0.0013686286, -0.1502158] -gra[12][2][6] = [0.010826467, -0.005398127, -0.04119642, -0.003755305, 0.019529367, -0.013483018, -0.007742171, -0.016999522, 0.0, 0.0028889112, -0.09080481] -gra[12][2][7] = [-0.002891289, -0.028541982, 0.013045758, -0.03511956, 0.029860139, -0.0013196387, 0.024343483, 0.006281326, -0.0067974986, -0.0050971014, -0.16666228] -gra[12][2][8] = [0.0028593205, -0.033804964, 0.065882705, -0.0052944794, 0.045643046, -0.018387286, -0.05146163, -0.029244697, 0.002475134, 8.743692E-4, -0.048316423] -gra[12][2][9] = [-0.006218316, -0.030214773, -0.074384846, -0.035232294, 0.06821702, -6.163665E-11, 0.031392615, -0.0077060787, -0.0028556797, -0.0053274613, -0.1507149] -gra[12][2][10] = [-0.023877224, 0.07723155, 0.025044672, 0.017511534, 0.088458255, 0.004143046, 0.0061719525, -0.040925086, 0.024282468, 0.0033671234, -0.073608294] -gra[12][2][11] = [-0.004744318, -0.025330877, -0.10397213, -0.023069104, 0.08292447, 0.0076809367, 0.025465066, 0.0034794435, -0.0033134911, -0.008031685, -0.09042414] -gra[12][2][12] = [-0.1648293, -0.17958395, -0.15100609, -0.16504414, -0.26511794, -0.15908478, -0.27147496, -0.28317097, -0.20314461, -0.13655183, -0.25064403] -gra[12][3][0] = [-3.8481143E-5, 0.0, -2.546209E-4, 6.20738E-4, -0.0050483216, 0.0031306578, 2.969677E-4, 1.1202659E-4, -6.5726263E-4, -9.175534E-4, -0.0059786467] -gra[12][3][1] = [-5.13921E-4, 0.0, -0.0740106, -0.010353064, -0.04144856, -0.004779683, -0.03789397, 0.079702035, 0.0019214812, 0.0, -0.0802909] -gra[12][3][2] = [-0.010050564, -0.027438035, -0.06738606, 0.0, -0.025120389, -0.015896093, -0.009571605, 0.0045674103, 0.0011093304, 0.00255187, -0.054485943] -gra[12][3][3] = [-0.16927701, -0.21920037, -0.23584919, -0.22092949, -0.36094978, -0.17843461, -0.2269295, -0.41648698, -0.20298086, -0.17288092, -0.25978398] -gra[12][3][4] = [-0.004744318, -0.03485746, 0.012978567, -0.009954032, -0.029311951, -0.0016386209, -0.018657913, -0.005795351, -0.0050928323, -0.0031257737, 0.043856] -gra[12][3][5] = [-0.004744318, -0.033570327, 0.008369034, -0.012500789, 0.009052092, 0.0, -0.008530973, -0.011553255, -0.009159835, -0.0031257737, 0.04716188] -gra[12][3][6] = [-9.563443E-4, -0.00329998, -0.029265463, 0.0, 0.014126777, -0.016475089, -0.0016823349, -0.011623862, 0.0017409262, 0.0028889112, -0.06866483] -gra[12][3][7] = [-0.0047443183, -0.028541982, 0.024425976, -0.032147244, 0.006780714, -0.0013196387, -0.0019702304, 0.009929972, -0.009074964, -0.0028954144, 0.021348575] -gra[12][3][8] = [0.0, -0.028519256, 0.06785178, -0.0052944794, 0.043581713, -0.018387286, -0.059410527, -0.008132312, 0.002475134, 2.4045661E-11, -0.08010083] -gra[12][3][9] = [-0.006218316, -0.029101841, -0.05057632, -0.030915538, 0.020302098, 3.0514854E-4, -0.008220887, 0.013654005, -0.0028556797, 0.0016335323, 0.028011441] -gra[12][3][10] = [-0.022339152, 0.06991776, 0.01910374, 0.015391848, 0.019434562, 0.0032313145, 0.014907414, -0.015119242, 0.024282468, 1.302987E-10, -0.01627709] -gra[12][3][11] = [-0.0073551796, -0.025330877, -0.105846174, -0.032042608, 0.014669917, 0.0076809367, -0.017299226, 0.01757557, 1.450358E-4, -0.0010706913, 0.02720009] -gra[12][3][12] = [-0.16927701, -0.21920037, -0.23584919, -0.22092949, -0.36094978, -0.17843461, -0.2269295, -0.41648698, -0.20298086, -0.17288092, -0.25978398] -gra[12][4][0] = [-3.8481143E-5, 0.0, 0.002269707, 6.20738E-4, -0.0050483216, 0.0031306578, 2.969677E-4, 1.1202659E-4, -6.5726263E-4, 0.0015309223, -0.0059786467] -gra[12][4][1] = [-5.13921E-4, 0.0, -0.0740106, -0.010353064, -0.04144856, -0.004779683, -0.03789397, 0.079702035, 0.0019214812, 0.0, -0.0802909] -gra[12][4][2] = [-0.010050564, -0.027438035, -0.08671735, 0.0, -0.027456252, -0.02211894, -0.009571605, 0.007836706, 0.001859782, 0.0015983053, -0.05877498] -gra[12][4][3] = [-0.013581293, -0.027913438, -0.10705456, 0.0, -0.01927166, -0.010371415, -0.0065214084, -2.5217576E-4, -0.0047528488, 0.0010085813, -0.038101066] -gra[12][4][4] = [-0.16706033, -0.22152957, -0.23584919, -0.22092949, -0.36094978, -0.17843461, -0.22067, -0.41338092, -0.20298086, -0.17288092, -0.3019132] -gra[12][4][5] = [-0.004744318, -0.02725485, 0.007879483, -0.012500789, -0.012142366, -0.0030399878, -0.01208039, -0.009955649, -0.0070016095, -0.004008526, 0.060964286] -gra[12][4][6] = [1.1364407E-11, -0.004874793, -0.029265463, -0.0013104129, 0.014126777, -0.016475089, -0.0016823349, -0.011623862, 0.0, 0.0016735051, -0.07071236] -gra[12][4][7] = [-0.0047443183, -0.028541982, 0.024425976, -0.032147244, 0.0072820373, -0.0013196387, -0.0019702304, 0.009929972, -0.009074964, -0.002473864, 0.017222213] -gra[12][4][8] = [-0.0030642115, -0.028519256, 0.06785178, -0.0052944794, 0.043581713, -0.018387286, -0.059410527, -0.008132312, 0.0024751339, -5.004493E-4, -0.08010083] -gra[12][4][9] = [-0.006218316, -0.029101841, -0.05057632, -0.030915538, 0.021509323, 0.0, -0.008220887, 0.013654005, -0.0028556797, 0.0020550827, 0.023885079] -gra[12][4][10] = [-0.019480497, 0.06991776, 0.01910374, 0.013094213, 0.019434562, 0.0032313145, 0.01336039, -0.015119242, 0.024282468, 1.302987E-10, -0.021084636] -gra[12][4][11] = [-0.0073551796, -0.025330877, -0.105846174, -0.032042608, 0.013415008, 0.0076809367, -0.017299226, 0.01757557, 1.450358E-4, 0.009044054, 0.023073727] -gra[12][4][12] = [-0.16706033, -0.22152957, -0.23584919, -0.22092949, -0.36094978, -0.17843461, -0.22067, -0.41338092, -0.20298086, -0.17288092, -0.3019132] -gra[12][5][0] = [-3.8481143E-5, -0.0019296022, 0.002269707, -7.568941E-4, -0.0050483216, -0.0023391629, 2.969678E-4, 1.1202659E-4, -6.5726263E-4, 0.0015309223, -0.0059786467] -gra[12][5][1] = [-5.13921E-4, 0.0, -0.08071456, -0.010353064, -0.03331051, -0.004779683, -0.03315192, 0.079702035, 0.0019214812, 0.0, -0.09146212] -gra[12][5][2] = [-0.010050564, -0.027438035, -0.08744019, 0.0, -0.022061262, -0.02211894, -0.009571605, 0.004819586, 0.0011093304, 0.00255187, -0.050804067] -gra[12][5][3] = [-0.013603179, -0.027447177, -0.10326273, 0.0, -0.016212534, -0.016594263, -0.0065214084, -2.5217576E-4, -0.0047528488, 0.00255187, -0.034885447] -gra[12][5][4] = [-0.011138814, -0.02892915, -0.10891048, 0.0, -0.013876671, -0.008972234, -0.0065214084, 0.0022252216, -0.0047528488, 0.00255187, -0.03272793] -gra[12][5][5] = [-0.16706033, -0.21482477, -0.24927308, -0.18918799, -0.29838967, -0.17843461, -0.22002156, -0.38522995, -0.20298086, -0.17288092, -0.28824112] -gra[12][5][6] = [-6.359549E-4, -0.00329998, -0.02807443, 0.0, 0.014126777, -0.016475089, -7.880372E-4, -0.013210811, 0.0011668268, 0.0028889112, -0.066702664] -gra[12][5][7] = [-0.0047443183, -0.028541982, 0.025846047, -0.032147244, 4.7438545E-4, -0.0037362042, -0.0010637965, 0.009929972, -0.009074964, -0.002473864, 0.004515754] -gra[12][5][8] = [0.0, -0.021314904, 0.06785178, -0.0052944794, 0.030117506, -0.018387286, -0.06471848, 9.024069E-4, 0.002475134, 2.4045661E-11, -0.10057392] -gra[12][5][9] = [-0.006218316, -0.029101841, -0.04915625, -0.018809127, 0.009101256, 0.0, -0.007981101, 0.013654005, -0.0028556797, 0.0020550827, 0.020304516] -gra[12][5][10] = [-0.022339152, 0.06991776, 0.01910374, 0.013094213, 0.016904647, -0.0019594636, 0.013294723, -0.015119242, 0.024282468, 0.0, -0.013636445] -gra[12][5][11] = [-0.0073551796, -0.025330877, -0.10442609, -0.032042608, 0.011576987, 0.0076809367, -0.01705944, 0.01757557, 1.450358E-4, -0.0015840135, 0.010367265] -gra[12][5][12] = [-0.16706033, -0.21482477, -0.24927308, -0.18918799, -0.29838967, -0.17843461, -0.22002156, -0.38522995, -0.20298086, -0.17288092, -0.28824112] -gra[12][6][0] = [6.4378075E-4, 0.0] -gra[12][6][1] = [-0.07434406, 0.030801235] -gra[12][6][2] = [-0.092844926, 0.0] -gra[12][6][3] = [-0.11424769, 0.0026769685] -gra[12][6][4] = [-0.11424769, 0.0] -gra[12][6][5] = [-0.12801832, -0.0012286699] -gra[12][6][6] = [-0.3856579, -0.2287598] -gra[12][6][7] = [0.02825962, -0.016482558] -gra[12][6][8] = [0.041058443, -0.004157832] -gra[12][6][9] = [-0.041197278, 0.011194] -gra[12][6][10] = [0.050504595, -0.0011195537] -gra[12][6][11] = [-0.055323012, -0.0022921383] -gra[12][6][12] = [-0.3856579, -0.2287598] -gra[12][7][0] = [-3.8481143E-5, 0.0, 6.4378075E-4, -0.0029844372, -0.0050483216, 7.4807646E-11, 2.969678E-4, 1.1202662E-4, -6.5726263E-4, 0.0015309223, -0.004436887] -gra[12][7][1] = [-5.13921E-4, 0.0, -0.06948394, -0.006211838, -0.02226102, -0.004779683, -0.009418331, 0.043953314, 0.003516588, 0.002665921, -0.065357655] -gra[12][7][2] = [-0.012064191, -0.027438035, -0.08881713, 0.0, -0.02700362, -0.019855632, -0.009571605, 0.0052266098, -9.260336E-4, 0.0, -0.0406325] -gra[12][7][3] = [-0.0076743215, -0.039527558, -0.10513796, 0.008403905, -0.016524691, -0.017283684, -0.0065214084, 0.0014358414, -0.0047528488, 0.0, -0.02186584] -gra[12][7][4] = [-0.0060856016, -0.04054327, -0.10513796, 0.008403905, -0.016524691, -0.018873332, -0.0065214084, 0.0039132386, -0.0047528488, 0.0, -0.02291253] -gra[12][7][5] = [-0.0029837268, -0.039527558, -0.11648606, 0.008327524, -0.017453253, -0.010371415, -0.009280194, 0.0016880172, -0.0047528488, 0.0041766223, -0.023096858] -gra[12][7][6] = [-0.0015405889, -9.316074E-4, -0.071566254, 0.0047623203, 0.0, 0.0029634302, 0.0, 0.0049496302, -6.80316E-4, 0.0021720878, -0.011135231] -gra[12][7][7] = [-0.17296693, -0.2219486, -0.24882478, -0.13503015, -0.13160208, -0.15459797, -0.2619717, -0.19753595, -0.22370492, -0.15401436, -0.321337] -gra[12][7][8] = [0.0, -0.023150237, 0.068436705, -0.002615053, 0.050056085, -0.018387286, -0.06659655, -0.012948758, 0.0024751343, 2.4045661E-11, -0.09486357] -gra[12][7][9] = [-0.0069699325, -0.029101841, -0.05875787, -0.039002147, 0.095091864, 2.4217142E-11, 0.048530553, -4.8473087E-4, -0.0028556797, -3.4251437E-4, -0.073652655] -gra[12][7][10] = [-0.028379343, 0.07336935, 0.047639176, 0.013497463, 0.07395541, -0.0050073783, 0.01256845, -0.019953335, 0.0108534, -0.0018405669, -0.019349663] -gra[12][7][11] = [-0.0029198912, -0.025330877, -0.08893005, -0.032638032, 0.121397406, 0.0076809367, 0.033207543, -6.217086E-4, -0.004560237, -0.005408447, -0.07587983] -gra[12][7][12] = [-0.17296693, -0.2219486, -0.24882478, -0.13503015, -0.13160208, -0.15459797, -0.2619717, -0.19753595, -0.22370492, -0.15401436, -0.321337] -gra[12][8][0] = [0.008247588, -0.0055409744, 6.20738E-4, 4.4457944E-11, -0.0021720084, 9.538275E-4] -gra[12][8][1] = [-0.006211823, 0.0, -9.987416E-4, -0.0039049454, 0.005938728, 0.025205178] -gra[12][8][2] = [-0.07643938, -0.027438035, -0.010692279, -0.019855632, 0.006616043, -0.00923678] -gra[12][8][3] = [-0.10861548, -0.021687219, -0.010692279, -0.016594263, 0.0044185594, -0.007944971] -gra[12][8][4] = [-0.09617853, -0.02270293, -0.010692279, -0.018873332, 0.0044185594, -0.008991664] -gra[12][8][5] = [-0.11265888, -0.021687219, -0.010768659, -0.010371415, 0.0044185594, -0.007944971] -gra[12][8][6] = [-0.07895839, 0.0, 0.0, -0.024791945, -0.0017974195, -0.0031688735] -gra[12][8][7] = [-0.08424463, -0.031116845, -0.011541045, -0.010768514, 0.0066399304, -0.011917457] -gra[12][8][8] = [-0.26798728, -0.15959759, -0.21716277, -0.1733301, -0.14648728, -0.15974315] -gra[12][8][9] = [0.024333926, -0.034290306, -0.01417489, -0.016538091, -0.01139536, -0.053092495] -gra[12][8][10] = [0.13705663, 0.06524223, 0.0811487, -0.0033964338, 0.018332137, -0.008183777] -gra[12][8][11] = [0.015939308, -0.030519342, 0.010764442, -0.016941465, -0.03548946, -0.054613106] -gra[12][8][12] = [-0.26798728, -0.15959759, -0.21716277, -0.1733301, -0.14648728, -0.15974315] -gra[12][9][0] = [0.0010204252, 0.0, 6.4378075E-4, 0.0078705065, -0.006929637, 7.4807646E-11, 2.969678E-4, 1.1202662E-4, -0.0014169003, 0.0015309223, -0.0059786467] -gra[12][9][1] = [-0.002372175, 0.0, -0.070174165, -0.010353064, 5.069508E-4, -0.004779683, -0.014528066, 0.042927664, 0.0019214812, -0.014940248, -0.056931846] -gra[12][9][2] = [-0.010050564, -0.027438035, -0.08857328, 0.0, -0.018879909, -0.02211894, -0.0045123687, -0.0017202278, 0.0011093304, 0.005216337, -0.05363864] -gra[12][9][3] = [-0.0127275335, -0.03146217, -0.10435086, 0.0010881304, -0.016212534, -0.016594263, -0.00331613, -2.5217576E-4, -0.0047528488, 0.005216337, -0.039423138] -gra[12][9][4] = [-0.011138814, -0.03247788, -0.10435086, 0.0010881304, -0.016212534, -0.018873332, -0.00331613, 0.0022252216, -0.0047528488, 0.005216337, -0.04046983] -gra[12][9][5] = [-0.0116145555, -0.03146217, -0.115698956, 0.0010117503, -0.011718331, -0.010371415, -0.00331613, 0.0, -0.0047528488, 0.009318886, -0.040654156] -gra[12][9][6] = [-0.001125994, 0.0, -0.07229233, 0.002083107, -0.0033310815, -0.0029200683, 0.0, 0.0057957885, 0.008363578, -4.639659E-12, -0.0050727697] -gra[12][9][7] = [-0.0187421, 0.0025796203, -0.08554189, -0.0016975328, -0.020984316, -0.008486157, -2.3427873E-4, 0.004819586, 4.4242945E-5, 0.005100009, -0.035430547] -gra[12][9][8] = [-0.0030206593, 0.0, -0.07876769, -0.0041412255, 0.0054565035, -0.0019524727, -0.005559218, 0.024523886, -1.2932688E-10, -0.012585728, -0.028795455] -gra[12][9][9] = [-0.17641266, -0.17913842, -0.16291693, -0.12995316, -0.28934565, -0.17905404, -0.28703806, -0.23105575, -0.19420177, -0.1480365, -0.2699444] -gra[12][9][10] = [-0.041895133, 0.06991776, 0.013579304, 0.015469885, 0.028076027, -0.0027198482, 0.009982745, -0.028109219, 0.012878839, 0.0018559321, -0.01863579] -gra[12][9][11] = [-0.004744318, -0.025330877, -0.120270304, -0.019102708, 0.01950083, 0.0076809367, 0.030894147, 0.029762033, -0.0033134911, 0.0056220004, 0.05215506] -gra[12][9][12] = [-0.17641266, -0.17913842, -0.16291693, -0.12995316, -0.28934565, -0.17905404, -0.28703806, -0.23105575, -0.19420177, -0.1480365, -0.2699444] -gra[12][10][0] = [0.0027031128, 2.4087886E-4, 1.3065474E-10, 6.207381E-4, 0.005225119, 0.002607383, -0.0046446207] -gra[12][10][1] = [-0.013131462, -0.004854968, -0.0039049454, 0.0, -0.022862324, -0.030430669, 0.0054494757] -gra[12][10][2] = [-0.11364833, -0.06776521, -0.021547828, -0.0019249347, -9.88245E-11, -0.017155558, -0.009961104] -gra[12][10][3] = [-0.14122392, -0.051777363, -0.01828646, -0.0060540326, 0.002196358, -0.013158046, -0.010008944] -gra[12][10][4] = [-0.14122392, -0.05279307, -0.020565528, -0.009311951, 0.002196358, -0.014291802, -0.008420223] -gra[12][10][5] = [-0.15257202, -0.055623546, -0.012063611, -0.006130413, 0.0031230266, -0.00943523, -0.0073319743] -gra[12][10][6] = [-0.071703576, 0.0, 0.0027493, -8.813711E-12, -0.0057086376, -0.0019164708, -0.001125994] -gra[12][10][7] = [-0.11488428, -0.069919035, -0.007915045, -0.004201497, 1.1974003E-4, -0.0056611383, -0.017588487] -gra[12][10][8] = [-0.06480228, 8.0218556E-4, -0.0039049454, -8.114468E-4, -0.007725291, -0.025030788, 0.0015275365] -gra[12][10][9] = [-0.12151261, -0.046710342, -0.023622112, -0.0025065367, 6.714482E-4, -0.007684609, -0.014869897] -gra[12][10][10] = [-0.04098353, -0.09227586, -0.121592574, -0.23921865, -0.34364283, -0.350644, -0.17361926] -gra[12][10][11] = [0.077353664, -0.025852533, 0.0019329089, -0.045883507, 0.004905568, 0.0060856706, -0.0054457206] -gra[12][10][12] = [-0.04098353, -0.09227586, -0.121592574, -0.23921865, -0.34364283, -0.350644, -0.17361926] -gra[12][11][0] = [-3.8481143E-5, 0.0, 6.4378075E-4, 6.20738E-4, -0.0041380986, 7.4807646E-11, 2.969678E-4, 0.0021298332, -3.908082E-4, 0.0015309223, -0.0059786467] -gra[12][11][1] = [-0.002372175, -3.7906157E-11, -0.0620731, -0.006211838, -0.006399732, -0.004779683, -0.01145776, 0.049474724, 0.0019214812, -4.4388496E-11, -0.06600562] -gra[12][11][2] = [-0.010050564, -0.025332876, -0.07972554, 0.0, -0.017035853, -0.017464971, -9.650856E-4, 0.004819586, 0.0011093304, 0.005216337, -0.049794633] -gra[12][11][3] = [-0.0127275335, -0.029357009, -0.09755905, 0.0010881305, -0.013876671, -0.012445698, 2.311531E-4, -2.5217576E-4, -0.0047528488, 0.005216337, -0.035360437] -gra[12][11][4] = [-0.011138814, -0.03037272, -0.09755905, 0.0010881305, -0.013876671, -0.014724767, 2.311531E-4, 0.0022252216, -0.0047528488, 0.005216337, -0.036407128] -gra[12][11][5] = [-0.010050564, -0.029357009, -0.108907156, -0.0014421018, -0.013876671, -0.008297132, 2.311531E-4, -7.2720836E-6, -0.0047528488, 0.009392959, -0.036591455] -gra[12][11][6] = [-0.001125994, 0.0, -0.06849815, 0.0031763045, -0.0016293218, -0.004313529, 0.0, 0.0049496302, 0.007193418, -4.639659E-12, -0.008332037] -gra[12][11][7] = [-0.017588487, -0.026489059, -0.080878146, -0.0016975328, -0.018648453, -0.004148566, 0.0033130045, 0.004819586, 4.4242945E-5, 0.0065824687, -0.034891326] -gra[12][11][8] = [-0.004225553, 0.0, -0.09060159, -0.0041412255, 0.010023229, -0.0039049454, -0.012820947, 0.042075388, -1.2932688E-10, -0.012585728, -0.047103584] -gra[12][11][9] = [-0.013322491, -0.02378166, -0.07438753, 0.0010881305, -0.011540808, -0.021613538, 0.002787061, 0.0013000679, -0.0064115636, 0.00468833, -0.050671246] -gra[12][11][10] = [-0.0053089955, -0.0055740727, 0.05267254, 0.008118987, 0.0011185199, 0.010369438, -0.033235624, -0.068654336, 5.1445976E-11, 0.0012886577, -0.041671593] -gra[12][11][11] = [-0.16127247, -0.13955387, -0.076390915, -0.10867561, -0.12649849, -0.1822295, -0.2659423, -0.1655591, -0.20603198, -0.14757687, -0.22842984] -gra[12][11][12] = [-0.16127247, -0.13955387, -0.076390915, -0.10867561, -0.12649849, -0.1822295, -0.2659423, -0.1655591, -0.20603198, -0.14757687, -0.22842984] -gra[12][13][12] = [-0.0658199, 0.11616026, 0.005189496, -0.08350004, -0.103413984, -0.20297602, -0.2756635, -0.1898117, -0.0919149, -0.109432496, -0.1414069] -gra[12][13][13] = [-0.0658199, 0.11616026, 0.005189496, -0.08350004, -0.103413984, -0.20297602, -0.2756635, -0.1898117, -0.0919149, -0.109432496, -0.1414069] -gra[12][13][14] = [-0.03055281, 0.03228754, -0.1253913, 0.025314178, -0.007795457, 0.02670395, 0.08701053, 0.01655003, 0.0, -0.0013691243, -0.067090854] -gra[12][14][12] = [0.40465567, -0.40797436, -0.2669245, -0.0026956042, -0.23772454, -0.11392724, -0.20921792, -0.18406665] -gra[12][14][13] = [-0.037709318, 0.10248319, 0.106661454, 0.087078094, -0.02219873, -0.0064464738, 0.017485827, -0.043919954] -gra[12][14][14] = [0.40465567, -0.40797436, -0.2669245, -0.0026956042, -0.23772454, -0.11392724, -0.20921792, -0.18406665] -gra[13][0][0] = [-0.08952447] -gra[13][0][1] = [0.12116575] -gra[13][0][2] = [0.020609686] -gra[13][0][3] = [0.027726827] -gra[13][0][4] = [0.029377932] -gra[13][0][5] = [0.037763137] -gra[13][0][6] = [-0.00922532] -gra[13][0][7] = [0.050046057] -gra[13][0][8] = [0.04002815] -gra[13][0][9] = [0.008192802] -gra[13][0][10] = [0.08633158] -gra[13][0][11] = [-0.037312046] -gra[13][0][12] = [0.036733776] -gra[13][0][13] = [-0.08952447] -gra[13][1][0] = [0.0022879262, -0.001958814, 6.20738E-4, 4.4457944E-11, -0.0021720084, 9.538275E-4] -gra[13][1][1] = [-0.055141833, -0.18159214, -0.2310143, -0.1775042, -0.16245575, -0.17656916] -gra[13][1][2] = [0.112229094, -0.04588853, 0.020137032, -0.026443, -0.0077710547, -0.046964385] -gra[13][1][3] = [0.07827134, -0.04609508, -0.017746942, -0.019397447, -0.00913266, -0.06840449] -gra[13][1][4] = [0.088947535, -0.04609508, -0.010926573, -0.019397447, -0.00913266, -0.0674689] -gra[13][1][5] = [0.07683738, -0.031788856, 0.018829808, -0.019397447, -0.00913266, -0.04587588] -gra[13][1][6] = [-0.00922532, -0.0024341857, 0.007006275, -0.0169596, 0.008638527, -0.003209465] -gra[13][1][7] = [0.13488376, -0.035775825, 0.009771412, -0.024018921, -0.0020519788, -0.072541356] -gra[13][1][8] = [0.047255743, 0.0037917919, -0.033108108, -0.015537896, -0.0065630274, -0.0026946948] -gra[13][1][9] = [0.0773224, -0.03633568, -0.021127176, -0.019397447, -0.007967199, -0.051424008] -gra[13][1][10] = [0.108961046, 0.060693294, 0.054833442, 2.4091253E-11, 0.00469194, -0.033955812] -gra[13][1][11] = [0.057086185, -0.046474654, 0.018150322, -0.034626793, -0.02501236, -0.06334714] -gra[13][1][12] = [0.10698522, -0.04167862, -0.016609259, -0.019397447, -0.017039627, -0.050599117] -gra[13][1][13] = [-0.055141833, -0.18159214, -0.2310143, -0.1775042, -0.16245575, -0.17656916] -gra[13][2][0] = [-3.8481143E-5, 0.0, 6.4378075E-4, 0.0042653317, -0.008087347, 0.0031306578, 2.969677E-4, -2.252149E-11, 0.0034323288, 0.0015309223, -0.008016303] -gra[13][2][1] = [-5.4985366E-4, -3.7906157E-11, -0.047306664, -0.0041412255, -0.02294093, -0.0028272104, -0.0042415615, 0.035186574, 0.0019214812, 1.8304982E-4, -0.034932088] -gra[13][2][2] = [-0.17586473, -0.18396096, -0.12756495, -0.19800399, -0.27966103, -0.15852593, -0.28207782, -0.26794708, -0.21708418, -0.13176982, -0.22484498] -gra[13][2][3] = [-0.0042467928, -0.032899063, -0.0069454797, -0.018209012, -0.02118981, 0.0, 0.0043394, -0.00686435, -0.002073156, -0.0052225264, -0.13685393] -gra[13][2][4] = [-0.0057051876, -0.037109382, -0.0067831725, -0.015690094, -0.0015978473, -0.0016386209, 7.817097E-4, -0.012367459, -0.002073156, 0.003701211, -0.16906321] -gra[13][2][5] = [-0.004744318, -0.029101841, -0.017503193, -0.019817533, 0.010586387, 0.0, 0.012585785, -0.014020145, -0.0052353498, -0.0013686286, -0.14418706] -gra[13][2][6] = [0.010826467, -0.005398127, -0.040203378, -6.327303E-4, 0.019529367, -0.013829023, -0.007742171, -0.016999522, 0.0, 0.001967366, -0.09080481] -gra[13][2][7] = [-0.002891289, -0.028688747, 0.026601702, -0.03597616, 0.02752462, 0.0024165655, 0.018569034, 0.008007627, -0.0067974986, -0.0053274613, -0.16666228] -gra[13][2][8] = [0.0028593205, -0.03005159, 0.04387173, -0.0052944794, 0.045643046, -0.014238721, -0.0491267, -0.02992584, 0.002475134, 8.7436906E-4, -0.047349196] -gra[13][2][9] = [-0.004744318, -0.030361539, -0.03795372, -0.033919044, 0.06747356, -6.163665E-11, 0.029084913, -0.008266031, -0.0028556797, -0.0053274613, -0.1554867] -gra[13][2][10] = [-0.02512641, 0.069837, 0.058662485, 0.026585884, 0.09000933, 0.0075394805, 0.004756875, -0.040925086, 0.028262286, 0.004521761, -0.07096769] -gra[13][2][11] = [-0.0057051876, -0.03748896, -0.08736233, -0.01523703, 0.07181907, -0.0017203483, 0.015343863, 0.004421005, -0.0023095226, -0.008031685, -0.10951381] -gra[13][2][12] = [-0.004744318, -0.029274868, 0.016431537, -0.037910536, 0.057670604, 0.0, 0.036615655, 0.0033570318, -0.0067974986, -0.0053274613, -0.18969187] -gra[13][2][13] = [-0.17586473, -0.18396096, -0.12756495, -0.19800399, -0.27966103, -0.15852593, -0.28207782, -0.26794708, -0.21708418, -0.13176982, -0.22484498] -gra[13][3][0] = [-3.8481143E-5, 0.0, -2.546209E-4, 6.20738E-4, -0.003558128, 0.0031306578, 2.969677E-4, -5.3025438E-11, 0.0034323288, -9.175534E-4, -0.0059786467] -gra[13][3][1] = [-5.4985366E-4, 0.0, -0.06591385, -0.010353064, -0.04391478, -0.004779683, -0.03789397, 0.079702035, 0.0019214812, -0.0033397619, -0.08094852] -gra[13][3][2] = [-0.012531618, -0.02149262, -0.08160064, 0.0017225409, -0.025120389, -0.010560441, -0.009571605, 0.0045674103, -0.0010462527, 0.00255187, -0.051743556] -gra[13][3][3] = [-0.18031244, -0.22357735, -0.21240802, -0.25388938, -0.37549284, -0.17787576, -0.23753236, -0.40126306, -0.21692044, -0.1680989, -0.23398493] -gra[13][3][4] = [-0.004744318, -0.032899063, 0.03715505, -0.009229947, -0.030055411, -0.0016386209, -0.023424516, -0.008862917, -0.0050928323, -0.0031257737, 0.043856] -gra[13][3][5] = [-0.004744318, -0.029101841, 0.026052877, -0.013357386, 0.010130936, 0.0, -0.013955208, -0.012113207, -0.009159835, -0.0031257737, 0.053190615] -gra[13][3][6] = [-9.563443E-4, -0.00329998, -0.02827242, 0.0031225746, 0.014126778, -0.016821094, -0.0016823349, -0.011623862, 0.0017409262, 0.001967366, -0.06866483] -gra[13][3][7] = [-0.0047443183, -0.028688747, 0.037981912, -0.033003844, 0.004445195, 0.0024165655, -0.007744682, 0.011656271, -0.009074964, -0.0031257737, 0.021348575] -gra[13][3][8] = [0.0, -0.02476588, 0.045840815, -0.0052944794, 0.043581713, -0.014238721, -0.057075597, -0.008813456, 0.002475134, -1.1985166E-10, -0.07913361] -gra[13][3][9] = [-0.004744318, -0.029248606, -0.0141451955, -0.029602291, 0.019558635, 3.0514854E-4, -0.010528591, 0.013094053, -0.0028556797, 0.0016335323, 0.023239616] -gra[13][3][10] = [-0.023588339, 0.062523216, 0.052721545, 0.024466196, 0.020985646, 0.0066277483, 0.013492335, -0.015119242, 0.028262286, 0.0011546377, -0.013636478] -gra[13][3][11] = [-0.008316049, -0.03748896, -0.089236364, -0.024210531, 0.0035645193, -0.0017203483, -0.02742043, 0.018517133, 0.0011490043, -0.0010706913, 0.013034737] -gra[13][3][12] = [-0.0047443183, -0.029274868, 0.014905731, -0.04058704, 0.011896652, 0.0, -0.009303885, 0.016553108, -0.005152384, 0.0016335323, 0.017573029] -gra[13][3][13] = [-0.18031244, -0.22357735, -0.21240802, -0.25388938, -0.37549284, -0.17787576, -0.23753236, -0.40126306, -0.21692044, -0.1680989, -0.23398493] -gra[13][4][0] = [-3.8481143E-5, 0.0, 0.002269707, 6.20738E-4, -0.003558128, 0.0031306578, 2.969677E-4, -5.3025438E-11, 0.0034323288, 0.0015309223, -0.0059786467] -gra[13][4][1] = [-5.4985366E-4, 0.0, -0.06591385, -0.010353064, -0.04391478, -0.004779683, -0.03789397, 0.079702035, 0.0019214812, -0.0033397619, -0.08094852] -gra[13][4][2] = [-0.012531618, -0.02149262, -0.10305554, 0.0017225409, -0.029588522, -0.014709006, -0.009571605, 0.014932039, -2.958011E-4, 0.0015983053, -0.05661193] -gra[13][4][3] = [-0.014356834, -0.020139834, -0.12048513, 0.0, -0.01927166, -0.008297132, -0.0065214084, -2.5217576E-4, -0.0069084316, 0.0010085813, -0.038101066] -gra[13][4][4] = [-0.17809576, -0.22590655, -0.21240802, -0.25388938, -0.37549284, -0.17787576, -0.23127286, -0.398157, -0.21692044, -0.1680989, -0.27611417] -gra[13][4][5] = [-0.004744318, -0.024891522, 0.025563333, -0.013357386, -0.0110635245, -0.0030399878, -0.014388094, -0.010515601, -0.0070016095, -0.004008526, 0.06699301] -gra[13][4][6] = [1.1364407E-11, -0.004874793, -0.02827242, 0.0018121619, 0.014126778, -0.016821094, -0.0016823349, -0.011623862, 0.0, 7.519599E-4, -0.07071236] -gra[13][4][7] = [-0.0047443183, -0.028688747, 0.037981912, -0.033003844, 0.0049465187, 0.0024165655, -0.007744682, 0.011656271, -0.009074964, -0.0027042234, 0.017222213] -gra[13][4][8] = [-0.0030642115, -0.02476588, 0.045840815, -0.0052944794, 0.043581713, -0.014238721, -0.057075597, -0.008813456, 0.0024751339, -5.0044945E-4, -0.07913361] -gra[13][4][9] = [-0.004744318, -0.029248606, -0.0141451955, -0.029602291, 0.020765867, 0.0, -0.010528591, 0.013094053, -0.0028556797, 0.0020550827, 0.019113258] -gra[13][4][10] = [-0.020729683, 0.062523216, 0.052721545, 0.02216856, 0.020985646, 0.0066277483, 0.011945313, -0.015119242, 0.028262286, 0.0011546377, -0.018444024] -gra[13][4][11] = [-0.008316049, -0.03748896, -0.089236364, -0.024210531, 0.0023096106, -0.0017203483, -0.02742043, 0.018517133, 0.0011490043, 0.009044054, 0.008908374] -gra[13][4][12] = [-0.0047443183, -0.029274868, 0.014905731, -0.04058704, 0.013103877, 0.0, -0.009303885, 0.016553108, -0.009074964, 0.0020550827, 0.0120558515] -gra[13][4][13] = [-0.17809576, -0.22590655, -0.21240802, -0.25388938, -0.37549284, -0.17787576, -0.23127286, -0.398157, -0.21692044, -0.1680989, -0.27611417] -gra[13][5][0] = [-3.8481143E-5, -0.0019296022, 0.002269707, -7.568941E-4, -0.003558128, -0.0023391629, 2.969678E-4, -5.3025438E-11, 0.0034323288, 0.0015309223, -0.0059786467] -gra[13][5][1] = [-5.4985366E-4, 0.0, -0.072617814, -0.010353064, -0.035776734, -0.004779683, -0.03315192, 0.079702035, 0.0019214812, -0.0033397619, -0.09211975] -gra[13][5][2] = [-0.012531618, -0.02149262, -0.10377838, 0.0017225409, -0.024193535, -0.014709006, -0.009571605, 0.011914919, -0.0010462527, 0.00255187, -0.048641015] -gra[13][5][3] = [-0.01437872, -0.019673575, -0.1188169, 0.0, -0.018344807, -0.012445698, -0.0065214084, 0.0068431576, -0.0069084316, 0.00255187, -0.03546479] -gra[13][5][4] = [-0.011914355, -0.021155545, -0.12490728, 0.0, -0.013876671, -0.006897951, -0.0065214084, 0.0022252216, -0.0069084316, 0.00255187, -0.03168124] -gra[13][5][5] = [-0.17809576, -0.21920177, -0.22583191, -0.22214787, -0.3129328, -0.17787576, -0.23062442, -0.37000602, -0.21692044, -0.1680989, -0.26244205] -gra[13][5][6] = [-6.359549E-4, -0.00329998, -0.027081385, 6.87819E-11, 0.014126778, -0.016821094, -7.880372E-4, -0.013210811, 0.0011668268, 0.001967366, -0.066702664] -gra[13][5][7] = [-0.0047443183, -0.028688747, 0.039401986, -0.033003844, -0.0018611331, 4.886615E-13, -0.006838248, 0.011656271, -0.009074964, -0.0027042234, 0.004515754] -gra[13][5][8] = [0.0, -0.017561529, 0.045840815, -0.0052944794, 0.030117506, -0.014238721, -0.06238355, 2.2126269E-4, 0.002475134, -1.1985166E-10, -0.0996067] -gra[13][5][9] = [-0.004744318, -0.029248606, -0.012725122, -0.017495878, 0.008357792, 0.0, -0.010288807, 0.013094053, -0.0028556797, 0.0020550827, 0.015532694] -gra[13][5][10] = [-0.023588339, 0.062523216, 0.052721545, 0.02216856, 0.018455729, 0.0014369704, 0.011879643, -0.015119242, 0.028262286, 0.0011546375, -0.010995837] -gra[13][5][11] = [-0.0073551796, -0.03748896, -0.08781629, -0.024210531, 4.7158962E-4, -0.0017203483, -0.027180644, 0.018517133, 0.0011490043, -0.0015840135, -0.0015809597] -gra[13][5][12] = [-0.0047443183, -0.029274868, 0.016325809, -0.04058704, 6.9580355E-4, 0.0, -0.0068243686, 0.016553108, -0.013708543, 0.0020550827, 0.016344428] -gra[13][5][13] = [-0.17809576, -0.21920177, -0.22583191, -0.22214787, -0.3129328, -0.17787576, -0.23062442, -0.37000602, -0.21692044, -0.1680989, -0.26244205] -gra[13][6][0] = [6.4378075E-4, 0.0] -gra[13][6][1] = [-0.06624731, 0.030801235] -gra[13][6][2] = [-0.10918311, 0.0] -gra[13][6][3] = [-0.12980185, 0.0026769685] -gra[13][6][4] = [-0.1323681, 0.0] -gra[13][6][5] = [-0.14144892, -0.0012286699] -gra[13][6][6] = [-0.3622168, -0.22078751] -gra[13][6][7] = [0.041815557, -0.01590641] -gra[13][6][8] = [0.019047474, -0.0046319123] -gra[13][6][9] = [-0.004766149, 0.011194] -gra[13][6][10] = [0.08412241, 0.0011773661] -gra[13][6][11] = [-0.053156152, -0.0022921383] -gra[13][6][12] = [0.023595892, -0.0034085575] -gra[13][6][13] = [-0.3622168, -0.22078751] -gra[13][7][0] = [-3.8481143E-5, 0.0, 6.4378075E-4, -0.0029844372, -0.003558128, 7.4807646E-11, 2.969678E-4, -2.252149E-11, 0.0034323288, 0.0015309223, -0.004436887] -gra[13][7][1] = [-5.4985366E-4, 0.0, -0.061387178, -0.006211838, -0.02472724, -0.004779683, -0.009418331, 0.043953314, 0.003516588, -6.7384075E-4, -0.06601527] -gra[13][7][2] = [-0.014545243, -0.02149262, -0.105155304, 0.0017225409, -0.02913589, -0.012445698, -0.009571605, 0.012321943, -0.0030816167, 0.0, -0.038469456] -gra[13][7][3] = [-0.008449863, -0.031753954, -0.12069213, 0.008403905, -0.018656962, -0.013135118, -0.0065214084, 0.008531175, -0.0069084316, 0.0, -0.02244518] -gra[13][7][4] = [-0.0068611433, -0.032769665, -0.12325835, 0.008403905, -0.018656962, -0.014724767, -0.0065214084, 0.011008573, -0.0069084316, 0.0, -0.02244518] -gra[13][7][5] = [-0.003759268, -0.031753954, -0.12706642, 0.008403905, -0.017453253, -0.008297132, -0.009280194, 0.0016880172, -0.0069084316, 0.0, -0.023096858] -gra[13][7][6] = [-0.0015405889, -9.316074E-4, -0.07405043, 0.0047623203, -0.0011805353, 0.0038556326, 0.0044427225, 0.0029879243, -6.80316E-4, 0.0021720878, -0.011135231] -gra[13][7][7] = [-0.18400235, -0.22632557, -0.22538361, -0.16799, -0.1461452, -0.15403911, -0.27257457, -0.18231206, -0.2376445, -0.14923236, -0.295538] -gra[13][7][8] = [0.0, -0.019396862, 0.05353746, -0.002615053, 0.050056085, -0.014238721, -0.064261615, -0.013629902, 0.0024751343, -1.1985166E-10, -0.09486357] -gra[13][7][9] = [-0.005495934, -0.029248606, -0.022326747, -0.037688896, 0.0943484, 2.4217142E-11, 0.046222847, -0.0010446829, -0.0028556797, -3.4251437E-4, -0.07842448] -gra[13][7][10] = [-0.02962853, 0.0659748, 0.08125699, 0.02257181, 0.075506486, -0.0016109447, 0.011153372, -0.019953335, 0.0148332175, -6.8592926E-4, -0.016709048] -gra[13][7][11] = [-0.0066066366, -0.03748896, -0.072320245, -0.024805957, 0.110292, -0.0017203483, 0.023086337, 3.1985203E-4, -0.0035562683, -0.005408447, -0.087828055] -gra[13][7][12] = [-0.0016143469, -0.03266932, 0.02244001, -0.0416742, 0.09989443, 2.4217142E-11, 0.064361975, 0.010643414, -0.0067974986, -0.0027042234, -0.102793634] -gra[13][7][13] = [-0.18400235, -0.22632557, -0.22538361, -0.16799, -0.1461452, -0.15403911, -0.27257457, -0.18231206, -0.2376445, -0.14923236, -0.295538] -gra[13][8][0] = [0.008247588, -0.0055409744, 6.20738E-4, 4.4457944E-11, -0.0021720084, 9.538275E-4] -gra[13][8][1] = [0.0018849298, 0.0, -9.987416E-4, -0.0039049454, 0.005938728, 0.02454755] -gra[13][8][2] = [-0.09277756, -0.02149262, -0.008969738, -0.012445698, 0.006616043, -0.0070737293] -gra[13][8][3] = [-0.12416965, -0.013913619, -0.010692279, -0.012445698, 0.0044185594, -0.008524312] -gra[13][8][4] = [-0.11429893, -0.014929331, -0.010692279, -0.014724767, 0.0044185594, -0.008524312] -gra[13][8][5] = [-0.123239286, -0.013913619, -0.010692279, -0.008297132, 0.0044185594, -0.007944971] -gra[13][8][6] = [-0.08144255, 0.0, 0.0, -0.023899741, -0.0011061644, -0.0031688735] -gra[13][8][7] = [-0.0976752, -0.02517143, -0.011541045, -0.008694231, 0.008405002, -0.006917912] -gra[13][8][8] = [-0.24454613, -0.1639746, -0.25012267, -0.17277125, -0.14648728, -0.1339441] -gra[13][8][9] = [0.060765058, -0.03443707, -0.012861641, -0.016538091, -0.01139536, -0.05786432] -gra[13][8][10] = [0.17067443, 0.057847686, 0.09022305, 2.936734E-11, 0.017207963, -0.0055431663] -gra[13][8][11] = [-0.0031472906, -0.044576038, -0.008100095, -0.02634275, -0.034019772, -0.07583591] -gra[13][8][12] = [0.050338555, -0.03446333, -0.0013067424, -0.016538091, -0.018642653, -0.041006442] -gra[13][8][13] = [-0.24454613, -0.1639746, -0.25012267, -0.17277125, -0.14648728, -0.1339441] -gra[13][9][0] = [0.0010204252, 0.0, 6.4378075E-4, 0.0078705065, -0.0054394426, 7.4807646E-11, 2.969678E-4, -2.252149E-11, 0.002672691, 0.0015309223, -0.0059786467] -gra[13][9][1] = [-0.0024081077, 0.0, -0.062077407, -0.010353064, -0.0019592715, -0.004779683, -0.014528066, 0.042927664, 0.0019214812, -0.01828001, -0.05758947] -gra[13][9][2] = [-0.012531618, -0.02149262, -0.104911454, 0.0017225409, -0.021012181, -0.014709006, -0.0045123687, 0.0053751054, -0.0010462527, 0.005216337, -0.05147559] -gra[13][9][3] = [-0.013503075, -0.023688566, -0.119905025, 0.0010881304, -0.018344807, -0.012445698, -0.00331613, 0.0068431576, -0.0069084316, 0.005216337, -0.040002476] -gra[13][9][4] = [-0.011914355, -0.024704278, -0.12247125, 0.0010881304, -0.018344807, -0.014724767, -0.00331613, 0.009320555, -0.0069084316, 0.005216337, -0.040002476] -gra[13][9][5] = [-0.012390098, -0.023688566, -0.12627934, 0.0010881304, -0.011718331, -0.008297132, -0.00331613, 0.0, -0.0069084316, 0.005142264, -0.040654156] -gra[13][9][6] = [-0.001125994, 0.0, -0.074776486, 0.002083107, -0.002882295, -0.002027866, 0.0044427225, 0.0038340823, 0.0039350963, 0.0, -0.0050727697] -gra[13][9][7] = [-0.024156814, 0.008525034, -0.09897246, -0.0016975328, -0.020984316, -0.0064118747, -2.3427873E-4, 0.008303378, -0.0046053967, 0.005100009, -0.030431] -gra[13][9][8] = [-0.003056592, 0.0, -0.07764223, -0.0041412255, 0.0029902817, 5.194387E-4, -0.005559218, 0.024523886, -1.2932688E-10, -0.01592549, -0.028795455] -gra[13][9][9] = [-0.18744808, -0.18351543, -0.13947575, -0.16291302, -0.3038887, -0.17849518, -0.29764092, -0.21583185, -0.20814133, -0.14325449, -0.24414533] -gra[13][9][10] = [-0.038269173, 0.062523216, 0.049702324, 0.024544237, 0.029627107, -6.992128E-4, 0.008567667, -0.028109219, 0.016858656, 0.0030105696, -0.01863579] -gra[13][9][11] = [-0.004744318, -0.03748896, -0.100242846, -0.011270633, 0.00911401, -0.0017203483, 0.016757932, 0.027999457, -0.0023095226, 0.0056220004, 0.04432713] -gra[13][9][12] = [-0.0047443183, -0.029274868, 0.0074492553, -0.03500275, 0.007803831, 0.0, 0.044764586, 0.031718038, -0.009074964, 0.008326224, 0.09394421] -gra[13][9][13] = [-0.18744808, -0.18351543, -0.13947575, -0.16291302, -0.3038887, -0.17849518, -0.29764092, -0.21583185, -0.20814133, -0.14325449, -0.24414533] -gra[13][10][0] = [0.0027031128, 2.4087886E-4, 1.3065474E-10, 6.207381E-4, 0.002889238, 0.002607383, -0.0046446207] -gra[13][10][1] = [-0.005034707, -0.004854968, -0.0039049454, 0.0, -0.024383903, -0.031088296, 0.005413543] -gra[13][10][2] = [-0.12998651, -0.061819807, -0.014137894, -2.0239376E-4, -0.005629006, -0.014992505, -0.012442157] -gra[13][10][3] = [-0.15677811, -0.044003762, -0.014137894, -0.0060540326, 0.002196358, -0.013737386, -0.010784484] -gra[13][10][4] = [-0.15934435, -0.04501947, -0.016416963, -0.009311951, 0.0025157349, -0.013824449, -0.0091957655] -gra[13][10][5] = [-0.16315244, -0.047849946, -0.009989329, -0.0060540326, 0.002196358, -0.00943523, -0.008107517] -gra[13][10][6] = [-0.07418773, 0.0, 0.0036415025, -8.813711E-12, -0.0057086376, -0.0019164708, -0.0011259941] -gra[13][10][7] = [-0.12831485, -0.06397362, -0.005840762, -0.004201497, 0.0016994415, -6.6159316E-4, -0.023003204] -gra[13][10][8] = [-0.059567124, 8.0218556E-4, -0.001433034, -8.114468E-4, -0.007725291, -0.025030788, 0.0014916039] -gra[13][10][9] = [-0.13773312, -0.040764928, -0.01828646, -0.0025065367, 6.714482E-4, -0.007684609, -0.015645439] -gra[13][10][10] = [-0.01754238, -0.096652865, -0.12103371, -0.27217853, -0.3531466, -0.324845, -0.1846547] -gra[13][10][11] = [0.06607049, -0.03801062, 0.0019329089, -0.04559043, 0.007320726, 0.0027789439, 2.059529E-4] -gra[13][10][12] = [0.12691858, -0.029796522, 4.5780465E-4, -0.0508675, -0.0019010571, 0.027822996, -0.0029191687] -gra[13][10][13] = [-0.01754238, -0.096652865, -0.12103371, -0.27217853, -0.3531466, -0.324845, -0.1846547] -gra[13][11][0] = [-3.8481143E-5, 0.0, 6.4378075E-4, 6.20738E-4, -0.006206033, 0.0031306578, 2.969677E-4, 0.0020178065, 0.003698783, 0.0015309223, -0.0059786467] -gra[13][11][1] = [-0.0024081077, -3.7906157E-11, -0.05410392, -0.006211838, -0.017004, -0.004779683, -0.01619981, 0.049474724, 0.0019214812, -0.0033397619, -0.055492003] -gra[13][11][2] = [-0.012531618, -0.02149262, -0.101407215, 0.0017225409, -0.024563115, -0.016277885, -9.650856E-4, 0.014932039, -2.958011E-4, 0.005216337, -0.055602495] -gra[13][11][3] = [-0.013503075, -0.023688566, -0.11878066, 0.0010881305, -0.021403933, -0.012445698, 2.311531E-4, 0.009860277, -0.0061579803, 0.005216337, -0.042359605] -gra[13][11][4] = [-0.011914355, -0.024704278, -0.12134688, 0.0010881305, -0.021403933, -0.014724767, 2.311531E-4, 0.012337675, -0.0061579803, 0.005216337, -0.042359605] -gra[13][11][5] = [-0.010826106, -0.023688566, -0.12515497, -0.0013657217, -0.01927166, -0.008297132, 2.311531E-4, -7.2720836E-6, -0.0069084316, 0.005216337, -0.04301128] -gra[13][11][6] = [-0.001125994, 0.0, -0.073497966, 0.0031763045, -0.0011805353, -0.002027866, 0.0044427225, 0.0029879243, 0.0067000333, 0.0, -0.008332037] -gra[13][11][7] = [-0.023003204, -0.022648802, -0.097360395, -0.0016975328, -0.026379308, -0.004148566, 0.0033130045, 0.008303378, -0.0046053967, 0.0065824687, -0.03631161] -gra[13][11][8] = [-0.0042614858, 0.0, -0.08549402, -0.0041412255, 0.0011589571, -0.001433034, -0.015982313, 0.042075388, -1.2932688E-10, -0.01592549, -0.034074277] -gra[13][11][9] = [-0.014098032, -0.019941404, -0.08872916, 0.0010881305, -0.016935797, -0.018041158, 0.0077908346, -5.865624E-10, -0.01072273, 0.005216337, -0.060193244] -gra[13][11][10] = [-0.0063372697, -0.00724988, 0.09636207, 0.0063281707, 0.013989373, 0.010369438, -0.029499395, -0.07729727, -0.0034266128, 0.001646283, -0.06261036] -gra[13][11][11] = [-0.1723079, -0.19175091, -0.08346477, -0.16814607, -0.20360166, -0.18464145, -0.29005083, -0.19624236, -0.23322582, -0.15090755, -0.25228682] -gra[13][11][12] = [-0.004744318, -0.027169708, 0.017387033, -0.033801217, -0.012644364, 0.0, 0.0085210595, 7.166872E-4, -0.0067974986, -0.0027042234, 0.037621047] -gra[13][11][13] = [-0.1723079, -0.19175091, -0.08346477, -0.16814607, -0.20360166, -0.18464145, -0.29005083, -0.19624236, -0.23322582, -0.15090755, -0.25228682] -gra[13][12][0] = [-3.8481143E-5, -3.63924E-11, 0.002269707, 6.20738E-4, 0.0, 1.2339335E-10, 2.969678E-4, -2.252149E-11, 0.0034323288, 0.0015309223, -0.0059786467] -gra[13][12][1] = [-0.0024081077, 0.0, -0.064752415, -0.010353064, -0.040191926, -0.004779683, -0.031112492, 0.079702035, 0.003516588, -0.0060928166, -0.091516405] -gra[13][12][2] = [-0.012531618, -0.019387461, -0.09771204, 0.0017225409, -0.024051953, -0.0062228492, -0.009571605, 0.011914919, -0.0010462527, 0.005216337, -0.041412294] -gra[13][12][3] = [-0.0153472, -0.029182535, -0.10223391, 0.009492035, -0.019618789, -0.008297132, -0.0058457484, 0.008531175, -0.0069084316, 0.005216337, -0.028060148] -gra[13][12][4] = [-0.0137584815, -0.030198246, -0.11609159, 0.009492035, -0.019618789, -0.010576202, -0.0058457484, 0.011008573, -0.0069084316, 0.005216337, -0.028060148] -gra[13][12][5] = [-0.012670232, -0.029182535, -0.11989968, 0.009492035, -0.017486516, -0.0062228492, -0.0058457484, 0.0016880172, -0.0069084316, 0.010007033, -0.028711826] -gra[13][12][6] = [-0.001125994, 0.0, -0.07098231, 0.0031763045, -0.0011805353, -0.0034213266, 0.0033354918, 0.0029879243, -0.0012010215, 0.0, -0.0034280284] -gra[13][12][7] = [-0.023003204, -0.020543642, -0.09406488, -0.0016975328, -0.024594164, -0.002074283, -0.0027638972, 0.008303378, -0.0046053967, 0.005100009, -0.017848626] -gra[13][12][8] = [-0.0019364218, 0.0, -0.08571632, -0.008282451, -0.01957223, -0.001433034, -0.031315595, 0.056441724, -1.2932688E-10, -0.018678546, -0.059202127] -gra[13][12][9] = [-0.015066513, -0.025901634, -0.08404164, 0.009492035, -0.014481828, -0.012445698, -0.009366741, 0.0016880166, -0.013032702, 0.005216337, -0.038446993] -gra[13][12][10] = [-0.0063372697, -0.0044693374, -0.005145481, 0.032773815, -0.004487824, 0.011536914, -0.028929772, -0.08269472, -0.004384591, 0.0020792785, -0.037663452] -gra[13][12][11] = [-0.018364029, -0.017836245, -0.08268196, -0.0022391165, -0.017753053, -0.005315918, -0.015622217, -5.865624E-10, -0.0069084316, 0.005216337, -0.0551992] -gra[13][12][12] = [-0.17809576, -0.20573048, -0.15939943, -0.20416664, -0.23387754, -0.17472892, -0.28127974, -0.2316979, -0.23132344, -0.17341352, -0.2193664] -gra[13][12][13] = [-0.17809576, -0.20573048, -0.15939943, -0.20416664, -0.23387754, -0.17472892, -0.28127974, -0.2316979, -0.23132344, -0.17341352, -0.2193664] -gra[13][14][13] = [0.35930407, -0.22164108, -0.15753579, 0.02877545, -0.22689001, -0.10909238, -0.14508441, -0.13638566] -gra[13][14][14] = [0.35930407, -0.22164108, -0.15753579, 0.02877545, -0.22689001, -0.10909238, -0.14508441, -0.13638566] -gra[14][0][0] = [-0.11582346] -gra[14][0][1] = [-0.014908389] -gra[14][0][2] = [0.0010477826] -gra[14][0][3] = [-0.017838294] -gra[14][0][4] = [-0.017838294] -gra[14][0][5] = [-0.020216068] -gra[14][0][6] = [-0.029175095] -gra[14][0][7] = [-0.01435264] -gra[14][0][8] = [-0.010619164] -gra[14][0][9] = [-0.021713208] -gra[14][0][10] = [-0.0076314593] -gra[14][0][11] = [-0.006081218] -gra[14][0][12] = [-0.029416047] -gra[14][0][13] = [-0.03016201] -gra[14][0][14] = [-0.11582346] -gra[14][1][0] = [0.0, -8.777529E-5] -gra[14][1][1] = [-0.18727827, -0.042910293] -gra[14][1][2] = [-0.084219776, 0.098065324] -gra[14][1][3] = [-0.05922804, 0.038104363] -gra[14][1][4] = [-0.060603417, 0.047129445] -gra[14][1][5] = [-0.032511078, 0.024256317] -gra[14][1][6] = [0.011354224, -0.029175095] -gra[14][1][7] = [-0.102742985, 0.075883195] -gra[14][1][8] = [0.024297003, -9.4162335E-4] -gra[14][1][9] = [-0.045367077, 0.05281453] -gra[14][1][10] = [-0.03284261, 0.023246054] -gra[14][1][11] = [-0.106667675, 0.09371514] -gra[14][1][12] = [-0.04622412, 0.051488757] -gra[14][1][13] = [0.009459454, 0.047508337] -gra[14][1][14] = [-0.18727827, -0.042910293] -gra[14][2][0] = [-0.0017319206, 0.0015840991, -0.008970131, -0.004802999, 0.0031306578, 0.0022224444, 0.0057375417, -0.0018251492] -gra[14][2][1] = [0.009210461, 0.0012506777, 0.023023957, -0.025324829, -8.747375E-4, -3.7906157E-11, -0.0035353543, 0.035236858] -gra[14][2][2] = [-0.17584763, -0.5290194, -0.22025661, -0.23991603, -0.19399358, -0.12639932, -0.13731577, -0.289827] -gra[14][2][3] = [-0.05571494, 0.1321193, -0.14931351, -0.03905928, 0.0, -0.0024315235, -2.567261E-4, -0.0076815435] -gra[14][2][4] = [-0.05911336, 0.15121338, -0.17879, -0.019467322, -0.0016386209, -0.0024315235, -0.001026748, -0.0106770415] -gra[14][2][5] = [-0.080596365, 0.2223057, -0.14741457, -0.009105388, 0.0, 0.0013912377, -0.0023956841, -0.0148373395] -gra[14][2][6] = [-0.06015315, 0.04232933, -0.08102358, 0.018965898, 0.0, -0.0020981468, -0.0014585715, -0.015615815] -gra[14][2][7] = [-0.042910974, -0.0024921368, -0.21345621, 0.011247204, 0.0024165655, 0.0013912377, 0.0012619573, 0.005793425] -gra[14][2][8] = [4.0656445E-4, 0.04207531, -0.012648034, 0.04502165, 0.0, -0.03310725, -0.004949766, -0.021638526] -gra[14][2][9] = [-0.07297369, 0.024562055, -0.16602206, 0.04623389, -6.163665E-11, 2.7830654E-4, -0.0052100876, -0.010190327] -gra[14][2][10] = [-0.024243463, -0.07057921, -0.0720616, 0.10349874, 2.4562495E-4, 0.011989316, 0.0041656997, -0.04276061] -gra[14][2][11] = [-0.06124546, -0.029336883, -0.16942665, 0.04144257, -0.0017203483, -0.0024315235, 0.009988822, 0.008239418] -gra[14][2][12] = [-0.040389307, -3.8161967E-4, -0.20168869, 0.023762133, 0.0, -0.0024315235, -4.8080023E-4, 0.0055930368] -gra[14][2][13] = [-0.053557433, 0.004121064, -0.14622559, 0.034124065, 0.0, 0.0013912377, -4.8080023E-4, -0.0010566153] -gra[14][2][14] = [-0.17584763, -0.5290194, -0.22025661, -0.23991603, -0.19399358, -0.12639932, -0.13731577, -0.289827] -gra[14][3][0] = [-0.0026303222, -0.0045454036, -0.006932474, -2.737789E-4, 0.0031306578, 0.0022224444, 0.0020929475, -0.0018251492] -gra[14][3][1] = [-0.0019154843, -0.0065884185, -0.020415306, -0.04629868, -8.747375E-4, 0.0, -0.009747193, 0.07975232] -gra[14][3][2] = [0.03537799, -0.03127152, -0.066523835, -0.020764088, -0.002263308, -0.0024273172, 0.0, 0.0045674103] -gra[14][3][3] = [-0.26069072, -0.17578714, -0.22939655, -0.33574775, -0.21334341, -0.16601574, -0.19320112, -0.42314297] -gra[14][3][4] = [-0.013265513, 0.23243552, 0.029085482, -0.047924884, -0.0016386209, -0.0024315235, 0.0054333983, -0.007172498] -gra[14][3][5] = [-0.037040286, 0.3100581, 0.04996314, -0.009560844, 0.0, 0.0013912377, 0.004064462, -0.012930402] -gra[14][3][6] = [-0.04822219, 0.09151792, -0.0588836, 0.013563308, -0.0029920721, 0.0, 0.0022967334, -0.010240156] -gra[14][3][7] = [-0.031530757, 0.02315667, -0.025445353, -0.011832221, 0.0024165655, 0.0013912377, 0.004234272, 0.009442069] -gra[14][3][8] = [0.002375652, 0.10702352, -0.044432443, 0.042960316, 0.0, -0.027821539, -0.004949766, -5.2614184E-4] -gra[14][3][9] = [-0.049165167, 0.15115647, 0.012704274, -0.0016810335, 3.0514854E-4, 0.0013912377, -8.933363E-4, 0.011169758] -gra[14][3][10] = [-0.030184396, -0.041988403, -0.01473039, 0.03447505, -6.6610676E-4, 0.004675532, 0.0020460146, -0.016954768] -gra[14][3][11] = [-0.0631195, 0.064332634, -0.046878092, -0.026811987, -0.0017203483, -0.0024315235, 0.0010153182, 0.022335548] -gra[14][3][12] = [-0.041915108, 0.14047132, 0.010500541, -0.022011831, 0.0, -0.0024315235, -0.0031573072, 0.018789113] -gra[14][3][13] = [-0.055083245, 0.14279011, 0.06103932, -0.004049799, 5.773879E-11, 0.0013912377, -0.0031573072, 0.012139461] -gra[14][3][14] = [-0.26069072, -0.17578714, -0.22939655, -0.33574775, -0.21334341, -0.16601574, -0.19320112, -0.42314297] -gra[14][4][0] = [-1.0599452E-4, -0.0020210762, -0.006932474, -2.737789E-4, 0.0031306578, 0.0022224444, 0.0020929475, -0.0018251492] -gra[14][4][1] = [-0.0019154843, -0.0065884185, -0.020415306, -0.04629868, -8.747375E-4, 0.0, -0.009747193, 0.07975232] -gra[14][4][2] = [0.010398943, -0.043829054, -0.1425881, -0.02309995, -0.002263308, -0.0024273172, 0.0, 0.007836706] -gra[14][4][3] = [0.013334723, 0.0012160586, 6.9185626E-4, -0.013261375, 0.0, -1.3790699E-4, 0.0, 1.12758145E-11] -gra[14][4][4] = [-0.26069072, -0.18989517, -0.27152574, -0.33574775, -0.21334341, -0.16834494, -0.19320112, -0.4200369] -gra[14][4][5] = [-0.035620213, 0.28389117, 0.05872181, -0.0307553, -0.0030399878, 0.0013912377, 0.004064462, -0.011332796] -gra[14][4][6] = [-0.04822219, 0.09151792, -0.06093113, 0.013563308, -0.0029920721, -0.0015748128, 9.863207E-4, -0.010240156] -gra[14][4][7] = [-0.031530757, 0.021498462, -0.029571723, -0.011330896, 0.0024165655, 0.0013912377, 0.004234272, 0.009442069] -gra[14][4][8] = [0.002375652, 0.11166462, -0.044432443, 0.042960316, 0.0, -0.027821539, -0.004949766, -5.2614184E-4] -gra[14][4][9] = [-0.049165167, 0.14949825, 0.0085779065, -4.7380285E-4, 0.0, 0.0013912377, -8.933363E-4, 0.011169758] -gra[14][4][10] = [-0.030184396, -0.041988403, -0.019537935, 0.03447505, -6.6610676E-4, 0.004675532, -2.5162264E-4, -0.016954768] -gra[14][4][11] = [-0.0631195, 0.06267442, -0.051004462, -0.028066896, -0.0017203483, -0.0024315235, 0.0010153182, 0.022335548] -gra[14][4][12] = [-0.041915108, 0.13881311, 0.004983356, -0.020804603, 0.0, -0.0024315235, -0.0031573072, 0.018789113] -gra[14][4][13] = [-0.055083245, 0.14525777, 0.05691296, -0.010442665, 0.0, 0.0013912377, -0.0031573072, 0.012139461] -gra[14][4][14] = [-0.26069072, -0.18989517, -0.27152574, -0.33574775, -0.21334341, -0.16834494, -0.19320112, -0.4200369] -gra[14][5][0] = [-1.0599452E-4, -0.004087028, -0.006932474, -2.737789E-4, -0.0023391629, 2.9284216E-4, 7.1531534E-4, -0.0018251492] -gra[14][5][1] = [-0.008619444, 0.024646414, -0.031586535, -0.038160633, -8.747375E-4, 0.0, -0.009747193, 0.07975232] -gra[14][5][2] = [0.009676101, -0.04146135, -0.13461716, -0.017704962, -0.002263308, -0.0024273172, 0.0, 0.004819586] -gra[14][5][3] = [0.011478803, -0.004468556, -0.06786775, -0.0102022495, 0.0, 3.2835128E-4, 0.0, 0.0] -gra[14][5][4] = [0.0144154765, 0.00820452, 0.0100524295, -0.013484061, 0.0036782513, 0.0011214141, -0.0065619284, -0.0015741112] -gra[14][5][5] = [-0.27411464, -0.120020434, -0.25785366, -0.27318767, -0.21334341, -0.16164015, -0.16145964, -0.39188594] -gra[14][5][6] = [-0.047031157, 0.07410885, -0.059514217, 0.013563308, -0.0029920721, 0.0, 0.0022967334, -0.013210811] -gra[14][5][7] = [-0.030110683, 0.009325346, -0.04227817, -0.018138546, 4.886615E-13, 0.0013912377, 0.004234272, 0.009442069] -gra[14][5][8] = [0.002375652, 0.12489207, -0.06490553, 0.02949611, 0.0, -0.020617187, -0.004949766, 0.008508578] -gra[14][5][9] = [-0.047745094, 0.13283329, 0.0049973363, -0.012881876, 0.0, 0.0013912377, 0.011213072, 0.011169758] -gra[14][5][10] = [-0.030184396, -0.041040756, -0.012089748, 0.03194514, -0.0058568846, 0.004675532, -2.5162264E-4, -0.016954768] -gra[14][5][11] = [-0.061699428, 0.0680023, -0.06149379, -0.029904917, -0.0017203483, -0.0024315235, 0.0010153182, 0.022335548] -gra[14][5][12] = [-0.040495034, 0.12351453, 0.011489054, -0.033212673, 0.0, -0.0024315235, -0.0031573072, 0.018789113] -gra[14][5][13] = [-0.05366317, 0.12029423, 0.05981072, -0.022850737, 0.0, 0.0013912377, -0.0031573072, 0.012139461] -gra[14][5][14] = [-0.27411464, -0.120020434, -0.25785366, -0.27318767, -0.21334341, -0.16164015, -0.16145964, -0.39188594] -gra[14][6][0] = [0.0, -0.0017319206] -gra[14][6][1] = [0.12703063, -0.0022489373] -gra[14][6][2] = [-0.022769202, 0.0030428797] -gra[14][6][3] = [0.034883343, -7.346576E-4] -gra[14][6][4] = [0.02350668, 0.0022020158] -gra[14][6][5] = [0.106837645, -0.008857531] -gra[14][6][6] = [-0.20986222, -0.3650282] -gra[14][6][7] = [-0.045771867, -0.024621688] -gra[14][6][8] = [0.1393876, -0.031599853] -gra[14][6][9] = [-0.09390008, -0.034672163] -gra[14][6][10] = [0.055199683, -0.009840637] -gra[14][6][11] = [-0.07764719, -0.021925328] -gra[14][6][12] = [0.0073627643, -0.042553928] -gra[14][6][13] = [0.03508615, -0.041654322] -gra[14][6][14] = [-0.20986222, -0.3650282] -gra[14][7][0] = [-0.0017319206, 0.0015840991, -0.0053907144, -2.737789E-4, 5.7391827E-11, 0.0022224444, -0.0015122276, -0.0018251492] -gra[14][7][1] = [0.002611183, -0.006051983, -0.0054820664, -0.02711114, -8.747375E-4, 0.0, -0.005605967, 0.0440036] -gra[14][7][2] = [0.008299174, -0.0092912465, -0.12444562, -0.02264732, 1.5084875E-10, -0.0024273172, 0.0, 0.0052266098] -gra[14][7][3] = [0.009603571, 0.010891726, -0.054848146, -0.010514407, -6.894202E-4, -0.011752027, 0.008403905, 0.0016880172] -gra[14][7][4] = [0.0125402445, 0.013179652, -0.051907387, -0.01613208, 2.1011333E-12, -0.010492706, 0.0018419763, 1.1390599E-4] -gra[14][7][5] = [0.0060317433, 0.013192974, 0.031289365, -0.011442969, 0.0, -0.010492706, 0.008564835, 0.0016880172] -gra[14][7][6] = [-0.0023392674, -2.9609003E-4, 0.051154956, 8.188048E-4, 0.003376759, -9.316074E-4, 0.0047623203, 0.0] -gra[14][7][7] = [-0.2736663, -0.42253086, -0.29094955, -0.106400095, -0.18950677, -0.16876397, -0.10730179, -0.20419195] -gra[14][7][8] = [-0.0041071055, 0.07480537, -0.058009043, 0.049434684, 0.0, -0.023188654, -0.0010114948, -0.0053425874] -gra[14][7][9] = [-0.057346717, -0.008121707, -0.08895983, 0.07310873, 2.4217142E-11, 0.0013912377, -0.008979938, -0.0029689788] -gra[14][7][10] = [-0.0016489569, -0.08187189, -0.017802957, 0.0889959, -0.008904799, 0.008127116, 1.516263E-4, -0.021788862] -gra[14][7][11] = [-0.04620337, -0.033882786, -0.14774089, 0.07991551, -0.0017203483, -0.0024315235, 4.1989092E-4, 0.004138265] -gra[14][7][12] = [-0.03438083, -0.032883566, -0.10764899, 0.065985955, 2.4217142E-11, -0.0058259796, -0.0042444626, 0.012879416] -gra[14][7][13] = [-0.047548957, -0.028914813, -0.06369143, 0.07584944, 2.4217142E-11, -0.002003218, -0.0042444626, 0.008871366] -gra[14][7][14] = [-0.2736663, -0.42253086, -0.29094955, -0.106400095, -0.18950677, -0.16876397, -0.10730179, -0.20419195] -gra[14][8][0] = [0.0, 0.005871886] -gra[14][8][1] = [0.095702, 0.06588329] -gra[14][8][2] = [-0.08645788, 0.019448427] -gra[14][8][3] = [-0.03433526, 0.004897557] -gra[14][8][4] = [-0.031394515, 0.02027118] -gra[14][8][5] = [0.05303327, 0.008630428] -gra[14][8][6] = [0.050987773, -0.007944579] -gra[14][8][7] = [0.022163775, 0.00545556] -gra[14][8][8] = [-0.14465323, -0.23231457] -gra[14][8][9] = [-0.050460912, 0.036257178] -gra[14][8][10] = [-0.0044299643, 0.084959425] -gra[14][8][11] = [-0.11915645, 0.033481665] -gra[14][8][12] = [-0.0385441, -0.031666603] -gra[14][8][13] = [0.019052131, -0.009138332] -gra[14][8][14] = [-0.14465323, -0.23231457] -gra[14][9][0] = [-0.0017319206, -0.0020210762, -0.006932474, -0.0021550937, 5.7391827E-11, 0.0022224444, 0.009342717, -0.0018251492] -gra[14][9][1] = [0.0019209567, 0.01677084, 0.0029437453, -0.0043431697, -8.747375E-4, 0.0, -0.009747193, 0.042977948] -gra[14][9][2] = [0.008543024, -0.034551438, -0.13745174, -0.014523609, -0.002263308, -0.0024273172, 0.0, -0.0017202278] -gra[14][9][3] = [0.010390673, -0.015848102, -0.07240544, -0.0102022495, 0.0, -0.0036866383, 0.0010881304, 0.0] -gra[14][9][4] = [0.013327346, -0.013560179, -0.06946468, -0.015819924, 2.1011333E-12, -0.0024273172, -0.005473798, -0.0015741112] -gra[14][9][5] = [0.006818845, -0.013546857, 0.013732083, -0.005708046, 0.0, -0.0024273172, 0.0012490614, 0.0] -gra[14][9][6] = [-0.0012785172, 0.00325728, 0.04692239, -8.82955E-4, -0.0025067397, 0.0, 0.002083107, 8.46158E-4] -gra[14][9][7] = [0.008543024, -0.0074314885, 0.007830054, -0.011769962, -0.0022633083, 0.03059784, -8.487665E-4, 0.004819586] -gra[14][9][8] = [-0.014772522, 0.009046948, -0.0654257, -0.0023759985, 0.0, 0.0, 0.0021252728, 0.024574166] -gra[14][9][9] = [-0.18775843, -0.37637526, -0.23955697, -0.26414376, -0.21396284, -0.12595381, -0.10222481, -0.23771174] -gra[14][9][10] = [-0.03320362, -0.098906405, -0.007155558, 0.043116514, -0.007993068, 0.004675532, 0.0021240492, -0.029944744] -gra[14][9][11] = [-0.07412598, -0.05661683, -0.015585691, -0.021262497, -0.0017203483, -0.0024315235, 0.013955217, 0.031817872] -gra[14][9][12] = [-0.04595394, -0.025789274, 0.093209125, -0.025386075, 0.0, -0.0024315235, 0.0024269857, 0.031249907] -gra[14][9][13] = [-0.06253972, -0.03147722, 0.13741048, -0.014771162, 0.0, -0.0019102512, 0.0024269857, 0.027304392] -gra[14][9][14] = [-0.18775843, -0.37637526, -0.23955697, -0.26414376, -0.21396284, -0.12595381, -0.10222481, -0.23771174] -gra[14][10][0] = [0.0016535555, 3.2741146E-4, 0.003204043, 1.1323892E-10] -gra[14][10][1] = [0.030359399, 0.07058733, -0.017545186, 0.0] -gra[14][10][2] = [-0.09626371, -0.008757901, -0.013296669, -0.0016921958] -gra[14][10][3] = [-0.041435387, -0.018708255, 0.002196358, -0.001692196] -gra[14][10][4] = [-0.038581695, -0.015771583, 0.0044842823, -0.001692196] -gra[14][10][5] = [0.049655966, -0.022280084, 0.002196358, -0.001692196] -gra[14][10][6] = [0.05007869, -6.89765E-4, -0.011463992, 0.0031626287] -gra[14][10][7] = [0.042304426, -0.013025224, 6.205952E-4, -0.001692196] -gra[14][10][8] = [-0.058169376, 0.02240749, 0.011389386, 0.0] -gra[14][10][9] = [-0.0039507775, -0.016944697, -0.0052801343, -0.0016921958] -gra[14][10][10] = [-0.32598376, -0.089373134, -0.42189366, -0.12931946] -gra[14][10][11] = [-0.011033574, 0.07895074, 0.022978501, 0.0019329089] -gra[14][10][12] = [0.040658515, 0.058160074, 0.018748194, 4.5780465E-4] -gra[14][10][13] = [0.07926445, 0.062513635, -0.0019399691, 9.091237E-4] -gra[14][10][14] = [-0.32598376, -0.089373134, -0.42189366, -0.12931946] -gra[14][11][0] = [-0.0017319206, -0.0020210762, -0.006932474, -0.0029216837, 0.0031306578, 0.0022224444, 0.0020929475, 1.9265735E-4] -gra[14][11][1] = [0.009894438, -0.025603905, 0.005041209, -0.019387899, -8.747375E-4, -3.7906157E-11, -0.005605967, 0.049525008] -gra[14][11][2] = [0.012047265, -0.023770321, -0.14157864, -0.018074542, -0.0038321887, -0.0024273172, 0.0, 0.007836706] -gra[14][11][3] = [0.011515043, -0.00521922, -0.07476257, -0.013261375, 0.0, -0.0036866383, 0.0010881305, 0.0030171203] -gra[14][11][4] = [0.014451717, -0.0029312975, -0.07182182, -0.01887905, 2.1011333E-12, -0.0024273172, -0.005473798, 0.0014430091] -gra[14][11][5] = [0.007943215, 8.847595E-4, 0.011374953, -0.013261375, 0.0, -0.0024273172, -0.0012047905, -7.2720836E-6] -gra[14][11][6] = [-5.5476942E-12, 0.0021639597, 0.043663118, 8.188048E-4, -0.0025067397, 0.0, 0.0031763045, 0.0] -gra[14][11][7] = [0.010155093, -0.0013697359, 0.0019494435, -0.017164951, 0.0, -5.7599705E-4, -8.487664E-4, 0.004819586] -gra[14][11][8] = [-0.015143082, -0.028094402, -0.06812735, -0.0042073233, 0.0, 0.0, 0.0021252728, 0.04212567] -gra[14][11][9] = [0.017680958, 0.0011989512, -0.042761106, -0.012579497, -0.0038321887, -0.0024273172, 0.0010881305, 0.0] -gra[14][11][10] = [0.10300264, -0.04740205, -0.034849335, -0.0068523446, 0.003984191, -0.011439133, 0.027201029, -0.07176561] -gra[14][11][11] = [-0.13174748, -0.4127771, -0.2476984, -0.16385658, -0.22010909, -0.13418928, -0.10745787, -0.21812226] -gra[14][11][12] = [-0.03901305, -0.01084387, 0.034373622, -0.046552837, -0.004892796, -0.0024315235, 0.00362852, 0.0065014227] -gra[14][11][13] = [-0.052112397, 0.03198275, 0.06561172, -0.01938964, 0.0, 0.0013912377, 0.00362852, -0.005294564] -gra[14][11][14] = [-0.13174748, -0.4127771, -0.2476984, -0.16385658, -0.22010909, -0.13418928, -0.10745787, -0.21812226] -gra[14][12][0] = [-1.0599452E-4, -0.0020210762, -0.006932474, -2.737789E-4, 0.0031306578, 0.0022224444, 0.0020929475, -0.0018251492] -gra[14][12][1] = [-8.8162685E-4, -6.848867E-4, -0.01981195, -0.05071387, -8.747375E-4, 0.0, -0.009747193, 0.07975232] -gra[14][12][2] = [0.010398943, -0.028204845, -0.13535935, -0.022958368, 1.5084875E-10, -0.0024273172, 0.0, 0.007836706] -gra[14][12][3] = [0.022394357, -0.005284174, -0.06688294, -0.016871221, 0.0, -0.011285769, 0.009492035, 0.0047051376] -gra[14][12][4] = [0.014039585, -0.0029962487, -0.063942194, -0.022488894, 2.1011333E-12, -0.0100264475, 0.0029301066, 0.0031310264] -gra[14][12][5] = [0.007531083, -6.81683E-4, 0.019254586, -0.016871221, 0.0, -0.0100264475, 0.009652967, 0.0016880172] -gra[14][12][6] = [-1.1091661E-10, -0.0046882727, 0.048567124, 8.188048E-4, -0.0025067397, 0.0, 0.0031763045, 0.0] -gra[14][12][7] = [0.010398943, -4.2611733E-5, 0.013992602, -0.02311066, 0.0, -5.7599705E-4, -8.487664E-4, 0.004819586] -gra[14][12][8] = [-0.015492963, 0.0014628633, -0.08022591, -0.031336557, 0.0, 0.0, -0.0020159527, 0.056492005] -gra[14][12][9] = [0.017024977, -0.005443506, -0.030536842, -0.015520515, 1.5084875E-10, -0.010492706, 0.009492035, 0.0016880172] -gra[14][12][10] = [0.01890654, -0.017414961, -0.023150582, -0.009890772, 0.00846618, -0.008658591, 0.0515223, -0.086118296] -gra[14][12][11] = [0.023150899, 5.922683E-4, -0.07096923, -0.016346559, -0.002111407, -0.004783477, -0.0022391165, 0.0] -gra[14][12][12] = [-0.23819716, -0.45526987, -0.26443404, -0.25669253, -0.21316737, -0.19598888, -0.16998905, -0.2994849] -gra[14][12][13] = [-0.03364171, 0.016109705, 0.1436839, 0.01834002, 0.0, 0.0038268352, -0.0037499052, 0.0018075759] -gra[14][12][14] = [-0.23819716, -0.45526987, -0.26443404, -0.25669253, -0.21316737, -0.19598888, -0.16998905, -0.2994849] -gra[14][13][0] = [-1.0599452E-4, 0.0, -0.006932474, -2.737789E-4, 3.0349702E-11, 0.0022224444, 0.0020929475, -0.0032232394] -gra[14][13][1] = [-0.0064263684, 0.032257907, -0.073842674, -0.042575825, -8.747375E-4, 0.0, -0.013392032, 0.07975232] -gra[14][13][2] = [0.008543024, -0.023793714, -0.08331758, -0.015909398, -4.115616E-11, -0.0024273172, 0.0, 0.004819586] -gra[14][13][3] = [0.009246991, -0.003999448, -0.024953874, -0.011476233, 0.0, -0.011285769, 0.009492035, 0.0016880172] -gra[14][13][4] = [0.012183664, -0.0017115228, -0.02201313, -0.01957027, 2.1011333E-12, -0.0100264475, 0.0029301066, 1.1390599E-4] -gra[14][13][5] = [0.009246991, 6.0304295E-4, 0.016605025, -0.011476233, 0.0, -0.0100264475, 0.009492035, 0.0016880172] -gra[14][13][6] = [0.0, -0.0022572777, 0.05019716, 0.0, -0.0025067397, 0.0, 0.0031763045, 0.0] -gra[14][13][7] = [0.011328364, 1.3491325E-4, 0.018187441, -0.015379808, 0.0, -5.7599705E-4, -8.487664E-4, 0.005930855] -gra[14][13][8] = [-0.021037703, 0.028769845, -0.100073226, -0.02493851, 0.0, 0.0, -0.005660792, 0.056492005] -gra[14][13][9] = [0.015169059, -0.0041424744, -0.020650156, -0.008471542, -4.115616E-11, -0.010492706, 0.009492035, 0.0016880172] -gra[14][13][10] = [0.024620136, -0.013816819, -0.008670685, -0.022165136, 0.006513544, -0.008658591, 0.053646676, -0.077163056] -gra[14][13][11] = [0.02129498, -0.007425433, -0.08519275, -0.010228307, -0.002111407, -0.004783477, -0.0022391165, 0.0] -gra[14][13][12] = [0.013093872, 0.010518471, -0.011354735, -0.008471542, 0.0020460575, -0.0024273172, 0.0, 0.0] -gra[14][13][13] = [-0.3152193, -0.4017373, -0.16526677, -0.19256514, -0.19967724, -0.19260567, -0.1575356, -0.23550606] -gra[14][13][14] = [-0.3152193, -0.4017373, -0.16526677, -0.19256514, -0.19967724, -0.19260567, -0.1575356, -0.23550606] diff --git a/dependencyParser/examples/edges output.txt b/dependencyParser/examples/edges output.txt deleted file mode 100644 index c1e80e8..0000000 --- a/dependencyParser/examples/edges output.txt +++ /dev/null @@ -1,552 +0,0 @@ -edges[5][6] = [9] -edges[5][7] = [9, 17] -edges[5][8] = [9, 17, 30] -edges[5][9] = [9] -edges[5][10] = [9, 24, 26, 4] -edges[5][11] = [9] -edges[5][12] = [9] -edges[5][13] = [9] -edges[5][14] = [9] -edges[5][15] = [9] -edges[5][16] = [9] -edges[5][17] = [9, 17] -edges[5][18] = [9, 26, 14, 24, 6, 4] -edges[5][21] = [9] -edges[5][22] = [9] -edges[5][23] = [9] -edges[5][24] = [9] -edges[5][25] = [9] -edges[5][26] = [9] -edges[5][28] = [9] -edges[5][29] = [9, 17] -edges[5][31] = [9] -edges[5][32] = [9] -edges[5][37] = [9] -edges[6][6] = [4] -edges[6][7] = [5, 8, 21, 10, 4, 17] -edges[6][9] = [21, 5, 15, 4, 17] -edges[6][10] = [11, 5, 31] -edges[6][12] = [5, 4, 21, 10, 17] -edges[6][13] = [5] -edges[6][14] = [4, 21, 18] -edges[6][15] = [21, 4, 5] -edges[6][18] = [5, 4] -edges[6][19] = [5] -edges[6][20] = [5, 21] -edges[6][21] = [5] -edges[6][22] = [21] -edges[6][23] = [5] -edges[6][26] = [5] -edges[6][27] = [5] -edges[6][29] = [5, 4, 21, 8] -edges[6][35] = [21, 5] -edges[6][37] = [5, 31, 4] -edges[6][39] = [5, 21] -edges[6][40] = [5] -edges[6][41] = [5] -edges[7][6] = [4, 8, 5, 21, 28, 17] -edges[7][7] = [7, 8, 4, 5, 10, 21, 15, 12, 31, 30, 17] -edges[7][8] = [4, 20] -edges[7][9] = [4, 8, 21, 5, 6, 17, 7] -edges[7][10] = [11, 4, 5, 8, 20, 31, 7, 21] -edges[7][11] = [4, 20, 30] -edges[7][12] = [4, 5, 7, 8] -edges[7][13] = [4, 8, 20, 14, 5] -edges[7][14] = [4, 18, 16] -edges[7][15] = [4, 19, 21] -edges[7][16] = [4, 20] -edges[7][17] = [14, 4, 20, 7] -edges[7][18] = [4, 8, 20, 5, 7, 10, 14, 21] -edges[7][19] = [4, 5, 10] -edges[7][20] = [4, 5] -edges[7][21] = [4] -edges[7][22] = [4] -edges[7][23] = [4] -edges[7][24] = [4, 20] -edges[7][26] = [4, 5] -edges[7][27] = [8, 7, 4, 5] -edges[7][28] = [4, 20] -edges[7][29] = [4, 5, 8, 7] -edges[7][31] = [4] -edges[7][32] = [4] -edges[7][34] = [4] -edges[7][37] = [4, 7, 8, 31, 5, 21] -edges[7][39] = [4, 8, 7] -edges[7][40] = [4] -edges[7][41] = [4] -edges[8][6] = [4, 5, 15, 21] -edges[8][7] = [6, 10, 12, 4, 15, 30] -edges[8][8] = [10, 20, 6, 13, 4, 30] -edges[8][9] = [10, 15, 6, 12, 4, 5] -edges[8][10] = [11, 15, 6, 4, 14, 12, 5, 20, 10, 31, 30] -edges[8][11] = [20, 10, 6, 4, 30] -edges[8][12] = [4, 10, 6, 12] -edges[8][13] = [20, 14, 4, 15, 12, 10] -edges[8][14] = [4, 16, 18, 23, 10, 5, 19] -edges[8][15] = [4, 15, 5, 20, 30, 19] -edges[8][16] = [20] -edges[8][17] = [14, 20, 6, 4, 10] -edges[8][18] = [4, 6, 12, 10, 20, 15, 5, 14] -edges[8][19] = [10, 12, 6, 4, 15, 30] -edges[8][20] = [12, 10, 4] -edges[8][21] = [6, 15, 10] -edges[8][22] = [19, 4] -edges[8][23] = [20, 4] -edges[8][24] = [20, 10, 30] -edges[8][25] = [22] -edges[8][26] = [10, 12, 6, 4] -edges[8][27] = [6, 4, 10] -edges[8][28] = [13, 20, 30] -edges[8][29] = [4, 12, 10, 6] -edges[8][31] = [4] -edges[8][32] = [30] -edges[8][33] = [6] -edges[8][34] = [4] -edges[8][37] = [30, 10, 6, 4, 31, 12] -edges[8][38] = [6] -edges[8][39] = [6, 4] -edges[8][40] = [4, 30] -edges[9][6] = [4, 5, 28, 21] -edges[9][7] = [12, 7, 5, 8, 4, 10, 6, 21] -edges[9][8] = [20, 4] -edges[9][9] = [4, 21] -edges[9][10] = [11, 21, 25, 4] -edges[9][11] = [20, 4] -edges[9][12] = [5, 4] -edges[9][13] = [4] -edges[9][14] = [4, 18] -edges[9][15] = [4] -edges[9][17] = [14] -edges[9][18] = [20, 5, 4] -edges[9][19] = [4, 12, 5] -edges[9][20] = [5] -edges[9][21] = [4] -edges[9][22] = [19, 4] -edges[9][23] = [4] -edges[9][24] = [20, 4] -edges[9][26] = [12, 5] -edges[9][27] = [8] -edges[9][29] = [5] -edges[9][31] = [4] -edges[9][37] = [4, 8] -edges[10][6] = [17, 4] -edges[10][7] = [4, 6, 17, 10, 21, 8, 5, 12] -edges[10][8] = [17, 4] -edges[10][9] = [17, 4, 6, 21] -edges[10][10] = [11, 17, 4, 31, 9] -edges[10][11] = [17, 4] -edges[10][12] = [21, 17, 6, 12] -edges[10][13] = [17, 4] -edges[10][14] = [17, 4] -edges[10][15] = [17, 4] -edges[10][16] = [17] -edges[10][17] = [17] -edges[10][18] = [17, 4, 21] -edges[10][19] = [10] -edges[10][20] = [17] -edges[10][21] = [17, 4] -edges[10][22] = [19, 4, 17] -edges[10][23] = [17] -edges[10][24] = [17] -edges[10][25] = [22] -edges[10][26] = [6] -edges[10][27] = [17, 21, 4, 5] -edges[10][28] = [17] -edges[10][29] = [17] -edges[10][30] = [17] -edges[10][31] = [17] -edges[10][32] = [17] -edges[10][37] = [21, 8, 17, 31, 6, 5, 4] -edges[10][40] = [4] -edges[11][6] = [5, 4, 21, 15] -edges[11][7] = [15, 6, 10, 12, 4, 30] -edges[11][8] = [20, 10, 6, 4, 30] -edges[11][9] = [6, 15, 12, 10, 5, 4] -edges[11][10] = [11, 6, 15, 10, 12, 5, 4, 20, 8, 31] -edges[11][11] = [20, 6, 4, 10, 30] -edges[11][12] = [12, 6, 10, 4, 15, 30] -edges[11][13] = [15, 20, 6, 14, 4, 10] -edges[11][14] = [4, 18, 16, 10, 29, 5, 15, 19] -edges[11][15] = [5, 4, 15, 12, 10] -edges[11][16] = [20, 6] -edges[11][17] = [14, 6, 20, 4, 10] -edges[11][18] = [4, 15, 10, 6, 20, 5, 12, 14] -edges[11][19] = [12, 10, 6, 15, 4] -edges[11][20] = [12, 4, 10] -edges[11][21] = [12, 6, 15] -edges[11][22] = [19, 4, 6, 20] -edges[11][23] = [6, 20] -edges[11][24] = [20, 6, 30, 4] -edges[11][26] = [10, 6, 12, 4, 15] -edges[11][27] = [4, 5, 6, 10] -edges[11][28] = [20, 4, 10] -edges[11][29] = [6, 12, 10, 15] -edges[11][31] = [4] -edges[11][32] = [14, 20] -edges[11][33] = [6, 4] -edges[11][34] = [4] -edges[11][36] = [15, 4] -edges[11][37] = [15, 6, 31, 4, 12, 10] -edges[11][40] = [4] -edges[12][6] = [4, 5] -edges[12][7] = [5, 21, 4, 17, 10] -edges[12][8] = [4, 20] -edges[12][9] = [5, 4, 21] -edges[12][10] = [11, 5, 21, 31] -edges[12][11] = [4, 20] -edges[12][12] = [4, 21] -edges[12][13] = [4, 5, 20] -edges[12][14] = [4] -edges[12][15] = [4] -edges[12][18] = [5] -edges[12][19] = [5] -edges[12][21] = [4] -edges[12][23] = [4] -edges[12][24] = [20] -edges[12][26] = [5] -edges[12][27] = [21, 5, 4] -edges[12][29] = [5] -edges[12][37] = [5, 21] -edges[13][6] = [4, 5, 28] -edges[13][7] = [6, 12, 15, 4, 5, 8] -edges[13][8] = [13, 20] -edges[13][9] = [6, 4, 12] -edges[13][10] = [11, 5, 12, 6, 28, 4] -edges[13][11] = [13, 20] -edges[13][12] = [6, 4] -edges[13][14] = [4, 18] -edges[13][15] = [4, 5, 21] -edges[13][17] = [13, 4] -edges[13][18] = [6, 12, 4, 5, 28] -edges[13][19] = [12, 6, 4] -edges[13][20] = [12] -edges[13][22] = [19, 4] -edges[13][24] = [6] -edges[13][26] = [12] -edges[13][27] = [4] -edges[13][28] = [13] -edges[13][29] = [12, 6] -edges[13][31] = [4] -edges[13][32] = [13, 4] -edges[13][37] = [12, 4, 31, 6] -edges[14][6] = [4, 17, 21] -edges[14][7] = [17, 21, 5, 4, 6] -edges[14][8] = [20] -edges[14][9] = [17] -edges[14][10] = [11] -edges[14][14] = [4, 21, 18] -edges[14][15] = [21, 5, 4] -edges[14][17] = [14] -edges[14][22] = [21, 4] -edges[14][25] = [22] -edges[15][6] = [4, 21, 5] -edges[15][7] = [4, 6, 17, 5] -edges[15][8] = [20, 4] -edges[15][10] = [11, 14, 20] -edges[15][11] = [4, 20] -edges[15][13] = [21, 20] -edges[15][14] = [4, 21, 18] -edges[15][15] = [4, 21, 5] -edges[15][16] = [20] -edges[15][17] = [14, 20] -edges[15][18] = [20, 14, 5, 21, 4] -edges[15][22] = [19, 4] -edges[15][23] = [20] -edges[15][24] = [20, 4] -edges[15][26] = [4, 12] -edges[15][28] = [13, 20] -edges[16][6] = [4] -edges[16][7] = [6, 4] -edges[16][8] = [13] -edges[16][9] = [6] -edges[16][10] = [11, 4, 14] -edges[16][12] = [6] -edges[16][13] = [14] -edges[16][14] = [4, 16, 18] -edges[16][15] = [4] -edges[16][17] = [14] -edges[16][18] = [14, 4, 6] -edges[16][19] = [6] -edges[16][22] = [4, 19] -edges[16][25] = [22] -edges[16][26] = [6] -edges[16][29] = [6] -edges[16][37] = [6, 4] -edges[17][6] = [4, 5, 12, 15, 21] -edges[17][7] = [10, 12, 4, 15, 6, 5] -edges[17][8] = [20, 10] -edges[17][9] = [15, 6, 12, 10, 5, 4] -edges[17][10] = [11, 10, 15, 4, 20, 5, 31] -edges[17][11] = [20, 10, 4, 30, 21] -edges[17][12] = [4, 10, 12, 6] -edges[17][13] = [10, 4, 20] -edges[17][14] = [16, 18, 4, 10, 21] -edges[17][15] = [4, 15, 5] -edges[17][17] = [14] -edges[17][18] = [20, 10, 4, 6, 12, 5, 15] -edges[17][19] = [10, 4, 12, 15, 6, 5] -edges[17][20] = [12, 10, 4] -edges[17][22] = [4, 19] -edges[17][23] = [10, 20] -edges[17][24] = [10, 20] -edges[17][26] = [10, 12, 5, 4, 6] -edges[17][27] = [4, 12] -edges[17][28] = [13] -edges[17][29] = [10, 12, 15] -edges[17][31] = [4] -edges[17][34] = [4] -edges[17][37] = [10, 12, 31] -edges[18][6] = [4, 28, 17, 5] -edges[18][7] = [17, 6, 5, 4, 10, 8, 12, 7, 31] -edges[18][8] = [17, 4, 13] -edges[18][9] = [17, 6, 4, 8, 5] -edges[18][10] = [11, 17, 6, 4, 31, 24, 10] -edges[18][11] = [17, 13, 4, 5, 20] -edges[18][12] = [17, 4, 6, 7, 10] -edges[18][13] = [4, 17] -edges[18][14] = [4, 16, 17, 23, 27] -edges[18][15] = [4, 17, 5] -edges[18][16] = [17] -edges[18][17] = [17, 14, 13] -edges[18][18] = [27, 21, 17, 6, 4, 10, 7, 5] -edges[18][19] = [4, 6, 10, 17] -edges[18][20] = [17] -edges[18][21] = [4, 17] -edges[18][22] = [19, 4, 21, 17] -edges[18][23] = [17, 4] -edges[18][24] = [17, 6] -edges[18][26] = [17, 6, 10] -edges[18][27] = [4, 17, 21] -edges[18][28] = [17, 13] -edges[18][29] = [17, 6, 9, 10] -edges[18][31] = [4, 17] -edges[18][32] = [17] -edges[18][37] = [17, 6, 4, 31, 5, 10] -edges[18][39] = [17] -edges[18][40] = [4] -edges[19][6] = [4] -edges[19][7] = [4, 17, 7] -edges[19][9] = [4] -edges[19][10] = [11] -edges[19][13] = [4] -edges[19][14] = [4] -edges[19][15] = [4] -edges[19][18] = [4] -edges[19][38] = [4] -edges[20][8] = [4] -edges[20][9] = [4] -edges[20][10] = [11] -edges[20][15] = [4] -edges[20][18] = [4] -edges[21][6] = [5, 4, 23] -edges[21][7] = [10, 12, 15, 4] -edges[21][8] = [20] -edges[21][9] = [4] -edges[21][10] = [10, 11] -edges[21][11] = [20] -edges[21][12] = [12, 10] -edges[21][14] = [16, 4] -edges[21][15] = [4, 5] -edges[21][17] = [14] -edges[21][18] = [12, 10, 4, 5] -edges[21][19] = [10, 12, 4] -edges[21][20] = [12] -edges[21][26] = [12] -edges[21][29] = [10, 12] -edges[21][37] = [12, 10] -edges[22][8] = [20] -edges[22][10] = [14, 11] -edges[22][11] = [20] -edges[22][13] = [20] -edges[22][14] = [4] -edges[22][15] = [20] -edges[22][17] = [14, 20] -edges[22][18] = [20, 14] -edges[22][23] = [20] -edges[22][24] = [14, 20] -edges[22][25] = [22] -edges[22][28] = [20] -edges[22][31] = [20] -edges[23][6] = [4, 5, 17] -edges[23][7] = [10, 12, 4, 5] -edges[23][8] = [20, 10] -edges[23][9] = [10, 4, 12] -edges[23][10] = [11, 5, 10] -edges[23][11] = [20, 10] -edges[23][12] = [10, 4, 12] -edges[23][13] = [20] -edges[23][14] = [18, 4, 16, 23] -edges[23][15] = [4, 5] -edges[23][17] = [14] -edges[23][18] = [10, 20, 4, 5] -edges[23][19] = [10, 12] -edges[23][22] = [4, 19] -edges[23][26] = [10, 4, 12] -edges[23][29] = [10] -edges[23][31] = [4] -edges[23][32] = [4] -edges[23][37] = [10, 31] -edges[24][6] = [4, 5, 15] -edges[24][7] = [6, 15, 12, 4] -edges[24][8] = [13, 6, 20] -edges[24][9] = [15, 6, 4, 5] -edges[24][10] = [11, 6, 24, 31, 15] -edges[24][11] = [6, 13, 20, 4] -edges[24][12] = [12, 4, 15, 6] -edges[24][13] = [20, 15] -edges[24][14] = [18, 4, 23, 16] -edges[24][15] = [4, 5, 15] -edges[24][17] = [14, 6] -edges[24][18] = [6, 12, 15, 4, 14] -edges[24][19] = [12, 6] -edges[24][21] = [15] -edges[24][22] = [4, 19] -edges[24][24] = [20] -edges[24][26] = [12, 6, 15] -edges[24][28] = [13] -edges[24][29] = [12, 6, 15] -edges[24][31] = [4] -edges[24][33] = [6] -edges[24][34] = [4] -edges[24][37] = [4, 15] -edges[24][40] = [4, 6] -edges[25][6] = [4, 5] -edges[25][8] = [13] -edges[25][10] = [11] -edges[26][7] = [7, 4] -edges[26][9] = [4] -edges[26][10] = [11] -edges[26][12] = [4] -edges[26][14] = [4] -edges[26][38] = [4] -edges[27][6] = [4] -edges[27][7] = [4, 7, 5, 8, 10] -edges[27][9] = [4, 8] -edges[27][10] = [25, 11, 21, 5, 4] -edges[27][13] = [4] -edges[27][14] = [4] -edges[27][18] = [4, 5] -edges[27][19] = [4] -edges[27][21] = [4] -edges[27][26] = [5] -edges[27][27] = [5, 4, 21] -edges[27][29] = [17, 5] -edges[27][37] = [4, 8, 7] -edges[28][6] = [4, 5, 21] -edges[28][7] = [6, 15, 12, 4] -edges[28][8] = [4] -edges[28][9] = [15, 4, 6] -edges[28][10] = [11, 15, 4] -edges[28][12] = [15, 6] -edges[28][13] = [5] -edges[28][14] = [18, 4, 29] -edges[28][15] = [4, 5, 15] -edges[28][17] = [14] -edges[28][18] = [6, 19, 15] -edges[28][19] = [6] -edges[28][20] = [15] -edges[28][22] = [4, 19] -edges[28][26] = [6, 12] -edges[28][29] = [6] -edges[28][31] = [4] -edges[28][34] = [4] -edges[28][37] = [15, 6] -edges[29][6] = [4, 5, 28, 21] -edges[29][7] = [10, 6, 12, 15, 8, 4, 5] -edges[29][8] = [20, 4] -edges[29][9] = [4, 6, 10, 15, 12] -edges[29][10] = [11, 31, 24, 10, 20] -edges[29][11] = [20, 4, 10] -edges[29][12] = [10, 6, 12] -edges[29][13] = [10, 15, 4, 20] -edges[29][14] = [16, 4, 18] -edges[29][15] = [5, 4] -edges[29][17] = [20, 14, 4] -edges[29][18] = [10, 5, 4, 12, 6] -edges[29][19] = [10, 12, 6, 4] -edges[29][20] = [12] -edges[29][21] = [4] -edges[29][22] = [4] -edges[29][24] = [4] -edges[29][26] = [10, 12] -edges[29][27] = [10, 4] -edges[29][29] = [10, 12] -edges[29][31] = [4] -edges[29][37] = [10, 12, 31, 4, 6] -edges[29][39] = [12] -edges[31][6] = [5, 4] -edges[31][7] = [10, 12, 4, 15] -edges[31][8] = [10, 20] -edges[31][9] = [4, 5] -edges[31][10] = [11, 10, 24, 31, 17, 9] -edges[31][11] = [20, 30] -edges[31][12] = [10, 12] -edges[31][13] = [20] -edges[31][14] = [16, 4, 18, 5] -edges[31][15] = [4, 5] -edges[31][17] = [14, 20] -edges[31][18] = [10, 12, 20, 5, 17] -edges[31][19] = [12, 10] -edges[31][20] = [12] -edges[31][22] = [4] -edges[31][24] = [20] -edges[31][27] = [10] -edges[31][29] = [10] -edges[31][37] = [10, 4, 31] -edges[32][6] = [5, 4] -edges[32][7] = [4, 10, 12] -edges[32][8] = [20, 10] -edges[32][9] = [15, 4] -edges[32][10] = [4, 11, 24, 31, 10] -edges[32][11] = [20, 10] -edges[32][12] = [10, 4] -edges[32][13] = [20] -edges[32][14] = [4, 18, 16] -edges[32][15] = [4, 5] -edges[32][17] = [14, 20] -edges[32][18] = [12, 10, 4, 5] -edges[32][19] = [10, 4, 12] -edges[32][20] = [4, 12, 10] -edges[32][22] = [4] -edges[32][26] = [12, 4, 10, 5] -edges[32][27] = [10] -edges[32][28] = [10] -edges[32][31] = [4] -edges[32][37] = [4, 31, 12] -edges[33][9] = [4] -edges[33][10] = [11] -edges[34][6] = [5] -edges[34][7] = [10, 4] -edges[34][8] = [10] -edges[34][10] = [11] -edges[34][14] = [18, 4, 16] -edges[34][15] = [4] -edges[34][19] = [10] -edges[35][10] = [11] -edges[35][15] = [4] -edges[36][6] = [4, 5] -edges[37][6] = [4, 5] -edges[37][7] = [4, 7, 8, 5, 21, 6] -edges[37][8] = [4, 10] -edges[37][9] = [4, 21] -edges[37][10] = [21, 11, 25, 8, 4] -edges[37][12] = [4, 21] -edges[37][14] = [4] -edges[37][15] = [8, 4] -edges[37][18] = [4] -edges[37][21] = [4] -edges[37][27] = [21, 5] -edges[37][29] = [4] -edges[37][32] = [4] -edges[37][37] = [8, 21, 4, 5, 7, 17] -edges[37][39] = [8] -edges[37][40] = [4] -edges[39][6] = [21] -edges[39][7] = [8] -edges[39][10] = [11] -edges[39][14] = [4] -edges[39][37] = [8] -edges[40][10] = [11] -edges[41][10] = [11] -edges[41][41] = [21] -def = [4] diff --git a/dependencyParser/examples/is output.txt b/dependencyParser/examples/is output.txt deleted file mode 100644 index 24e879b..0000000 --- a/dependencyParser/examples/is output.txt +++ /dev/null @@ -1,199 +0,0 @@ ------m_encoder----- -m_featureSets[WORD] = {przestępca: 2237, sypiała: 40681, postawny: 28676, chrzcielnicy: 33013, rodzinne: 17265, rodzinna: 39199, uwięzić: 27792, bieganiu: 27332, zmienione: 18988, bootującej: 16343, przestępcy: 2234, flegmę: 4944, Funkcjonariusze: 17882, wierzchołki: 31813, zmieniona: 36337, odwieźć: 8897, posiłek: 2576, Aaa: 39718, !: 358, ": 5927, wprowadzone: 32738, obłożyło: 26137, BCC: 25412, $: 34107, %: 34067, ': 33700, kategoriach: 37908, (: 2598, wprowadzono: 17264, opiekuje: 10886, ): 2601, kalendarzu: 5441, +: 38035, ,: 27, -: 185, modułu: 37422, .: 16, /: 33255, krytyka: 15299, bliskich: 12516, postawić: 2018, Dorohusk: 9491, zmieniony: 14640, poddawane: 35462, krytyki: 45132, pacjent: 7540, poddawano: 43369, :: 33240, wzór: 977, ;: 4750, wiązać: 9099, chrzcielnica: 33014, ?: 188, A: 990, B: 14265, inwalidę: 33654, C: 26676, utopić: 7389, D: 21028, Faktycznie: 31464, E: 45436, piękne: 17211, G: 2424, H: 10704, odmaterializować: 32056, I: 597, Zanim: 20233, J: 10708, K: 14645, botanik: 32047, piękno: 29553, pokonywania: 34247, L: 39989, M: 1128, N: 10706, O: 2903, P: 13636, podpunkt: 39316, Q: 27885, Pięcioletnia: 18978, piękny: 2167, R: 3578, S: 1894, T: 23370, U: 8598, techniki: 15595, Właścicielką: 2109, V: 42064, W: 24, X: 8522, Aby: 6473, Z: 164, [: 34398, zgłaszających: 28593, poświęcony: 19835, ]: 34399, technika: 15597, zwalczać: 52, zarys: 16637, a: 1000, b: 38728, c: 45216, d: 44297, e: 44042, rodzinny: 6233, Francesca: 33146, g: 38126, Ach: 40856, i: 118, Układy: 14877, j: 40762, rozczarować: 3772, postawił: 14574, choćby: 17341, l: 36850, m: 312, zlikwidujmy: 44456, o: 208, p: 15743, bliskiej: 10632, r: 3158, osadzono: 26935, s: 35796, Act: 37911, u: 346, mięśni: 16459, w: 18, piękna: 2164, z: 35, wzgórza: 26972, wzgórze: 16580, socjusza: 929, Pomorskim: 32111, ochroniarzami: 26672, Ade: 32920, postawną: 28671, włoszczowski: 27202, mówienia: 40887, kastrować: 17185, odreagowywać: 17465, BFR: 37902, bioderku: 28286, opiekuna: 11927, bioderko: 28287, położonych: 34242, Adu: 32916, zawisł: 10846, pasować: 8390, OHIM: 34517, Komendant: 24696, tradycyjnie: 17684, dopuszczony: 11012, misyjne: 23923, posprzątać: 39630, odczują: 11392, Dorucha: 20238, popędzić: 39459, wyluzowanego: 2299, Barcelona: 37732, piękną: 3560, Lodów: 20975, epitetów: 32976, brzucha: 5337, nagrobkiem: 25688, asfaltowej: 19742, efektywnej: 34887, specjalnego: 2172, wiązka: 37020, mikrogram: 37721, czapeczką: 30098, poświęcone: 6307, rozłożyła: 134, rodzinie: 14546, misyjny: 23924, przesadzasz: 24792, sposoby: 34918, »: 40902, umożliwiać: 7217, sposobu: 16316, ministerialny: 31704, Gemini: 18775, międzyrządowych: 26800, szklanki: 31359, Jeleni: 9055, Havlovej: 5342, konfiskatę: 31558, płucnego: 43458, salami: 6906, Aga: 28104, wabiąc: 30678, brzuchu: 37800, Wróblewski: 26732, BIC: 37311, walczyli: 37040, efektywnie: 41728, szklanka: 7907, trzymiesięcznej: 10550, BIG: 26309, dobrego: 10826, chmur: 40922, mniejszej: 38757, finiszowała: 31529, Lędziny: 22545, wyślizgnąć: 39457, ciągnie: 28040, karykatury: 39255, wyssać: 9381, pleść: 29367, monoetylowy: 35498, wodami: 35265, ciągnik: 21017, ściągnęli: 10648, milijednostka: 45203, szelmowskim: 35929, CANCIDAS: 43908, gruzów: 10400, Planował: 35070, rozstrzygania: 34787, utalentowanych: 43924, wiązał: 25080, potrzebujesz: 32483, spadochronowy: 3031, poniesionych: 44410, idziemy: 19257, kłopotliwy: 6355, [import]cie: 26420, karykatura: 31715, bogatsze: 6261, wanadowych: 18734, wyświadczyć: 42368, odymać: 22424, pozwoliły: 10795, benzo[a]pirenu: 35457, współczesność: 9110, suszyła: 25429, krytycy: 19412, koszt: 11264, Lipnik: 30001, prześliźnie: 30967, koszu: 17011, gęstnieć: 28811, czapeczka: 30102, obdarzyła: 43013, dumna: 23426, zrozumieć: 5867, władca: 33474, Partyzanci: 31227, wodach: 31986, sposobność: 25005, wylizać: 27337, starania: 42671, frontowy: 36080, pozwoliła: 6850, odesłać: 23040, standardowy: 39222, twardziel: 17457, tknąć: 20905, staranie: 4587, spacerujących: 29650, reform: 20473, homoseksualizm: 18945, Biodra: 32187, wydajniej: 22061, standardowo: 21153, efektowny: 22025, blasku: 25583, kładziesz: 39426, domowego: 16806, inseminatora: 23392, oczywisty: 11577, złożyć: 4473, ń: 19637, czatowali: 32624, Wycelowała: 13004, Estonii: 32334, opiekują: 19124, snów: 21277, kosztowna: 43102, uważała: 25072, kosztowny: 8830, budowany: 15773, frontowe: 36077, Richard: 35355, pseudoeuropejczyków: 12477, szerokopasmowy: 43242, Treurnicht: 26639, Rybny: 33107, ś: 464, dłuższą: 4165, urzędniczki: 18365, mroźny: 21919, stanął: 1038, oskrzelowa: 16531, BMS: 34953, terytoriach: 38747, zaznaczyć: 15250, Akt: 25387, rozliczalność: 38124, urzędniczka: 18372, BMW: 25915, oczywiste: 11572, oskrzelowy: 16537, weryfikacyjnych: 43732, nastawionych: 28467, zagrożeniach: 35851, mogli: 1044, Garrett: 35309, Ala: 2394, Ale: 65, biologicznego: 36215, budowane: 31971, ż: 23896, Saladyn: 31188, nienawiści: 43362, dociera: 30039, Estonia: 32339, dumny: 21164, stypendium: 13287, włączając: 26727, Angeli: 4481, uzbrojenie: 35747, Alp: 30145, atakować: 2409, wydziału: 2173, Awiwie: 17076, Angela: 4484, Zatrzymanym: 2239, promocyjny: 22286, Singapurze: 21806, Organizatorzy: 7931, MODUł: 37957, Jerozolimski: 31189, szklankę: 7905, Pluj: 25067, Nauki: 13611, przyniesiesz: 38787, artretyzm: 33648, Plus: 42683, warkoczyk: 15700, komórce: 38113, Śrem: 21288, Facet: 32705, nieformalny: 38084, wynagrodzenia: 23439, większej: 35518, nieobowiązkowy: 35340, zasad: 21652, sposobów: 32477, uniezależnić: 28118, wydaniem: 20301, wynagrodzenie: 23443, tabelaryczny: 43978, szerokopasmowa: 43237, Shimada: 23144, nieobowiązkowe: 35338, uzbrojeniu: 35746, Kambakhsha: 40354, żołnierzami: 5492, ruchem: 3794, zmienioną: 34400, Ani: 2797, stanąć: 1041, złożył: 12489, harcerz: 18915, Centralnego: 33835, białaczką: 17529, ważniejszych: 27342, zrozumiał: 5863, posiłki: 37034, Wyrzucili: 30085, dłuższy: 29997, efektowna: 22024, farmakodynamiczny: 37831, nieoficjalnych: 18845, popędzać: 24003, komórek: 14783, mikroprzedsiębiorstwo: 38224, przypadło: 43833, odesłał: 24701, popędzili: 39454, Tych: 12684, dzieciobójstwo: 41508, promocyjne: 40736, przypadły: 32145, kartuski: 13201, kotce: 10495, zapiaszczyć: 38649, niekonwencjonalnych: 29528, pasożytów: 44103, dzieciobójstwa: 41503, Olimpijskie: 9957, BRH: 7444, Koncepcja: 43996, pokrzyżować: 31707, oferent: 35914, strun: 15254, fluorytowy: 18580, Afrykańczyku: 3460, grzybów: 13232, pomocowego: 34648, nagrodzonych: 27252, zagrożeniami: 21381, niewyraźnym: 23125, zaopiekował: 41339, sprowadzenie: 1962, planujemy: 2276, Piotra: 5837, zatrzaśnięty: 1976, odpocząć: 7853, Zgodnie: 6953, woleć: 17913, niezrealizowane: 15016, Asuan: 20901, Tegoroczną: 21140, zatwierdzony: 6780, wymieszać: 19898, Pierwsi: 36302, kamieniarze: 23698, powstanie: 8549, Podpisał: 19215, Spanikowani: 28196, Karaibów: 43788, obejrzał: 9420, starym: 7466, zdołali: 31631, gwiazdy: 8905, dźwigać: 28848, bezpieczną: 14012, powstaniu: 8544, powstrzyma: 35683, Zamaskowany: 1278, umacnianiu: 40842, Trójstronnej: 16714, pokrzyżował: 31706, zatwierdzona: 42812, zadźgać: 14794, lokatorskiej: 29786, zatwierdzone: 42479, Art: 35878, karami: 10602, rzępolić: 11410, powtarzać: 11367, bankowość: 28460, Dante: 43453, Słyszała: 22616, Zgłoszony: 41049, towarzyski: 6270, wolał: 17910, nieformalne: 39775, zaopiekować: 15763, Przerwała: 33451, powstania: 6800, szałasy: 28199, wybaczysz: 38404, uczulać: 16550, Spójrz: 30877, dinozaur: 44030, komórka: 3418, reporter: 23991, obejrzeć: 2436, Wpełzł: 34447, Gazprom: 37514, marketing: 45437, Assicurazioni: 38378, zaimprowizowanych: 22676, naczynku: 36254, Niemniej: 36996, dźwigał: 28846, Milkowszczyzna: 16595, połowach: 33261, poczerwieniała: 24193, uzgadniania: 43867, tortura: 24499, naczynko: 10717, Częstochowy: 15811, Świetnie: 44311, Podlaski: 30768, rysowali: 32697, chińskimi: 41670, naczynie: 13542, sparaliżowany: 1214, naczynia: 13536, zajść: 24383, namysłu: 18126, zoologiczny: 10740, przeważającą: 38513, Pomagasz: 22889, Zgięła: 33980, narodowość: 43685, zbadać: 24138, biznes: 14294, komórki: 3416, biurowiec: 13194, tereny: 45036, Podlaska: 13657, powtarzał: 18223, Początek: 6244, szklanym: 34239, terenu: 6971, sądowych: 45025, karani: 4610, władać: 23215, Bydgoszczanin: 7094, wyliczenie: 21227, białaczki: 38868, pleśniowych: 16482, bydgoszczanin: 7099, białaczka: 17532, Postanowił: 5119, Konwój: 3285, Milkowszczyznę: 16594, sporze: 14174, sforsować: 9458, Paulauskasowi: 23585, Załamała: 13067, rozejrzał: 29663, nawracać: 21769, skrypt: 35056, naczyniu: 44191, ssak: 27790, wymaga: 5691, wyminął: 32521, odmianami: 33643, Jugosławia: 22302, Pańskie: 25998, Barnard: 35078, gwiazda: 916, kompletnym: 40096, wycinać: 35720, zamilknąć: 5108, Jugosławii: 22299, przednich: 34735, Pańskim: 25995, organizatorzy: 23778, obóz: 22188, narkotyki: 12397, zaangażowanych: 36502, 241mg: 41289, postulowanego: 2892, podmiotów: 17436, Odpoczywał: 34842, objeść: 28867, odrobiła: 40754, obój: 17566, wyposażane: 42604, ugodowość: 26636, wybitny: 16171, brazylijski: 41112, Tamalana: 37596, Lyonie: 38549, zasobów: 16773, starsi: 7630, wycinek: 21081, powierzone: 44432, wydawnictw: 16782, Grozi: 9279, sprzedaży: 10599, Grozd: 8860, gimnastycznymi: 6907, wybitni: 38184, rozejrzeć: 15104, Widocznie: 10231, potwierdzającym: 42988, brazylijska: 41111, położyli: 5150, INFORMACYJNE: 37963, czasu: 3265, Ambulatorium: 24976, skrawek: 10746, tradycyjnej: 42173, wykrywa: 18063, Wstyd: 15130, porównywał: 26403, Amber: 45043, BBWR: 5642, potrzebujemy: 3957, Cegielskiego: 16900, podpisany: 27566, pomysłowy: 38585, inwalida: 3767, lotniczych: 36995, wpojono: 23593, Wyłączyła: 4957, ssać: 16919, Danny: 42217, donosów: 13793, Pomagają: 11401, karate: 13884, psychol: 32704, kanalizacja: 6837, darczyńcy: 44531, obdarzy: 44336, czasy: 7365, podpisane: 12856, Chcąc: 27894, charakter: 5179, psychoanalityk: 16245, zielonkawy: 17509, steroid: 16507, kokieteria: 11674, umrze: 37658, czaru: 11669, robimy: 26057, pomysłowa: 38583, drżące: 23773, darczyńca: 44536, gospodarczego: 19318, kokieterii: 11671, zaplanuję: 38954, wolną: 6490, zazdrośnie: 26335, schowana: 5655, bohater: 12527, Rysunek: 42589, codziennego: 41402, ogłaszaną: 20578, paradować: 38016, konkretnych: 23738, rejsowym: 2187, wyrobów: 12864, uwzględniających: 38450, formularzach: 38656, Państwowy: 12941, rozpoznawać: 39288, niezamierzony: 36873, przekroczyć: 8540, wyklucza: 13082, zawyżyć: 5712, Given: 39394, zmienionej: 36646, wynieść: 12369, porównywać: 26405, aktualizacji: 40966, kryteriach: 42686, publikowanie: 33855, Ponieważ: 2132, holdingu: 1860, aktualizacja: 40967, przytaczać: 45505, niezamierzone: 36864, czaty: 21041, wyminąć: 32522, współpracowników: 27674, zgłaszającymi: 43011, migracja: 38700, Częstochowa: 15813, bożych: 13380, puszczamy: 10477, Dojedli: 20970, migracji: 38697, zniszczyła: 32100, współgrać: 32075, Lubuscy: 2769, umożliwiał: 40853, minnesang: 20833, zniszczyły: 43598, pańskiego: 37486, Państwowa: 14495, zarabiać: 10883, zmartwić: 44568, przekroczył: 25916, inhibitorów: 37030, nagrodami: 7010, sekretów: 35451, Mocka: 7548, wolna: 218, stryj: 11451, tętnicy: 3859, wolne: 24619, BYĆ: 17813, wolni: 27864, zbliżony: 12433, Kompanii: 1858, wyposażać: 42605, wolno: 939, zwrot: 2507, kosić: 32323, używanych: 37700, wolny: 226, eksperymentów: 18388, powtarzaj: 19997, tętnica: 3868, wykryta: 31192, czaić: 38918, Dania: 17508, terytoriami: 44704, nieprzytomny: 2402, Tamalanę: 37594, CAI: 33848, przygody: 16862, przyroda: 38563, Albania: 5497, Pękali: 12145, przygoda: 11913, Jagienka: 22848, zbliżona: 40939, Zaleskiego: 1767, Danii: 17507, mających: 19186, fachowi: 13585, przyrody: 41323, Dramatyczny: 19826, większym: 9696, Emil: 25723, języku: 38087, wykryty: 6081, zmierzające: 45103, kłamiesz: 24052, fachowy: 13587, wierzchołek: 12285, emerytalnym: 9224, odporność: 16472, wprowadzony: 36633, języka: 4524, antagonista: 23548, pałeczka: 18951, podpisali: 1522, wykryte: 42250, języki: 10775, chińskich: 36796, skrawać: 14896, skrupuł: 29020, korytarzykiem: 20659, Astry: 9666, dorzecze: 35267, CCD: 41468, krytykę: 15292, siedziała: 25249, ulegająca: 36492, Navarro: 8460, uskakuje: 3516, informując: 7069, doręczyć: 8304, weteran: 30250, Bar: 7854, Badanym: 25111, ścianami: 37609, kupowali: 26036, zatelefonować: 28657, zużyć: 18727, teatrze: 1209, dzieckiem: 9588, radości: 10292, Dumnie: 30538, kinematograficznych: 44918, niewyraźnie: 22008, lekarzem: 17721, odtajnić: 21396, biolog: 27782, homoseksualista: 22929, naciągać: 15268, mydlany: 1117, Zamek: 23380, przeczulony: 14258, łydka: 12996, stres: 17464, mydlana: 1114, macicę: 23363, widowisk: 18589, Simon: 43518, stref: 13115, łydki: 12990, Bogiem: 11215, oprzytomnieć: 32767, zbliżoną: 12429, lateksowych: 44486, Wogau: 44473, palec: 5165, żywności: 7816, futerko: 33155, towarzyszą: 7241, nakładać: 32122, przyłączyć: 16444, hydrauliczny: 20201, zbóż: 27216, obejmować: 9759, instytucjonalny: 37761, zyskania: 36232, seksaferze: 13790, Regis: 24230, rozproszonych: 43661, Zeznania: 18364, punktualność: 12014, mierzynka: 15505, Manifestanci: 5284, cieszył: 29827, podpałka: 14510, ściąga: 32730, kreślić: 32749, przemawiające: 40785, Atalanta: 43294, podpałki: 14509, rodzinnym: 6230, wygramolić: 39232, kwadratowy: 8774, budynkach: 1857, Kierownik: 40864, Szujskiego: 4276, unikają: 1372, ekipie: 8126, MIESZANINACH: 33786, Zwiększyli: 38191, Wybierz: 9948, antykoncentracyjny: 22994, spowodowało: 10753, wstawię: 32470, skrawku: 38436, Nasze: 2058, kanalizację: 6831, hydroliza: 37190, wysięgnik: 3185, polepszyła: 39424, spowodowały: 18700, złożonej: 43554, ogrodowy: 13504, odbijać: 4701, Nasza: 38582, rżniętych: 28912, obracało: 44711, zobaczenia: 17205, najwięcej: 31014, nieznośnie: 6349, wstawić: 20937, Jiang: 26653, antykoncentracyjne: 22992, palca: 9378, nieśli: 30518, Przyznał: 37290, business: 37913, palce: 5162, rozliczyć: 22198, tekstu: 22001, profesora: 3077, obrazkowy: 40194, obiecuje: 33179, hydrolizy: 37181, teksty: 15654, nauczycielski: 42214, Towarzystwie: 22246, cieszyć: 1541, Dokładny: 36392, Stanowi: 26911, statku: 30542, niektórych: 16154, Bez: 5949, papierosach: 43936, robisz: 29518, gangów: 45244, klient: 4457, Kryminalnego: 23188, radykałami: 27974, polepszyły: 33861, statki: 26463, mierzynek: 15507, Źródła: 22803, odbijał: 31172, przenikliwy: 25139, wycieńczony: 2201, Dzianinę: 24205, eksploatację: 39636, nakładki: 23864, baba: 4251, kawalerię: 36061, tężeć: 17879, Algorytm: 9877, oburzeniem: 21840, Natan: 14816, mówiono: 26096, nakładka: 23871, skuteczną: 35848, oddelegowało: 19659, prawdopodobne: 22949, Źródło: 7187, oznakowane: 18517, istotna: 10895, CIF: 34658, 69-letni: 14209, czterdziestkę: 20895, istotne: 4174, Nietypowe: 26795, dzisiejszy: 9997, Krzysztofa: 2934, gospodarstwie: 17727, parafialnych: 6786, publicznie: 18013, obracała: 4907, wspiąć: 3425, gwiazdkowy: 44599, bagażem: 12812, strat: 8256, opłakanym: 7667, Naszą: 44927, gwiazdkowe: 45522, Chorób: 39881, istotny: 4183, rodowy: 9483, gminnymi: 25367, szczytowej: 38987, pikować: 41643, Muszę: 15313, czystej: 38281, wprowadziła: 8334, zamierzali: 28189, linkach: 37806, Muszą: 42610, Tramwaj: 30070, Roztwór: 44500, zwycięski: 17717, czeremchy: 8535, pasterz: 19593, Zamku: 36828, bada: 3573, kraksa: 20096, Eliza: 30786, wyrażonym: 18224, CBŚ: 11774, pozwolono: 36396, skrzyń: 41001, zelektryzować: 15573, dopełnić: 28211, ostrożnościowy: 44423, okresowy: 34835, PRZEGRAŁ: 19077, nizina: 20530, przypaść: 32147, przód: 11722, przeliczeniowym: 40458, Określona: 35687, prelekcji: 10135, wspiął: 3422, półtoraroczny: 26046, utrzyma: 10569, prestiżowi: 40704, wspomniano: 45048, nadchodzące: 27092, uwagach: 43151, zmaterializować: 41229, Halina: 23764, węglowodory: 37124, wprowadziło: 22552, morskiego: 7492, rozesłali: 2534, prelekcja: 10137, zwycięsko: 27984, wspomniane: 37836, czeremcha: 8538, baby: 4249, Kubusia: 24662, Towarzystwem: 19674, koordynatora: 42786, prestiżowy: 24999, kraksy: 20095, wspomniana: 32664, prestiżową: 24998, Gabrieli: 805, pozorować: 9455, zostawionych: 13349, niedozwolone: 34917, poczekalni: 30722, Południową: 35075, szpital: 1698, hamulcowe: 23865, dzwoneczków: 37243, nurtu: 45066, Porucznik: 15842, wyładowanie: 41678, dogmatyk: 39550, wyładowania: 43495, nihilizmu: 39373, Andyjskiego: 39920, hamulcowy: 23872, Dolnym: 5054, przeniesie: 2289, obrachunkowych: 34434, skrzynkach: 14693, CML: 41454, filmem: 32234, genetyczne: 31176, bezbożnica: 24241, miauknął: 7340, ChNP: 34171, genetyczna: 39343, zamienić: 3338, emerytowanych: 37414, reflektorów: 23909, Róża: 14273, genetyczny: 18392, goleniowski: 29139, maniak: 31798, Przyznam: 10020, Gabriela: 808, goleniowska: 29158, naszymi: 33195, maniackiej: 43569, niedozwolony: 34920, Spale: 19197, kontrolował: 36383, ChOG: 34173, jeżeliby: 21389, statut: 4650, wychowanek: 6614, status: 18588, zaraz: 4142, Przeważnie: 23001, wychowanie: 17384, kolorów: 35803, CO2: 33590, wstawać: 8379, kominowej: 29858, kazanie: 30321, wychowania: 22248, zaprojektowane: 36400, Izby: 8163, rozpad: 36498, dumpingu: 34655, paliw: 22939, serwisować: 40911, hotelach: 16215, wychodzić: 4730, nieporadnie: 35758, publicznej: 17849, palio: 25826, strop: 27879, stron: 4590,...} (exceeds maximum print length) -m_featureSets[D] = {LA: 1, <None>: 0, RA: 2} -m_featureSets[POS] = {aglt: 25, pant: 34, adjp: 35, conj: 18, ppas: 13, num: 12, <None>: 0, STPOS: 4, fin: 11, bedzie: 28, STR: 2, ign: 37, praet: 8, ger: 29, pred: 24, imps: 23, pact: 21, impt: 32, prep: 6, inf: 17, ppron12: 26, comp: 22, numcol: 38, burk: 39, interp: 10, pcon: 31, adj: 9, MID: 1, subst: 7, depr: 33, <root-POS>: 5, brev: 27, adjc: 36, adv: 15, adja: 30, xxx: 41, END: 3, siebie: 20, ppron3: 19, winien: 16, qub: 14, interj: 40} -m_featureSets[DIST] = {0: 1, 1: 2, 2: 3, 3: 4, 4: 5, 5: 6, <None>: 0, 10: 7} -m_featureSets[F] = {com: 25, acc: 2, loc: 12, agl: 34, pun: 31, npraep: 27, <None>: 0, congr: 22, voc: 38, nom: 6, sup: 35, sec: 32, neg: 37, gen: 10, rec: 18, wok: 3, sg: 4, pos: 11, praep: 24, nwok: 13, dat: 21, perf: 8, aff: 19, ter: 16, m1: 7, m2: 33, f: 9, m3: 5, pri: 28, NOFEAT: 1, npun: 36, nagl: 29, imperf: 17, n: 15, p: 30, inst: 20, akc: 23, nakc: 26, pl: 14} -m_featureSets[REL] = {<root-type>: 2, aglt: 22, aux: 13, <None>: 0, refl: 16, cond: 23, imp: 29, comp_inf: 14, neg: 18, adjunct_qt: 30, coord: 26, pred: 9, pre_coord: 27, coord_punct: 24, conjunct: 17, punct: 11, subj: 6, adjunct: 4, app: 7, comp: 5, item: 31, comp_fin: 20, complm: 19, <no-type>: 3, comp_ag: 28, pd: 15, obj: 10, ne: 8, mwe: 21, END: 1, abbrev_punct: 25, obj_th: 12} -m_featureSets[SP] = {STR: 1, <None>: 0, END: 2} -m_featureSets[TYPE] = {F21: 24, F20: 23, F23: 26, F22: 25, F25: 28, F120: 123, F24: 27, F121: 124, F27: 30, F122: 125, F26: 29, F123: 126, F29: 32, F124: 127, F28: 31, F125: 128, F126: 129, F127: 130, F128: 131, F129: 132, F30: 33, F32: 35, F31: 34, F34: 37, F33: 36, F36: 39, F35: 38, F110: 113, F38: 41, F111: 114, F37: 40, F112: 115, F113: 116, F39: 42, F114: 117, F115: 118, F116: 119, F117: 120, F118: 121, F119: 122, POS: 1, F41: 44, F40: 43, F43: 46, F42: 45, F: 2, F45: 48, F140: 143, F44: 47, F141: 144, F47: 50, F142: 145, F46: 49, F143: 146, F49: 52, F144: 147, F48: 51, F145: 148, F146: 149, F147: 150, F148: 151, F149: 152, F50: 53, F52: 55, F51: 54, F54: 57, F53: 56, F56: 59, F55: 58, F130: 133, F58: 61, F131: 134, F57: 60, F132: 135, F133: 136, F59: 62, F134: 137, F135: 138, F136: 139, F137: 140, F138: 141, F139: 142, F61: 64, F60: 63, F63: 66, F62: 65, F65: 68, F64: 67, F67: 70, F66: 69, F69: 72, F68: 71, F70: 73, F72: 75, F71: 74, F74: 77, F73: 76, F76: 79, F75: 78, F78: 81, F77: 80, F79: 82, F0: 3, F1: 4, F2: 5, F3: 6, F4: 7, F5: 8, F6: 9, F7: 10, F8: 11, F9: 12, F81: 84, F80: 83, F83: 86, F82: 85, F85: 88, F84: 87, F87: 90, F86: 89, F89: 92, F88: 91, <None>: 0, F100: 103, F101: 104, F102: 105, F103: 106, F104: 107, F105: 108, F106: 109, F107: 110, F108: 111, F109: 112, F90: 93, F92: 95, F91: 94, F94: 97, F93: 96, F96: 99, F95: 98, F10: 13, F98: 101, F97: 100, F12: 15, F11: 14, F99: 102, F14: 17, F13: 16, F16: 19, F15: 18, F18: 21, F17: 20, F19: 22} -m_featureCounters = {WORD: 45576, D: 3, POS: 42, DIST: 8, F: 39, REL: 32, SP: 3, TYPE: 153} -m_featureBits = {WORD: 16, D: 2, POS: 6, DIST: 4, F: 6, REL: 6, SP: 2, TYPE: 8} -count = 8 -stop = false -------------------- -size = 1 -capacity = 1 -forms[0][0] = 2 -forms[0][1] = 3 -forms[0][2] = 4 -forms[0][3] = 5 -forms[0][4] = 6 -forms[0][5] = 7 -forms[0][6] = 8 -forms[0][7] = 9 -forms[0][8] = 10 -forms[0][9] = 11 -forms[0][10] = 12 -forms[0][11] = 13 -forms[0][12] = 14 -forms[0][13] = 15 -forms[0][14] = 16 -plemmas[0][0] = 17 -plemmas[0][1] = 18 -plemmas[0][2] = 4 -plemmas[0][3] = 5 -plemmas[0][4] = 6 -plemmas[0][5] = 7 -plemmas[0][6] = 19 -plemmas[0][7] = 20 -plemmas[0][8] = 10 -plemmas[0][9] = 21 -plemmas[0][10] = 22 -plemmas[0][11] = 13 -plemmas[0][12] = 23 -plemmas[0][13] = 15 -plemmas[0][14] = 16 -glemmas[0][0] = 17 -glemmas[0][1] = 18 -glemmas[0][2] = 4 -glemmas[0][3] = 5 -glemmas[0][4] = 6 -glemmas[0][5] = 7 -glemmas[0][6] = 19 -glemmas[0][7] = 20 -glemmas[0][8] = 10 -glemmas[0][9] = 21 -glemmas[0][10] = 22 -glemmas[0][11] = 13 -glemmas[0][12] = 23 -glemmas[0][13] = 15 -glemmas[0][14] = 16 -heads[0][0] = -1 -heads[0][1] = -1 -heads[0][2] = -1 -heads[0][3] = -1 -heads[0][4] = -1 -heads[0][5] = -1 -heads[0][6] = -1 -heads[0][7] = -1 -heads[0][8] = -1 -heads[0][9] = -1 -heads[0][10] = -1 -heads[0][11] = -1 -heads[0][12] = -1 -heads[0][13] = -1 -heads[0][14] = -1 -pheads[0][0] = -1 -pheads[0][1] = -1 -pheads[0][2] = -1 -pheads[0][3] = -1 -pheads[0][4] = -1 -pheads[0][5] = -1 -pheads[0][6] = -1 -pheads[0][7] = -1 -pheads[0][8] = -1 -pheads[0][9] = -1 -pheads[0][10] = -1 -pheads[0][11] = -1 -pheads[0][12] = -1 -pheads[0][13] = -1 -pheads[0][14] = -1 -labels[0][0] = 3 -labels[0][1] = -1 -labels[0][2] = -1 -labels[0][3] = -1 -labels[0][4] = -1 -labels[0][5] = -1 -labels[0][6] = -1 -labels[0][7] = -1 -labels[0][8] = -1 -labels[0][9] = -1 -labels[0][10] = -1 -labels[0][11] = -1 -labels[0][12] = -1 -labels[0][13] = -1 -labels[0][14] = -1 -plabels[0][0] = 3 -plabels[0][1] = -1 -plabels[0][2] = -1 -plabels[0][3] = -1 -plabels[0][4] = -1 -plabels[0][5] = -1 -plabels[0][6] = -1 -plabels[0][7] = -1 -plabels[0][8] = -1 -plabels[0][9] = -1 -plabels[0][10] = -1 -plabels[0][11] = -1 -plabels[0][12] = -1 -plabels[0][13] = -1 -plabels[0][14] = -1 -gpos[0][0] = 5 -gpos[0][1] = 6 -gpos[0][2] = 7 -gpos[0][3] = 7 -gpos[0][4] = 7 -gpos[0][5] = 7 -gpos[0][6] = 8 -gpos[0][7] = 7 -gpos[0][8] = 6 -gpos[0][9] = 7 -gpos[0][10] = 9 -gpos[0][11] = 7 -gpos[0][12] = 7 -gpos[0][13] = 7 -gpos[0][14] = 10 -pposs[0][0] = 5 -pposs[0][1] = 6 -pposs[0][2] = 7 -pposs[0][3] = 7 -pposs[0][4] = 7 -pposs[0][5] = 7 -pposs[0][6] = 8 -pposs[0][7] = 7 -pposs[0][8] = 6 -pposs[0][9] = 7 -pposs[0][10] = 9 -pposs[0][11] = 7 -pposs[0][12] = 7 -pposs[0][13] = 7 -pposs[0][14] = 10 -feats[0][1] = [2, 3] -feats[0][2] = [4, 2, 5] -feats[0][3] = [4, 6, 7] -feats[0][4] = [4, 6, 7] -feats[0][5] = [4, 6, 7] -feats[0][6] = [4, 7, 8] -feats[0][7] = [4, 2, 9] -feats[0][8] = [10] -feats[0][9] = [4, 10, 7] -feats[0][10] = [4, 10, 7, 11] -feats[0][11] = [4, 10, 5] -feats[0][12] = [4, 10, 9] -feats[0][13] = [4, 10, 9] -pfill [0] = {} -gfeats[0][0] = -1 -gfeats[0][1] = -1 -gfeats[0][2] = -1 -gfeats[0][3] = -1 -gfeats[0][4] = -1 -gfeats[0][5] = -1 -gfeats[0][6] = -1 -gfeats[0][7] = -1 -gfeats[0][8] = -1 -gfeats[0][9] = -1 -gfeats[0][10] = -1 -gfeats[0][11] = -1 -gfeats[0][12] = -1 -gfeats[0][13] = -1 -gfeats[0][14] = -1 -pfeats[0][0] = 0 -pfeats[0][1] = -1 -pfeats[0][2] = -1 -pfeats[0][3] = -1 -pfeats[0][4] = -1 -pfeats[0][5] = -1 -pfeats[0][6] = -1 -pfeats[0][7] = -1 -pfeats[0][8] = -1 -pfeats[0][9] = -1 -pfeats[0][10] = -1 -pfeats[0][11] = -1 -pfeats[0][12] = -1 -pfeats[0][13] = -1 -pfeats[0][14] = 0 -m_unkown = 0 -m_count = 15 -m_report = false -m_found = false diff --git a/dependencyParser/examples/test.csv b/dependencyParser/examples/test.csv deleted file mode 100644 index 4d1eba0..0000000 --- a/dependencyParser/examples/test.csv +++ /dev/null @@ -1,14 +0,0 @@ -1 We w w prep prep acc|wok acc|wok _ _ _ _ _ _ -2 wtorek wtorek wtorek subst subst sg|acc|m3 sg|acc|m3 _ _ _ _ _ _ -3 prezydent prezydent prezydent subst subst sg|nom|m1 sg|nom|m1 _ _ _ _ _ _ -4 Robert Robert Robert subst subst sg|nom|m1 sg|nom|m1 _ _ _ _ _ _ -5 Choma Choma Choma subst subst sg|nom|m1 sg|nom|m1 _ _ _ _ _ _ -6 skierował skierować skierować praet praet sg|m1|perf sg|m1|perf _ _ _ _ _ _ -7 sprawę sprawa sprawa subst subst sg|acc|f sg|acc|f _ _ _ _ _ _ -8 do do do prep prep gen gen _ _ _ _ _ _ -9 rzecznika rzecznik rzecznik subst subst sg|gen|m1 sg|gen|m1 _ _ _ _ _ _ -10 dyscyplinarnego dyscyplinarny dyscyplinarny adj adj sg|gen|m1|pos sg|gen|m1|pos _ _ _ _ _ _ -11 UM UM UM subst subst sg|gen|m3 sg|gen|m3 _ _ _ _ _ _ -12 Danuty Danuta Danuta subst subst sg|gen|f sg|gen|f _ _ _ _ _ _ -13 Wiech Wiech Wiech subst subst sg|gen|f sg|gen|f _ _ _ _ _ _ -14 . . . interp interp _ _ _ _ _ _ _ _ diff --git a/dependencyParser/examples/test.out b/dependencyParser/examples/test.out deleted file mode 100644 index 51d709f..0000000 --- a/dependencyParser/examples/test.out +++ /dev/null @@ -1,210 +0,0 @@ -1 We w w prep prep acc|wok acc|wok -1 0 _ pred _ _ -2 wtorek wtorek wtorek subst subst sg|acc|m3 sg|acc|m3 -1 1 _ comp _ _ -3 prezydent prezydent prezydent subst subst sg|nom|m1 sg|nom|m1 -1 6 _ subj _ _ -4 Robert Robert Robert subst subst sg|nom|m1 sg|nom|m1 -1 3 _ app _ _ -5 Choma Choma Choma subst subst sg|nom|m1 sg|nom|m1 -1 4 _ ne _ _ -6 skierował skierować skierować praet praet sg|m1|perf sg|m1|perf -1 1 _ adjunct _ _ -7 sprawę sprawa sprawa subst subst sg|acc|f sg|acc|f -1 6 _ obj _ _ -8 do do do prep prep gen gen -1 6 _ comp _ _ -9 rzecznika rzecznik rzecznik subst subst sg|gen|m1 sg|gen|m1 -1 8 _ comp _ _ -10 dyscyplinarnego dyscyplinarny dyscyplinarny adj adj sg|gen|m1|pos sg|gen|m1|pos -1 9 _ adjunct _ _ -11 UM UM UM subst subst sg|gen|m3 sg|gen|m3 -1 9 _ adjunct _ _ -12 Danuty Danuta Danuta subst subst sg|gen|f sg|gen|f -1 9 _ app _ _ -13 Wiech Wiech Wiech subst subst sg|gen|f sg|gen|f -1 12 _ ne _ _ -14 . . . interp interp _ _ -1 1 _ punct _ _ - -1 We w w prep prep acc|wok acc|wok -1 6 _ adjunct _ _ -2 wtorek wtorek wtorek subst subst sg|acc|m3 sg|acc|m3 -1 0 _ pred _ _ -3 prezydent prezydent prezydent subst subst sg|nom|m1 sg|nom|m1 -1 6 _ subj _ _ -4 Robert Robert Robert subst subst sg|nom|m1 sg|nom|m1 -1 3 _ app _ _ -5 Choma Choma Choma subst subst sg|nom|m1 sg|nom|m1 -1 4 _ ne _ _ -6 skierował skierować skierować praet praet sg|m1|perf sg|m1|perf -1 2 _ adjunct _ _ -7 sprawę sprawa sprawa subst subst sg|acc|f sg|acc|f -1 6 _ obj _ _ -8 do do do prep prep gen gen -1 6 _ comp _ _ -9 rzecznika rzecznik rzecznik subst subst sg|gen|m1 sg|gen|m1 -1 8 _ comp _ _ -10 dyscyplinarnego dyscyplinarny dyscyplinarny adj adj sg|gen|m1|pos sg|gen|m1|pos -1 9 _ adjunct _ _ -11 UM UM UM subst subst sg|gen|m3 sg|gen|m3 -1 9 _ adjunct _ _ -12 Danuty Danuta Danuta subst subst sg|gen|f sg|gen|f -1 9 _ app _ _ -13 Wiech Wiech Wiech subst subst sg|gen|f sg|gen|f -1 12 _ ne _ _ -14 . . . interp interp _ _ -1 2 _ punct _ _ - -1 We w w prep prep acc|wok acc|wok -1 6 _ adjunct _ _ -2 wtorek wtorek wtorek subst subst sg|acc|m3 sg|acc|m3 -1 1 _ comp _ _ -3 prezydent prezydent prezydent subst subst sg|nom|m1 sg|nom|m1 -1 0 _ pred _ _ -4 Robert Robert Robert subst subst sg|nom|m1 sg|nom|m1 -1 6 _ subj _ _ -5 Choma Choma Choma subst subst sg|nom|m1 sg|nom|m1 -1 4 _ ne _ _ -6 skierował skierować skierować praet praet sg|m1|perf sg|m1|perf -1 3 _ adjunct _ _ -7 sprawę sprawa sprawa subst subst sg|acc|f sg|acc|f -1 6 _ obj _ _ -8 do do do prep prep gen gen -1 6 _ comp _ _ -9 rzecznika rzecznik rzecznik subst subst sg|gen|m1 sg|gen|m1 -1 8 _ comp _ _ -10 dyscyplinarnego dyscyplinarny dyscyplinarny adj adj sg|gen|m1|pos sg|gen|m1|pos -1 9 _ adjunct _ _ -11 UM UM UM subst subst sg|gen|m3 sg|gen|m3 -1 9 _ adjunct _ _ -12 Danuty Danuta Danuta subst subst sg|gen|f sg|gen|f -1 9 _ app _ _ -13 Wiech Wiech Wiech subst subst sg|gen|f sg|gen|f -1 12 _ ne _ _ -14 . . . interp interp _ _ -1 3 _ punct _ _ - -1 We w w prep prep acc|wok acc|wok -1 4 _ adjunct _ _ -2 wtorek wtorek wtorek subst subst sg|acc|m3 sg|acc|m3 -1 1 _ comp _ _ -3 prezydent prezydent prezydent subst subst sg|nom|m1 sg|nom|m1 -1 4 _ adjunct _ _ -4 Robert Robert Robert subst subst sg|nom|m1 sg|nom|m1 -1 0 _ pred _ _ -5 Choma Choma Choma subst subst sg|nom|m1 sg|nom|m1 -1 4 _ ne _ _ -6 skierował skierować skierować praet praet sg|m1|perf sg|m1|perf -1 4 _ comp_fin _ _ -7 sprawę sprawa sprawa subst subst sg|acc|f sg|acc|f -1 6 _ obj _ _ -8 do do do prep prep gen gen -1 6 _ comp _ _ -9 rzecznika rzecznik rzecznik subst subst sg|gen|m1 sg|gen|m1 -1 8 _ comp _ _ -10 dyscyplinarnego dyscyplinarny dyscyplinarny adj adj sg|gen|m1|pos sg|gen|m1|pos -1 9 _ adjunct _ _ -11 UM UM UM subst subst sg|gen|m3 sg|gen|m3 -1 9 _ adjunct _ _ -12 Danuty Danuta Danuta subst subst sg|gen|f sg|gen|f -1 9 _ app _ _ -13 Wiech Wiech Wiech subst subst sg|gen|f sg|gen|f -1 12 _ ne _ _ -14 . . . interp interp _ _ -1 4 _ punct _ _ - -1 We w w prep prep acc|wok acc|wok -1 6 _ adjunct _ _ -2 wtorek wtorek wtorek subst subst sg|acc|m3 sg|acc|m3 -1 1 _ comp _ _ -3 prezydent prezydent prezydent subst subst sg|nom|m1 sg|nom|m1 -1 6 _ subj _ _ -4 Robert Robert Robert subst subst sg|nom|m1 sg|nom|m1 -1 3 _ app _ _ -5 Choma Choma Choma subst subst sg|nom|m1 sg|nom|m1 -1 0 _ pred _ _ -6 skierował skierować skierować praet praet sg|m1|perf sg|m1|perf -1 5 _ comp_fin _ _ -7 sprawę sprawa sprawa subst subst sg|acc|f sg|acc|f -1 6 _ obj _ _ -8 do do do prep prep gen gen -1 6 _ comp _ _ -9 rzecznika rzecznik rzecznik subst subst sg|gen|m1 sg|gen|m1 -1 8 _ comp _ _ -10 dyscyplinarnego dyscyplinarny dyscyplinarny adj adj sg|gen|m1|pos sg|gen|m1|pos -1 9 _ adjunct _ _ -11 UM UM UM subst subst sg|gen|m3 sg|gen|m3 -1 9 _ adjunct _ _ -12 Danuty Danuta Danuta subst subst sg|gen|f sg|gen|f -1 9 _ app _ _ -13 Wiech Wiech Wiech subst subst sg|gen|f sg|gen|f -1 12 _ ne _ _ -14 . . . interp interp _ _ -1 5 _ punct _ _ - -1 We w w prep prep acc|wok acc|wok -1 6 _ adjunct _ _ -2 wtorek wtorek wtorek subst subst sg|acc|m3 sg|acc|m3 -1 1 _ comp _ _ -3 prezydent prezydent prezydent subst subst sg|nom|m1 sg|nom|m1 -1 6 _ subj _ _ -4 Robert Robert Robert subst subst sg|nom|m1 sg|nom|m1 -1 3 _ app _ _ -5 Choma Choma Choma subst subst sg|nom|m1 sg|nom|m1 -1 4 _ ne _ _ -6 skierował skierować skierować praet praet sg|m1|perf sg|m1|perf -1 0 _ pred _ _ -7 sprawę sprawa sprawa subst subst sg|acc|f sg|acc|f -1 6 _ obj _ _ -8 do do do prep prep gen gen -1 6 _ comp _ _ -9 rzecznika rzecznik rzecznik subst subst sg|gen|m1 sg|gen|m1 -1 8 _ comp _ _ -10 dyscyplinarnego dyscyplinarny dyscyplinarny adj adj sg|gen|m1|pos sg|gen|m1|pos -1 9 _ adjunct _ _ -11 UM UM UM subst subst sg|gen|m3 sg|gen|m3 -1 9 _ adjunct _ _ -12 Danuty Danuta Danuta subst subst sg|gen|f sg|gen|f -1 9 _ app _ _ -13 Wiech Wiech Wiech subst subst sg|gen|f sg|gen|f -1 12 _ ne _ _ -14 . . . interp interp _ _ -1 6 _ punct _ _ - -1 We w w prep prep acc|wok acc|wok -1 6 _ adjunct _ _ -2 wtorek wtorek wtorek subst subst sg|acc|m3 sg|acc|m3 -1 1 _ comp _ _ -3 prezydent prezydent prezydent subst subst sg|nom|m1 sg|nom|m1 -1 6 _ subj _ _ -4 Robert Robert Robert subst subst sg|nom|m1 sg|nom|m1 -1 3 _ app _ _ -5 Choma Choma Choma subst subst sg|nom|m1 sg|nom|m1 -1 4 _ ne _ _ -6 skierował skierować skierować praet praet sg|m1|perf sg|m1|perf -1 0 _ pred _ _ -7 sprawę sprawa sprawa subst subst sg|acc|f sg|acc|f -1 6 _ obj _ _ -8 do do do prep prep gen gen -1 6 _ comp _ _ -9 rzecznika rzecznik rzecznik subst subst sg|gen|m1 sg|gen|m1 -1 8 _ comp _ _ -10 dyscyplinarnego dyscyplinarny dyscyplinarny adj adj sg|gen|m1|pos sg|gen|m1|pos -1 9 _ adjunct _ _ -11 UM UM UM subst subst sg|gen|m3 sg|gen|m3 -1 9 _ adjunct _ _ -12 Danuty Danuta Danuta subst subst sg|gen|f sg|gen|f -1 9 _ app _ _ -13 Wiech Wiech Wiech subst subst sg|gen|f sg|gen|f -1 12 _ ne _ _ -14 . . . interp interp _ _ -1 6 _ punct _ _ - -1 We w w prep prep acc|wok acc|wok -1 6 _ adjunct _ _ -2 wtorek wtorek wtorek subst subst sg|acc|m3 sg|acc|m3 -1 1 _ comp _ _ -3 prezydent prezydent prezydent subst subst sg|nom|m1 sg|nom|m1 -1 6 _ subj _ _ -4 Robert Robert Robert subst subst sg|nom|m1 sg|nom|m1 -1 3 _ app _ _ -5 Choma Choma Choma subst subst sg|nom|m1 sg|nom|m1 -1 4 _ ne _ _ -6 skierował skierować skierować praet praet sg|m1|perf sg|m1|perf -1 0 _ pred _ _ -7 sprawę sprawa sprawa subst subst sg|acc|f sg|acc|f -1 6 _ obj _ _ -8 do do do prep prep gen gen -1 6 _ comp _ _ -9 rzecznika rzecznik rzecznik subst subst sg|gen|m1 sg|gen|m1 -1 8 _ comp _ _ -10 dyscyplinarnego dyscyplinarny dyscyplinarny adj adj sg|gen|m1|pos sg|gen|m1|pos -1 9 _ adjunct _ _ -11 UM UM UM subst subst sg|gen|m3 sg|gen|m3 -1 9 _ adjunct _ _ -12 Danuty Danuta Danuta subst subst sg|gen|f sg|gen|f -1 9 _ app _ _ -13 Wiech Wiech Wiech subst subst sg|gen|f sg|gen|f -1 12 _ ne _ _ -14 . . . interp interp _ _ -1 6 _ punct _ _ - -1 We w w prep prep acc|wok acc|wok -1 6 _ adjunct _ _ -2 wtorek wtorek wtorek subst subst sg|acc|m3 sg|acc|m3 -1 1 _ comp _ _ -3 prezydent prezydent prezydent subst subst sg|nom|m1 sg|nom|m1 -1 6 _ subj _ _ -4 Robert Robert Robert subst subst sg|nom|m1 sg|nom|m1 -1 3 _ app _ _ -5 Choma Choma Choma subst subst sg|nom|m1 sg|nom|m1 -1 4 _ ne _ _ -6 skierował skierować skierować praet praet sg|m1|perf sg|m1|perf -1 0 _ pred _ _ -7 sprawę sprawa sprawa subst subst sg|acc|f sg|acc|f -1 6 _ obj _ _ -8 do do do prep prep gen gen -1 6 _ comp _ _ -9 rzecznika rzecznik rzecznik subst subst sg|gen|m1 sg|gen|m1 -1 8 _ comp _ _ -10 dyscyplinarnego dyscyplinarny dyscyplinarny adj adj sg|gen|m1|pos sg|gen|m1|pos -1 9 _ adjunct _ _ -11 UM UM UM subst subst sg|gen|m3 sg|gen|m3 -1 9 _ adjunct _ _ -12 Danuty Danuta Danuta subst subst sg|gen|f sg|gen|f -1 9 _ app _ _ -13 Wiech Wiech Wiech subst subst sg|gen|f sg|gen|f -1 12 _ ne _ _ -14 . . . interp interp _ _ -1 6 _ punct _ _ - -1 We w w prep prep acc|wok acc|wok -1 6 _ adjunct _ _ -2 wtorek wtorek wtorek subst subst sg|acc|m3 sg|acc|m3 -1 1 _ comp _ _ -3 prezydent prezydent prezydent subst subst sg|nom|m1 sg|nom|m1 -1 6 _ subj _ _ -4 Robert Robert Robert subst subst sg|nom|m1 sg|nom|m1 -1 3 _ app _ _ -5 Choma Choma Choma subst subst sg|nom|m1 sg|nom|m1 -1 4 _ ne _ _ -6 skierował skierować skierować praet praet sg|m1|perf sg|m1|perf -1 0 _ pred _ _ -7 sprawę sprawa sprawa subst subst sg|acc|f sg|acc|f -1 6 _ obj _ _ -8 do do do prep prep gen gen -1 6 _ comp _ _ -9 rzecznika rzecznik rzecznik subst subst sg|gen|m1 sg|gen|m1 -1 8 _ comp _ _ -10 dyscyplinarnego dyscyplinarny dyscyplinarny adj adj sg|gen|m1|pos sg|gen|m1|pos -1 9 _ adjunct _ _ -11 UM UM UM subst subst sg|gen|m3 sg|gen|m3 -1 9 _ adjunct _ _ -12 Danuty Danuta Danuta subst subst sg|gen|f sg|gen|f -1 9 _ app _ _ -13 Wiech Wiech Wiech subst subst sg|gen|f sg|gen|f -1 12 _ ne _ _ -14 . . . interp interp _ _ -1 6 _ punct _ _ - -1 We w w prep prep acc|wok acc|wok -1 6 _ adjunct _ _ -2 wtorek wtorek wtorek subst subst sg|acc|m3 sg|acc|m3 -1 1 _ comp _ _ -3 prezydent prezydent prezydent subst subst sg|nom|m1 sg|nom|m1 -1 6 _ subj _ _ -4 Robert Robert Robert subst subst sg|nom|m1 sg|nom|m1 -1 3 _ app _ _ -5 Choma Choma Choma subst subst sg|nom|m1 sg|nom|m1 -1 4 _ ne _ _ -6 skierował skierować skierować praet praet sg|m1|perf sg|m1|perf -1 0 _ pred _ _ -7 sprawę sprawa sprawa subst subst sg|acc|f sg|acc|f -1 6 _ obj _ _ -8 do do do prep prep gen gen -1 6 _ comp _ _ -9 rzecznika rzecznik rzecznik subst subst sg|gen|m1 sg|gen|m1 -1 8 _ comp _ _ -10 dyscyplinarnego dyscyplinarny dyscyplinarny adj adj sg|gen|m1|pos sg|gen|m1|pos -1 9 _ adjunct _ _ -11 UM UM UM subst subst sg|gen|m3 sg|gen|m3 -1 9 _ app _ _ -12 Danuty Danuta Danuta subst subst sg|gen|f sg|gen|f -1 11 _ adjunct _ _ -13 Wiech Wiech Wiech subst subst sg|gen|f sg|gen|f -1 12 _ ne _ _ -14 . . . interp interp _ _ -1 6 _ punct _ _ - -1 We w w prep prep acc|wok acc|wok -1 6 _ adjunct _ _ -2 wtorek wtorek wtorek subst subst sg|acc|m3 sg|acc|m3 -1 1 _ comp _ _ -3 prezydent prezydent prezydent subst subst sg|nom|m1 sg|nom|m1 -1 6 _ subj _ _ -4 Robert Robert Robert subst subst sg|nom|m1 sg|nom|m1 -1 3 _ app _ _ -5 Choma Choma Choma subst subst sg|nom|m1 sg|nom|m1 -1 4 _ ne _ _ -6 skierował skierować skierować praet praet sg|m1|perf sg|m1|perf -1 0 _ pred _ _ -7 sprawę sprawa sprawa subst subst sg|acc|f sg|acc|f -1 6 _ obj _ _ -8 do do do prep prep gen gen -1 6 _ comp _ _ -9 rzecznika rzecznik rzecznik subst subst sg|gen|m1 sg|gen|m1 -1 8 _ comp _ _ -10 dyscyplinarnego dyscyplinarny dyscyplinarny adj adj sg|gen|m1|pos sg|gen|m1|pos -1 9 _ adjunct _ _ -11 UM UM UM subst subst sg|gen|m3 sg|gen|m3 -1 9 _ adjunct _ _ -12 Danuty Danuta Danuta subst subst sg|gen|f sg|gen|f -1 9 _ app _ _ -13 Wiech Wiech Wiech subst subst sg|gen|f sg|gen|f -1 12 _ ne _ _ -14 . . . interp interp _ _ -1 6 _ punct _ _ - -1 We w w prep prep acc|wok acc|wok -1 6 _ adjunct _ _ -2 wtorek wtorek wtorek subst subst sg|acc|m3 sg|acc|m3 -1 1 _ comp _ _ -3 prezydent prezydent prezydent subst subst sg|nom|m1 sg|nom|m1 -1 6 _ subj _ _ -4 Robert Robert Robert subst subst sg|nom|m1 sg|nom|m1 -1 3 _ app _ _ -5 Choma Choma Choma subst subst sg|nom|m1 sg|nom|m1 -1 4 _ ne _ _ -6 skierował skierować skierować praet praet sg|m1|perf sg|m1|perf -1 0 _ pred _ _ -7 sprawę sprawa sprawa subst subst sg|acc|f sg|acc|f -1 6 _ obj _ _ -8 do do do prep prep gen gen -1 6 _ comp _ _ -9 rzecznika rzecznik rzecznik subst subst sg|gen|m1 sg|gen|m1 -1 8 _ comp _ _ -10 dyscyplinarnego dyscyplinarny dyscyplinarny adj adj sg|gen|m1|pos sg|gen|m1|pos -1 9 _ adjunct _ _ -11 UM UM UM subst subst sg|gen|m3 sg|gen|m3 -1 9 _ adjunct _ _ -12 Danuty Danuta Danuta subst subst sg|gen|f sg|gen|f -1 9 _ app _ _ -13 Wiech Wiech Wiech subst subst sg|gen|f sg|gen|f -1 12 _ ne _ _ -14 . . . interp interp _ _ -1 6 _ punct _ _ - -1 We w w prep prep acc|wok acc|wok -1 6 _ adjunct _ _ -2 wtorek wtorek wtorek subst subst sg|acc|m3 sg|acc|m3 -1 1 _ comp _ _ -3 prezydent prezydent prezydent subst subst sg|nom|m1 sg|nom|m1 -1 6 _ subj _ _ -4 Robert Robert Robert subst subst sg|nom|m1 sg|nom|m1 -1 3 _ app _ _ -5 Choma Choma Choma subst subst sg|nom|m1 sg|nom|m1 -1 4 _ ne _ _ -6 skierował skierować skierować praet praet sg|m1|perf sg|m1|perf -1 14 _ conjunct _ _ -7 sprawę sprawa sprawa subst subst sg|acc|f sg|acc|f -1 6 _ obj _ _ -8 do do do prep prep gen gen -1 6 _ comp _ _ -9 rzecznika rzecznik rzecznik subst subst sg|gen|m1 sg|gen|m1 -1 8 _ comp _ _ -10 dyscyplinarnego dyscyplinarny dyscyplinarny adj adj sg|gen|m1|pos sg|gen|m1|pos -1 9 _ adjunct _ _ -11 UM UM UM subst subst sg|gen|m3 sg|gen|m3 -1 9 _ adjunct _ _ -12 Danuty Danuta Danuta subst subst sg|gen|f sg|gen|f -1 9 _ app _ _ -13 Wiech Wiech Wiech subst subst sg|gen|f sg|gen|f -1 12 _ ne _ _ -14 . . . interp interp _ _ -1 0 _ pred _ _ - diff --git a/dependencyParser/experimental/examples/README.txt b/dependencyParser/experimental/examples/README.txt new file mode 100644 index 0000000..c5e773a --- /dev/null +++ b/dependencyParser/experimental/examples/README.txt @@ -0,0 +1,5 @@ +test.csv contains an example input to the parser. +test.out contains the output generated by the parser given the example as the input. +d2 output.txt contains the value of the variable d2 printed out just before Decoder.decode is called in Parser.parse given the example as the input. +is output.txt contains the value of the variable is printed out just before Decoder.decode is called in Parser.parse given the example as the input. +edges output.txt contains the values of the variables Edges.edges and Edges.def printed out at the end of Parser's constructor given the example as the input. diff --git a/dependencyParser/experimental/examples/d2 output.txt b/dependencyParser/experimental/examples/d2 output.txt new file mode 100644 index 0000000..4637aa8 --- /dev/null +++ b/dependencyParser/experimental/examples/d2 output.txt @@ -0,0 +1,4023 @@ +typesLen = 32 +len = 15 +pl[0][0] = 0.0 +pl[0][1] = 0.0 +pl[0][2] = -0.010866272 +pl[0][3] = -0.043218352 +pl[0][4] = -0.075570434 +pl[0][5] = -0.10792251 +pl[0][6] = 0.038865875 +pl[0][7] = -0.1410935 +pl[0][8] = -0.16593723 +pl[0][9] = -0.18431185 +pl[0][10] = -0.07813574 +pl[0][11] = -0.22914958 +pl[0][12] = -0.26150167 +pl[0][13] = -0.29385376 +pl[0][14] = -0.25755194 +pl[1][0] = 0.0 +pl[1][1] = 0.0 +pl[1][2] = 0.0 +pl[1][3] = -0.06868441 +pl[1][4] = -0.13736881 +pl[1][5] = -0.20605323 +pl[1][6] = 0.0 +pl[1][7] = -0.2864833 +pl[1][8] = -0.057125658 +pl[1][9] = -0.3629666 +pl[1][10] = -0.09364338 +pl[1][11] = -0.48622873 +pl[1][12] = -0.55491316 +pl[1][13] = -0.62359756 +pl[1][14] = -0.2074638 +pl[2][0] = 0.0 +pl[2][1] = 0.0 +pl[2][2] = 0.0 +pl[2][3] = 0.0 +pl[2][4] = -0.05129477 +pl[2][5] = -0.10258954 +pl[2][6] = -0.12634124 +pl[2][7] = -0.1861538 +pl[2][8] = -0.13479765 +pl[2][9] = -0.25604704 +pl[2][10] = -0.09761818 +pl[2][11] = -0.34374037 +pl[2][12] = -0.39503515 +pl[2][13] = -0.44632992 +pl[2][14] = -0.2660829 +pl[3][0] = 0.0 +pl[3][1] = -0.019381773 +pl[3][2] = 0.0 +pl[3][3] = 0.0 +pl[3][4] = 0.0 +pl[3][5] = -0.05129477 +pl[3][6] = -0.084227495 +pl[3][7] = -0.13485903 +pl[3][8] = -0.1083162 +pl[3][9] = -0.20475228 +pl[3][10] = -0.083017066 +pl[3][11] = -0.2924456 +pl[3][12] = -0.34374037 +pl[3][13] = -0.39503515 +pl[3][14] = -0.23725143 +pl[4][0] = 0.0 +pl[4][1] = -0.038763545 +pl[4][2] = -0.022566656 +pl[4][3] = 0.0 +pl[4][4] = 0.0 +pl[4][5] = 0.0 +pl[4][6] = -0.042113747 +pl[4][7] = -0.08356427 +pl[4][8] = -0.08183474 +pl[4][9] = -0.15345752 +pl[4][10] = -0.06841596 +pl[4][11] = -0.24115087 +pl[4][12] = -0.29244563 +pl[4][13] = -0.3437404 +pl[4][14] = -0.20841992 +pl[5][0] = 0.0 +pl[5][1] = -0.05814532 +pl[5][2] = -0.04513331 +pl[5][3] = -0.022566656 +pl[5][4] = 0.0 +pl[5][5] = 0.0 +pl[5][6] = 0.0 +pl[5][7] = -0.032269493 +pl[5][8] = -0.055353288 +pl[5][9] = -0.10216274 +pl[5][10] = -0.05381486 +pl[5][11] = -0.18985608 +pl[5][12] = -0.24115086 +pl[5][13] = -0.29244563 +pl[5][14] = -0.17958842 +pl[6][0] = 0.0 +pl[6][1] = -0.040194526 +pl[6][2] = -0.06450388 +pl[6][3] = -0.043002583 +pl[6][4] = -0.021501292 +pl[6][5] = 0.0 +pl[6][6] = 0.0 +pl[6][7] = 0.0 +pl[6][8] = -0.066330016 +pl[6][9] = -0.073113225 +pl[6][10] = -0.04765781 +pl[6][11] = -0.14876442 +pl[6][12] = -0.20511504 +pl[6][13] = -0.26146567 +pl[6][14] = -0.10682573 +pl[7][0] = 0.0 +pl[7][1] = -0.07608842 +pl[7][2] = -0.069873534 +pl[7][3] = -0.04730688 +pl[7][4] = -0.024740225 +pl[7][5] = -0.0021735686 +pl[7][6] = 0.0 +pl[7][7] = 0.0 +pl[7][8] = 0.0 +pl[7][9] = -0.018598476 +pl[7][10] = -0.030110732 +pl[7][11] = -0.106291816 +pl[7][12] = -0.15758659 +pl[7][13] = -0.20888136 +pl[7][14] = -0.12787816 +pl[8][0] = 0.0 +pl[8][1] = -0.08318254 +pl[8][2] = -0.06289519 +pl[8][3] = -0.047171395 +pl[8][4] = -0.031447597 +pl[8][5] = -0.015723798 +pl[8][6] = -0.0021494746 +pl[8][7] = 0.0 +pl[8][8] = 0.0 +pl[8][9] = 0.0 +pl[8][10] = -0.014698882 +pl[8][11] = -0.12326215 +pl[8][12] = -0.19194657 +pl[8][13] = -0.26063097 +pl[8][14] = -0.06691221 +pl[9][0] = 0.0 +pl[9][1] = -0.10338253 +pl[9][2] = -0.10464167 +pl[9][3] = -0.082075015 +pl[9][4] = -0.05950836 +pl[9][5] = -0.036941703 +pl[9][6] = 0.0 +pl[9][7] = -0.012201479 +pl[9][8] = 0.0 +pl[9][9] = 0.0 +pl[9][10] = 0.0 +pl[9][11] = -0.03639857 +pl[9][12] = -0.08769334 +pl[9][13] = -0.1389881 +pl[9][14] = -0.0852123 +pl[10][0] = 0.0 +pl[10][1] = -0.11613673 +pl[10][2] = -0.035999577 +pl[10][3] = -0.029772816 +pl[10][4] = -0.023546053 +pl[10][5] = -0.017319292 +pl[10][6] = -0.0057317354 +pl[10][7] = -0.011092531 +pl[10][8] = -0.020143617 +pl[10][9] = 0.0 +pl[10][10] = 0.0 +pl[10][11] = 0.0 +pl[10][12] = -0.017717246 +pl[10][13] = -0.035434492 +pl[10][14] = -0.010797325 +pl[11][0] = 0.0 +pl[11][1] = -0.1344459 +pl[11][2] = -0.13636647 +pl[11][3] = -0.11379981 +pl[11][4] = -0.09123316 +pl[11][5] = -0.0686665 +pl[11][6] = 0.0 +pl[11][7] = -0.04392628 +pl[11][8] = -0.031063374 +pl[11][9] = -0.009158145 +pl[11][10] = 0.0 +pl[11][11] = 0.0 +pl[11][12] = 0.0 +pl[11][13] = -0.05129477 +pl[11][14] = -0.05766299 +pl[12][0] = 0.0 +pl[12][1] = -0.15382768 +pl[12][2] = -0.15893313 +pl[12][3] = -0.13636647 +pl[12][4] = -0.11379981 +pl[12][5] = -0.09123316 +pl[12][6] = 0.0 +pl[12][7] = -0.06649294 +pl[12][8] = -0.050445147 +pl[12][9] = -0.0317248 +pl[12][10] = -0.040165026 +pl[12][11] = 0.0 +pl[12][12] = 0.0 +pl[12][13] = 0.0 +pl[12][14] = -0.028831495 +pl[13][0] = 0.0 +pl[13][1] = -0.17320946 +pl[13][2] = -0.1814998 +pl[13][3] = -0.15893313 +pl[13][4] = -0.13636647 +pl[13][5] = -0.11379981 +pl[13][6] = 0.0 +pl[13][7] = -0.08905959 +pl[13][8] = -0.069826916 +pl[13][9] = -0.054291457 +pl[13][10] = -0.08033005 +pl[13][11] = -0.022566656 +pl[13][12] = 0.0 +pl[13][13] = 0.0 +pl[13][14] = 0.0 +pl[14][0] = 0.0 +pl[14][1] = -0.27354294 +pl[14][2] = 0.009959197 +pl[14][3] = -1.7022714E-4 +pl[14][4] = -0.010299649 +pl[14][5] = -0.020429071 +pl[14][6] = -0.08399554 +pl[14][7] = -0.0144728385 +pl[14][8] = -0.11811297 +pl[14][9] = 0.021364588 +pl[14][10] = -0.050320618 +pl[14][11] = 0.020258844 +pl[14][12] = 0.010129422 +pl[14][13] = 0.0 +pl[14][14] = 0.0 +lab[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.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, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0] +lab[0][1] = [-100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.0857121, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0] +lab[0][2] = [-100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.060610943, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.09019457, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0] +lab[0][3] = [-100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.059856206, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.088372804, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0] +lab[0][4] = [-100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.08843574, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.10066992, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0] +lab[0][5] = [-100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.07532123, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.09154862, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0] +lab[0][6] = [-100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, 0.14257567, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.035747826, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, 0.04456647, -100.0] +lab[0][7] = [-100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.08668655, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.07716806, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0] +lab[0][8] = [-100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.048678666, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0] +lab[0][9] = [-100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.11443109, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.075755596, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0] +lab[0][10] = [-100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.064376086, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0] +lab[0][11] = [-100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.067867786, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.10572456, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0] +lab[0][12] = [-100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.07676454, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.07319089, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0] +lab[0][13] = [-100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.15070356, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.092133135, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0] +lab[0][14] = [-100.0, -100.0, -100.0, -100.0, 0.010659548, -100.0, -100.0, -100.0, -100.0, 0.021760488, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, 0.031423494, -100.0, -0.06268892, -100.0, -100.0, -100.0, -100.0, -100.0] +lab[1][0] = [-100.0, -100.0, -100.0, -100.0, -0.0072993548, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0] +lab[1][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.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, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0] +lab[1][2] = [-100.0, -100.0, -100.0, -100.0, 0.007805228, 0.06354494, -100.0, -100.0, -0.027950497, -100.0, 0.008368777, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, 0.0017291368, -100.0, -100.0, -100.0, 0.012703567, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0] +lab[1][3] = [-100.0, -100.0, -100.0, -100.0, -0.011061878, -0.033676945, -100.0, -100.0, -0.03869218, -100.0, 0.014225116, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, 0.002365287, -100.0, -100.0, -100.0, 0.0063459743, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0] +lab[1][4] = [-100.0, -100.0, -100.0, -100.0, -0.0057480163, -0.032733124, -100.0, -100.0, -0.018860167, -100.0, 0.007058848, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.0018841489, -100.0, -100.0, -100.0, -7.932577E-4, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0] +lab[1][5] = [-100.0, -100.0, -100.0, -100.0, -0.008187501, -0.07466402, -100.0, -100.0, -0.04258529, -100.0, 0.012807902, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.004619921, -100.0, -100.0, -100.0, 0.04837003, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0] +lab[1][6] = [-100.0, -100.0, -100.0, -100.0, -0.0072772917, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0] +lab[1][7] = [-100.0, -100.0, -100.0, -100.0, -0.0061553996, -0.07721132, -100.0, -100.0, -0.025096273, -100.0, -0.0038240058, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, 0.003359705, -100.0, -100.0, -100.0, 0.124412775, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0] +lab[1][8] = [-100.0, -100.0, -100.0, -100.0, -0.055956498, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0] +lab[1][9] = [-100.0, -100.0, -100.0, -100.0, -0.0029725265, -0.096099176, -100.0, -100.0, -0.03457125, -100.0, 0.013646577, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.002417894, -100.0, -100.0, -100.0, 0.048483256, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0] +lab[1][10] = [-100.0, -100.0, -100.0, -100.0, -0.019577898, -0.05434969, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, 0.011361387, -100.0, -0.016742414, -100.0, -100.0, -100.0, 0.0030374874, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0] +lab[1][11] = [-100.0, -100.0, -100.0, -100.0, -0.0022678282, -0.05511328, -100.0, -100.0, -0.01873274, -100.0, 0.0031329177, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.006130168, -100.0, -100.0, -100.0, 0.01606226, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0] +lab[1][12] = [-100.0, -100.0, -100.0, -100.0, 0.0066373865, -0.085802294, -100.0, -100.0, -0.017907545, -100.0, 0.008771209, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.0022111083, -100.0, -100.0, -100.0, -0.0019399584, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0] +lab[1][13] = [-100.0, -100.0, -100.0, -100.0, -0.0061764345, -0.08351106, -100.0, -100.0, -0.013618027, -100.0, -0.0072948383, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.009102309, -100.0, -100.0, -100.0, 0.05033239, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0] +lab[1][14] = [-100.0, -100.0, -100.0, -100.0, -100.0, -0.051086202, -100.0, -100.0, -100.0, -100.0, -100.0, -0.15393955, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.012258048] +lab[2][0] = [-100.0, -100.0, -100.0, -100.0, 0.031287532, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0] +lab[2][1] = [-100.0, -100.0, -100.0, -100.0, 0.019715436, 0.01835772, -100.0, -100.0, -0.021147477, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.021325154, -100.0, -100.0, -100.0, -0.011986047, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.025321336, -100.0, -100.0, -100.0] +lab[2][2] = [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.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, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0] +lab[2][3] = [-100.0, -100.0, -100.0, -100.0, -0.008683903, -0.0071144216, -100.0, -0.07223273, 0.007157893, -100.0, 0.0109011335, -100.0, -0.0032681033, -100.0, -100.0, -0.025956124, -100.0, -0.00907862, -100.0, -100.0, -100.0, -0.005509577, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, 0.007406844, -0.0073494264] +lab[2][4] = [-100.0, -100.0, -100.0, -100.0, -0.017639821, -0.07690126, -100.0, -7.0552714E-4, -0.043969035, -100.0, 0.011751435, -100.0, -0.002466971, -100.0, -100.0, -0.026199987, -100.0, -0.013000479, -100.0, -100.0, -100.0, 0.0011172746, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, 0.004351847, 0.009639561] +lab[2][5] = [-100.0, -100.0, -100.0, -100.0, -0.03488801, -0.10307334, -100.0, -0.0684557, 0.020158656, -100.0, -0.006975678, -100.0, -0.012064556, -100.0, -100.0, -0.023857245, -100.0, -0.013141723, -100.0, -100.0, -100.0, 0.0014515971, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, 0.007406844, -0.012931901] +lab[2][6] = [-100.0, -100.0, -100.0, -100.0, 0.029374115, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.03291245, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0] +lab[2][7] = [-100.0, -100.0, -100.0, -100.0, -0.06484228, -0.08482167, -100.0, -0.07136143, 0.052072287, -100.0, -0.045210756, -100.0, 0.0022105137, -100.0, -100.0, -0.031402368, -100.0, -0.0041569127, -100.0, -100.0, -100.0, -0.019917594, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, 0.011107417, -0.0064372392] +lab[2][8] = [-100.0, -100.0, -100.0, -100.0, -0.010947768, -0.16124275, -100.0, -100.0, -0.020897083, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.00955688, -100.0, -100.0, -100.0, 0.017641533, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.01904033, -100.0, -100.0, -100.0] +lab[2][9] = [-100.0, -100.0, -100.0, -100.0, 0.11203786, 0.08516422, -100.0, -0.067602776, 0.017576952, -100.0, 0.0030263364, -100.0, -7.4397936E-4, -100.0, -100.0, -0.029012637, -100.0, -0.017234312, -100.0, -100.0, -100.0, -0.029723631, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, 0.01241862, -0.013692742] +lab[2][10] = [-100.0, -100.0, -100.0, -100.0, 0.061739136, -0.06816518, -0.017635567, 0.03411534, 0.027354993, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.0042059096, -100.0, -100.0, -100.0, -0.046784803, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0] +lab[2][11] = [-100.0, -100.0, -100.0, -100.0, 0.0780552, 0.09361959, -100.0, -0.04189497, 0.054181423, -100.0, 0.014132376, -100.0, -0.02349671, -100.0, -100.0, -0.030720538, -100.0, -0.016635802, -100.0, -100.0, -100.0, -0.04262755, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, 0.0134480735, -0.009904164] +lab[2][12] = [-100.0, -100.0, -100.0, -100.0, 0.050173625, 0.12472234, -100.0, 0.02470325, -0.0433001, -100.0, 0.025236022, -100.0, -0.017199075, -100.0, -100.0, -0.036560286, -100.0, -0.0158622, -100.0, -100.0, -100.0, -0.049050692, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, 0.016003763, -0.0027452079] +lab[2][13] = [-100.0, -100.0, -100.0, -100.0, 0.094317816, 0.09077047, -100.0, -0.04724109, -0.014309814, -100.0, -6.103539E-4, -100.0, -0.007984497, -100.0, -100.0, -0.03456169, -100.0, -0.01148505, -100.0, -100.0, -100.0, -0.0407275, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, 0.0090789925, -0.00904469] +lab[2][14] = [-100.0, -100.0, -100.0, -100.0, 0.13055271, 0.00994876, -100.0, 0.027116202, -0.006811875, -100.0, -100.0, -0.03950805, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, 0.012288794, 0.011942935, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.008141532] +lab[3][0] = [-100.0, -100.0, -100.0, -100.0, 0.015727764, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0] +lab[3][1] = [-100.0, -100.0, -100.0, -100.0, 0.026589936, 0.015837692, -100.0, -100.0, -0.018502066, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.013287211, -100.0, -100.0, -100.0, -0.011986047, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.019401088, -100.0, -100.0, -100.0] +lab[3][2] = [-100.0, -100.0, -100.0, -100.0, -0.07458202, -0.001280698, -100.0, -0.007731626, -0.0056997146, -100.0, -0.014050994, -100.0, -0.020443644, -100.0, -100.0, -0.0304739, -100.0, -0.06522928, -100.0, -100.0, -100.0, -0.009457436, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.004204633, -0.0056973123] +lab[3][3] = [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.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, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0] +lab[3][4] = [-100.0, -100.0, -100.0, -100.0, -0.090102285, -0.08245421, -100.0, 0.20142533, 0.1338391, -100.0, -0.0064666253, -100.0, 0.004834483, -100.0, -100.0, -0.013569326, -100.0, -0.01595074, -100.0, -100.0, -100.0, -0.026188968, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.0026644845, -0.008290936] +lab[3][5] = [-100.0, -100.0, -100.0, -100.0, -0.048254117, -0.11579309, -100.0, 0.1175178, 0.11143502, -100.0, -0.004636286, -100.0, 1.8035388E-4, -100.0, -100.0, -0.014182787, -100.0, -0.01650513, -100.0, -100.0, -100.0, -0.007539835, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, 0.0017236789, -0.0094553] +lab[3][6] = [-100.0, -100.0, -100.0, -100.0, 0.025279988, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.010607917, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0] +lab[3][7] = [-100.0, -100.0, -100.0, -100.0, 0.015750844, -0.13357572, -100.0, -0.028501447, -0.044795267, -100.0, -0.043282006, -100.0, 0.0054771937, -100.0, -100.0, -0.017991487, -100.0, -0.009471957, -100.0, -100.0, -100.0, -0.027596768, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, 0.006738336, -0.0046989387] +lab[3][8] = [-100.0, -100.0, -100.0, -100.0, 0.04237008, -0.105790615, -100.0, -100.0, -1.0734936E-4, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, 0.005038883, -100.0, -100.0, -100.0, -0.023716997, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.022824557, -100.0, -100.0, -100.0] +lab[3][9] = [-100.0, -100.0, -100.0, -100.0, 0.08682765, -0.007630133, -100.0, 0.058125526, -0.0100971535, -100.0, -0.010686963, -100.0, -0.004728324, -100.0, -100.0, -0.021554107, -100.0, -0.023323614, -100.0, -100.0, -100.0, -0.040496103, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, 0.0063773906, -0.00847455] +lab[3][10] = [-100.0, -100.0, -100.0, -100.0, 0.11950284, -0.036674343, -0.020355824, 0.049630567, -0.018184561, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.010001851, -100.0, -100.0, -100.0, -0.024856072, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0] +lab[3][11] = [-100.0, -100.0, -100.0, -100.0, 0.17998444, -0.045073137, -100.0, -0.011935525, -0.12302958, -100.0, -8.2165695E-4, -100.0, -0.015568759, -100.0, -100.0, -0.023021586, -100.0, -0.021753242, -100.0, -100.0, -100.0, -0.04285603, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, 0.0020304294, -0.0046989387] +lab[3][12] = [-100.0, -100.0, -100.0, -100.0, 0.19373284, 0.035355195, -100.0, 0.061362393, -0.13824204, -100.0, 0.01226894, -100.0, -0.011150414, -100.0, -100.0, -0.023918848, -100.0, -0.013573138, -100.0, -100.0, -100.0, -0.04558915, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, 0.0111303255, -0.0065263407] +lab[3][13] = [-100.0, -100.0, -100.0, -100.0, 0.22340338, -0.010336123, -100.0, -0.004239533, -0.092604324, -100.0, -0.009156614, -100.0, -0.0033510108, -100.0, -100.0, -0.021037031, -100.0, -0.0128913205, -100.0, -100.0, -100.0, -0.03615597, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, 0.0030377628, -0.0064372392] +lab[3][14] = [-100.0, -100.0, -100.0, -100.0, 0.09862638, -0.003327651, -100.0, 0.010758149, -0.02587586, -100.0, -100.0, -0.09787384, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, 0.0065550525, 0.02006538, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.008141532] +lab[4][0] = [-100.0, -100.0, -100.0, -100.0, 6.7530514E-4, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0] +lab[4][1] = [-100.0, -100.0, -100.0, -100.0, 0.03028285, 0.009687788, -100.0, -100.0, -0.026619883, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.020499956, -100.0, -100.0, -100.0, -0.012858687, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.018374441, -100.0, -100.0, -100.0] +lab[4][2] = [-100.0, -100.0, -100.0, -100.0, -0.030117743, -0.0038273223, -100.0, -0.007731626, 0.0012443475, -100.0, -0.018306747, -100.0, -0.024662271, -100.0, -100.0, -0.025412116, -100.0, -0.060929243, -100.0, -100.0, -100.0, -0.0025727116, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.016990807, 0.0040139747] +lab[4][3] = [-100.0, -100.0, -100.0, -100.0, 0.04373014, -0.017481847, -100.0, -0.007979904, -4.2995065E-4, -100.0, -0.011803215, -100.0, -0.020359626, -100.0, -100.0, -0.015568075, -100.0, -0.06102489, -100.0, -100.0, -100.0, -0.004197329, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.032539077, -0.0020389904] +lab[4][4] = [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.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, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0] +lab[4][5] = [-100.0, -100.0, -100.0, -100.0, -0.09336954, -0.11855941, -100.0, 0.08626966, 0.23081473, -100.0, -0.012153118, -100.0, 0.0037080436, -100.0, -100.0, -0.019139193, -100.0, -0.01388609, -100.0, -100.0, -100.0, -0.005913306, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, 0.0017236789, -0.0064372392] +lab[4][6] = [-100.0, -100.0, -100.0, -100.0, 0.042744786, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.02801525, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0] +lab[4][7] = [-100.0, -100.0, -100.0, -100.0, -0.010518864, -0.13629837, -100.0, -0.052703075, 0.038320504, -100.0, -0.03710283, -100.0, 0.006216524, -100.0, -100.0, -0.015964117, -100.0, -0.008941913, -100.0, -100.0, -100.0, -0.02213252, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, 0.006738336, -0.0046989387] +lab[4][8] = [-100.0, -100.0, -100.0, -100.0, 0.051309794, -0.09528896, -100.0, -100.0, 0.016631264, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.01614249, -100.0, -100.0, -100.0, -0.008856785, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.020097349, -100.0, -100.0, -100.0] +lab[4][9] = [-100.0, -100.0, -100.0, -100.0, 0.058439884, -0.010352795, -100.0, 0.030757695, 0.0748779, -100.0, -0.0067891935, -100.0, 0.0015209867, -100.0, -100.0, -0.020485468, -100.0, -0.022793567, -100.0, -100.0, -100.0, -0.032615256, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, 0.0063773906, -0.00847455] +lab[4][10] = [-100.0, -100.0, -100.0, -100.0, 0.11859293, -0.040470853, -0.014690354, 0.02903986, -0.011157115, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.021043513, -100.0, -100.0, -100.0, -0.031460863, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0] +lab[4][11] = [-100.0, -100.0, -100.0, -100.0, 0.15236738, -0.047795787, -100.0, -0.03789837, -0.039913785, -100.0, 0.0011355523, -100.0, -0.006762338, -100.0, -100.0, -0.024428759, -100.0, -0.021223197, -100.0, -100.0, -100.0, -0.03739178, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, 0.007406844, -0.0046989387] +lab[4][12] = [-100.0, -100.0, -100.0, -100.0, 0.17069574, 0.011971382, -100.0, 0.04367266, -0.061951343, -100.0, 0.0017905473, -100.0, -0.0069729253, -100.0, -100.0, -0.017813757, -100.0, -0.016009092, -100.0, -100.0, -100.0, -0.0404248, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, 0.004485974, -0.0065263407] +lab[4][13] = [-100.0, -100.0, -100.0, -100.0, 0.24953745, -0.0031109904, -100.0, -0.036849722, -0.01940545, -100.0, -0.014683241, -100.0, 0.0021319445, -100.0, -100.0, -0.019291952, -100.0, -0.020483337, -100.0, -100.0, -100.0, -0.03292536, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, 0.0030377628, -0.007985065] +lab[4][14] = [-100.0, -100.0, -100.0, -100.0, 0.07949358, -0.009257822, -100.0, 0.009853234, -0.022547951, -100.0, -100.0, -0.10290189, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, 0.008654622, 0.030426882, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.01004408] +lab[5][0] = [-100.0, -100.0, -100.0, -100.0, 0.007786015, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0] +lab[5][1] = [-100.0, -100.0, -100.0, -100.0, 0.02771602, 0.028148944, -100.0, -100.0, -0.018647132, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.020499956, -100.0, -100.0, -100.0, -0.011986047, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.019807553, -100.0, -100.0, -100.0] +lab[5][2] = [-100.0, -100.0, -100.0, -100.0, -0.034447014, -0.0032718359, -100.0, -0.007979904, -0.008797215, -100.0, -0.015350549, -100.0, -0.021705361, -100.0, -100.0, -0.025106095, -100.0, -0.06388942, -100.0, -100.0, -100.0, -0.008526931, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.012114166, -0.0025690359] +lab[5][3] = [-100.0, -100.0, -100.0, -100.0, 0.02968784, -9.501487E-4, -100.0, -0.007731626, -0.001721808, -100.0, -0.012374148, -100.0, -0.020352686, -100.0, -100.0, -0.02302433, -100.0, -0.05969121, -100.0, -100.0, -100.0, -0.0029919485, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.021506028, 9.690776E-4] +lab[5][4] = [-100.0, -100.0, -100.0, -100.0, 0.0413489, -0.0037748502, -100.0, -0.009773591, 0.015026659, -100.0, -0.003453567, -100.0, -0.01806766, -100.0, -100.0, -0.015624217, -100.0, -0.06542269, -100.0, -100.0, -100.0, -0.011077607, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.015954167, -0.00413757] +lab[5][5] = [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.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, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0] +lab[5][6] = [-100.0, -100.0, -100.0, -100.0, 0.009874955, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, 0.0063589364, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0] +lab[5][7] = [-100.0, -100.0, -100.0, -100.0, -0.013725653, -0.09517634, -100.0, -0.032420676, 0.056893967, -100.0, -0.035141923, -100.0, 0.01755903, -100.0, -100.0, -0.025872728, -100.0, -0.0060505494, -100.0, -100.0, -100.0, -0.029148407, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, 0.006738336, -0.0057169683] +lab[5][8] = [-100.0, -100.0, -100.0, -100.0, 0.043727666, -0.13072446, -100.0, -100.0, 0.010142995, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.01695753, -100.0, -100.0, -100.0, -0.0043309685, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.021955507, -100.0, -100.0, -100.0] +lab[5][9] = [-100.0, -100.0, -100.0, -100.0, 0.046453465, 0.0113611175, -100.0, 0.038369372, 0.10987423, -100.0, -0.014727177, -100.0, 0.0025815582, -100.0, -100.0, -0.023696663, -100.0, -0.020068578, -100.0, -100.0, -100.0, -0.04906127, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, 0.0063773906, -0.006955822] +lab[5][10] = [-100.0, -100.0, -100.0, -100.0, 0.11681521, -0.041773185, -0.014802043, 0.02339334, 0.0023333384, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.025621016, -100.0, -100.0, -100.0, -0.035384513, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0] +lab[5][11] = [-100.0, -100.0, -100.0, -100.0, 0.12570891, -0.016102754, -100.0, -0.024745505, -0.0016095638, -100.0, -0.0036058084, -100.0, -0.009599689, -100.0, -100.0, -0.025307972, -100.0, -0.023301505, -100.0, -100.0, -100.0, -0.051421203, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, 0.007406844, -0.0046989387] +lab[5][12] = [-100.0, -100.0, -100.0, -100.0, 0.14795728, 0.02616579, -100.0, 0.066588216, -0.0341523, -100.0, -9.7153184E-5, -100.0, -0.0046272306, -100.0, -100.0, -0.022008631, -100.0, -0.015033025, -100.0, -100.0, -100.0, -0.055872314, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, 0.009962534, -0.0065263407] +lab[5][13] = [-100.0, -100.0, -100.0, -100.0, 0.22414888, 0.0060834433, -100.0, -0.008835591, 0.01732592, -100.0, -0.018156439, -100.0, 8.6487085E-4, -100.0, -100.0, -0.023486823, -100.0, -0.020483337, -100.0, -100.0, -100.0, -0.04710021, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, 0.0030377628, -0.0064372392] +lab[5][14] = [-100.0, -100.0, -100.0, -100.0, 0.08878266, -0.009180344, -100.0, 0.006302624, -0.018893935, -100.0, -100.0, -0.09531936, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, 0.010326847, 0.029544532, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.008141532] +lab[6][0] = [-100.0, -100.0, -100.0, -100.0, 0.023033261, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0] +lab[6][1] = [-100.0, -100.0, -100.0, -100.0, 0.20864604, -0.05089548, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.03976683, -100.0, -100.0, -100.0, -100.0, -100.0, -0.02282291, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0] +lab[6][2] = [-100.0, -100.0, -100.0, -100.0, 0.12736312, -100.0, -0.038424324, -100.0, -100.0, -100.0, 0.13986121, -100.0, -0.012428051, -100.0, -100.0, -0.05530557, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, 0.0043633413, -100.0] +lab[6][3] = [-100.0, -100.0, -100.0, -100.0, -0.0046778144, -100.0, 0.1888846, -100.0, -100.0, -100.0, -0.0020437245, -100.0, -0.013033396, -100.0, -100.0, -0.056855615, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.0037650405, -100.0] +lab[6][4] = [-100.0, -100.0, -100.0, -100.0, 0.007994813, -100.0, 0.1550787, -100.0, -100.0, -100.0, -0.0059514716, -100.0, 0.011946373, -100.0, -100.0, -0.06274183, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.0023011658, -100.0] +lab[6][5] = [-100.0, -100.0, -100.0, -100.0, 0.0034305025, -100.0, 0.12060462, -100.0, -100.0, -100.0, 6.3503464E-4, -100.0, 0.0068051666, -100.0, -100.0, -0.051002603, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.0055534686, -100.0] +lab[6][6] = [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.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, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0] +lab[6][7] = [-100.0, -100.0, -100.0, -100.0, 0.024960238, -100.0, 0.05161933, -100.0, -100.0, -100.0, 0.21018952, -100.0, 0.022909997, -100.0, -100.0, 0.0025447046, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, 0.0024014926, -100.0] +lab[6][8] = [-100.0, -100.0, -100.0, -100.0, 0.034076728, 0.13676485, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.009304508, -100.0, -100.0, -100.0, -100.0, -100.0, 7.967291E-4, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0] +lab[6][9] = [-100.0, -100.0, -100.0, -100.0, -0.07555324, -100.0, 0.09267018, -100.0, -100.0, -100.0, 0.04892666, -100.0, 0.038491517, -100.0, -100.0, 0.027027639, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, 0.009365095, -100.0] +lab[6][10] = [-100.0, -100.0, -100.0, -100.0, 0.017195653, 0.0024830988, 0.03209228, -100.0, -100.0, -100.0, -0.04074017, -100.0, -0.03358294, -100.0, -100.0, 0.06644424, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0] +lab[6][11] = [-100.0, -100.0, -100.0, -100.0, 0.013968601, -100.0, 0.04216479, -100.0, -100.0, -100.0, 0.047949035, -100.0, 0.039137743, -100.0, -100.0, -0.01925468, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, 0.016810946, -100.0] +lab[6][12] = [-100.0, -100.0, -100.0, -100.0, 0.014872201, -100.0, 0.04419685, -100.0, -100.0, -100.0, 0.12845795, -100.0, 0.0055937013, -100.0, -100.0, -0.028737731, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, 0.006175855, -100.0] +lab[6][13] = [-100.0, -100.0, -100.0, -100.0, -0.056315172, -100.0, 0.04807967, -100.0, -100.0, -100.0, 0.118796006, -100.0, 0.06304423, -100.0, -100.0, -0.0020268823, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, 0.011274287, -100.0] +lab[6][14] = [-100.0, -100.0, -100.0, -100.0, 0.037810247, 0.069284454, 0.010218109, -100.0, -100.0, -100.0, 0.042182103, -0.016194848, 0.0046266606, -100.0, 0.018700384, 0.024961736, -100.0, -100.0, -100.0, -100.0, 0.019210849, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, 0.019267486, -0.008150559] +lab[7][0] = [-100.0, -100.0, -100.0, -100.0, 0.0020415904, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0] +lab[7][1] = [-100.0, -100.0, -100.0, -100.0, 0.048857834, 0.024895584, -100.0, -100.0, -0.016711766, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.020600632, -100.0, -100.0, -100.0, -0.0146774035, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.019822594, -100.0, -100.0, -100.0] +lab[7][2] = [-100.0, -100.0, -100.0, -100.0, -0.06337702, -0.0052916403, -100.0, -0.007072131, -0.005676318, -100.0, -0.012953629, -100.0, -0.019245291, -100.0, -100.0, -0.028318094, -100.0, -0.067467794, -100.0, -100.0, -100.0, -0.0020377673, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.009418382, -0.00918054] +lab[7][3] = [-100.0, -100.0, -100.0, -100.0, -0.008698676, -0.0031118554, -100.0, -0.00723242, -0.007731178, -100.0, -0.013173097, -100.0, -0.019161275, -100.0, -100.0, -0.024943981, -100.0, -0.060471296, -100.0, -100.0, -100.0, -0.0037860493, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.020058166, -0.00875127] +lab[7][4] = [-100.0, -100.0, -100.0, -100.0, 0.002013328, 1.0998105E-4, -100.0, -0.01068812, 0.014536993, -100.0, -0.016048206, -100.0, -0.018137963, -100.0, -100.0, -0.01768755, -100.0, -0.06665342, -100.0, -100.0, -100.0, -0.01007092, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.012615616, -0.009968513] +lab[7][5] = [-100.0, -100.0, -100.0, -100.0, 0.0070634056, 0.0023023428, -100.0, -0.008646155, 0.0076258294, -100.0, -0.0068513555, -100.0, -0.016451048, -100.0, -100.0, -0.023988038, -100.0, -0.06636638, -100.0, -100.0, -100.0, -0.004222147, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.0097232275, -0.0076227635] +lab[7][6] = [-100.0, -100.0, -100.0, -100.0, -0.031167299, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.027433395, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0] +lab[7][7] = [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.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, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0] +lab[7][8] = [-100.0, -100.0, -100.0, -100.0, 0.0049104257, -0.14811467, -100.0, -100.0, -0.0015818988, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.018902455, -100.0, -100.0, -100.0, 0.0035807902, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.007338235, -100.0, -100.0, -100.0] +lab[7][9] = [-100.0, -100.0, -100.0, -100.0, 0.06587316, 0.14371991, -100.0, -0.049351946, -0.04048246, -100.0, 0.011947182, -100.0, -6.2810676E-4, -100.0, -100.0, -0.01602333, -100.0, -0.022502404, -100.0, -100.0, -100.0, -0.053128764, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, 0.020960134, -0.0073063895] +lab[7][10] = [-100.0, -100.0, -100.0, -100.0, 0.009259071, -0.076612204, -0.020510068, 0.044047967, 0.0503408, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.017946027, -100.0, -100.0, -100.0, -0.036746453, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0] +lab[7][11] = [-100.0, -100.0, -100.0, -100.0, 0.037588913, 0.10905088, -100.0, -0.030460993, 0.003721512, -100.0, 0.006805576, -100.0, -0.012384878, -100.0, -100.0, -0.014599603, -100.0, -0.026002733, -100.0, -100.0, -100.0, -0.07514333, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, 0.020023372, -0.005568089] +lab[7][12] = [-100.0, -100.0, -100.0, -100.0, -0.003176908, 0.1564925, -100.0, 0.08989608, -0.021242943, -100.0, 0.010067976, -100.0, -0.013922423, -100.0, -100.0, -0.02416636, -100.0, -0.024662182, -100.0, -100.0, -100.0, -0.07240346, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, 0.023381695, -0.00648179] +lab[7][13] = [-100.0, -100.0, -100.0, -100.0, 0.051657975, 0.13402489, -100.0, 0.020865025, 0.013104109, -100.0, -0.0068195877, -100.0, -0.011332986, -100.0, -100.0, -0.019492686, -100.0, -0.026033364, -100.0, -100.0, -100.0, -0.066130616, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, 0.016456924, -0.0073063895] +lab[7][14] = [-100.0, -100.0, -100.0, -100.0, 0.08149053, -3.2838946E-4, -100.0, 0.025150903, -0.01035606, -100.0, -100.0, -0.0402803, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, 0.01197523, 0.018398318, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.008141532] +lab[8][0] = [-100.0, -100.0, -100.0, -100.0, -0.010298952, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0] +lab[8][1] = [-100.0, -100.0, -100.0, -100.0, 0.07720715, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0] +lab[8][2] = [-100.0, -100.0, -100.0, -100.0, -0.009475322, -0.020047832, -100.0, -100.0, -0.029767666, -100.0, -0.023018487, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.07760017, -100.0, -100.0, -100.0, -0.0069597554, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0] +lab[8][3] = [-100.0, -100.0, -100.0, -100.0, -0.0177695, -0.01584079, -100.0, -100.0, -0.034220427, -100.0, -0.024995474, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.06809402, -100.0, -100.0, -100.0, -0.0069597554, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0] +lab[8][4] = [-100.0, -100.0, -100.0, -100.0, -0.016846146, -0.017320994, -100.0, -100.0, -0.030368356, -100.0, -0.023107952, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.07637689, -100.0, -100.0, -100.0, -0.009199989, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0] +lab[8][5] = [-100.0, -100.0, -100.0, -100.0, -0.019849148, -0.016790282, -100.0, -100.0, -0.0298011, -100.0, -0.026457291, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.06959498, -100.0, -100.0, -100.0, -0.009199989, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0] +lab[8][6] = [-100.0, -100.0, -100.0, -100.0, -0.0316555, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0] +lab[8][7] = [-100.0, -100.0, -100.0, -100.0, -0.03086719, -0.012185813, -100.0, -100.0, -0.028345747, -100.0, -0.031858526, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.080215685, -100.0, -100.0, -100.0, -0.010004969, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0] +lab[8][8] = [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.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, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0] +lab[8][9] = [-100.0, -100.0, -100.0, -100.0, 0.024622455, -0.04244198, -100.0, -100.0, -0.0021945783, -100.0, -0.0017560016, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.01365146, -100.0, -100.0, -100.0, 0.034700513, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0] +lab[8][10] = [-100.0, -100.0, -100.0, -100.0, -0.0067202644, 0.010890665, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, 0.012986096, -100.0, 0.025612151, -100.0, -100.0, -100.0, -0.009904071, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0] +lab[8][11] = [-100.0, -100.0, -100.0, -100.0, 0.0264671, -0.084497094, -100.0, -100.0, 0.011075877, -100.0, -0.008343452, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.017636344, -100.0, -100.0, -100.0, 0.00929617, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0] +lab[8][12] = [-100.0, -100.0, -100.0, -100.0, 0.028509734, -0.105624385, -100.0, -100.0, 0.0039734393, -100.0, -3.0099647E-4, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.009284925, -100.0, -100.0, -100.0, -0.025048574, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0] +lab[8][13] = [-100.0, -100.0, -100.0, -100.0, 0.022118228, -0.066294305, -100.0, -100.0, 0.011478871, -100.0, -0.024278225, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.021096548, -100.0, -100.0, -100.0, 0.037493646, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0] +lab[8][14] = [-100.0, -100.0, -100.0, -100.0, -100.0, -0.016817383, -100.0, -100.0, -100.0, -100.0, -100.0, -0.13833265, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.012782506] +lab[9][0] = [-100.0, -100.0, -100.0, -100.0, 4.385016E-4, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0] +lab[9][1] = [-100.0, -100.0, -100.0, -100.0, 0.030603452, 0.019662967, -100.0, -100.0, -0.026710683, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.020499956, -100.0, -100.0, -100.0, -0.011986047, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.019753616, -100.0, -100.0, -100.0] +lab[9][2] = [-100.0, -100.0, -100.0, -100.0, -0.060118802, -0.00852822, -100.0, -0.0085925935, 0.0017758107, -100.0, -0.0132168485, -100.0, -0.022021595, -100.0, -100.0, -0.026063943, -100.0, -0.06923627, -100.0, -100.0, -100.0, -0.0060219583, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.013042967, -0.011748734] +lab[9][3] = [-100.0, -100.0, -100.0, -100.0, -0.005694381, -0.0072280634, -100.0, -0.010656882, 9.6388E-4, -100.0, -0.010890223, -100.0, -0.020138862, -100.0, -100.0, -0.02506855, -100.0, -0.06293549, -100.0, -100.0, -100.0, -0.0031594145, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.022359546, -0.012946464] +lab[9][4] = [-100.0, -100.0, -100.0, -100.0, 0.012697235, -0.0040062284, -100.0, -0.012450568, 0.023232052, -100.0, -0.01436099, -100.0, -0.019115552, -100.0, -100.0, -0.017668435, -100.0, -0.06911761, -100.0, -100.0, -100.0, -0.011040136, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.014916998, -0.012959486] +lab[9][5] = [-100.0, -100.0, -100.0, -100.0, 0.003959284, -0.005127607, -100.0, -0.012003781, 0.02289455, -100.0, -0.0071145743, -100.0, -0.019540751, -100.0, -100.0, -0.02506855, -100.0, -0.06379605, -100.0, -100.0, -100.0, -0.00631301, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.017563405, -0.014828853] +lab[9][6] = [-100.0, -100.0, -100.0, -100.0, -0.019865207, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.020328699, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0] +lab[9][7] = [-100.0, -100.0, -100.0, -100.0, -0.033953886, -0.0018636595, -100.0, -0.007731626, -3.6249845E-4, -100.0, -0.007401729, -100.0, -0.02232414, -100.0, -100.0, -0.03200184, -100.0, -0.073828295, -100.0, -100.0, -100.0, -0.0077059413, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.012270593, -0.011864145] +lab[9][8] = [-100.0, -100.0, -100.0, -100.0, 0.03954214, -0.0033379826, -100.0, -100.0, -0.0149728265, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.022576116, -100.0, -100.0, -100.0, -0.016223626, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.013277006, -100.0, -100.0, -100.0] +lab[9][9] = [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.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, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0] +lab[9][10] = [-100.0, -100.0, -100.0, -100.0, 0.20875499, -0.06758808, -0.01329644, 0.021231992, 0.074203275, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.010264425, -100.0, -100.0, -100.0, -0.040378038, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0] +lab[9][11] = [-100.0, -100.0, -100.0, -100.0, 0.11447072, 0.016000146, -100.0, 0.12571457, 0.10625105, -100.0, 0.004082323, -100.0, -0.0062507754, -100.0, -100.0, -0.01677507, -100.0, -0.018420275, -100.0, -100.0, -100.0, -0.058186896, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, 0.0071156574, 0.002163982] +lab[9][12] = [-100.0, -100.0, -100.0, -100.0, 0.032018445, 0.024125308, -100.0, 0.2455853, 0.056142658, -100.0, -0.0011152485, -100.0, -0.002792284, -100.0, -100.0, -0.02547044, -100.0, -0.015865061, -100.0, -100.0, -100.0, -0.06419294, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, 0.010473982, -0.00648179] +lab[9][13] = [-100.0, -100.0, -100.0, -100.0, 0.11447777, 6.697993E-4, -100.0, 0.16682132, 0.09476111, -100.0, -0.02744541, -100.0, 0.0057364157, -100.0, -100.0, -0.025195219, -100.0, -0.021623705, -100.0, -100.0, -100.0, -0.056456704, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, 4.941136E-4, -0.00817554] +lab[9][14] = [-100.0, -100.0, -100.0, -100.0, 0.10525579, -0.008929347, -100.0, 0.03029225, -0.01102661, -100.0, -100.0, -0.07904691, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, 0.0047041643, 0.02301877, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.008141532] +lab[10][0] = [-100.0, -100.0, -100.0, -100.0, -9.267228E-4, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0] +lab[10][1] = [-100.0, -100.0, -100.0, -100.0, 0.086413674, 8.654366E-4, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.013165251, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.017005188, -100.0, -100.0, -100.0] +lab[10][2] = [-100.0, -100.0, -100.0, -100.0, -0.022829698, -0.0071389154, -0.029467646, -0.004115135, -0.018250464, -100.0, -0.018737962, -100.0, -0.0094045475, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.0066792443, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0] +lab[10][3] = [-100.0, -100.0, -100.0, -100.0, -0.024376234, -0.0060840566, -0.040475503, -0.0011310256, -0.012411635, -100.0, -0.021031396, -100.0, -0.009896848, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.0076555787, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0] +lab[10][4] = [-100.0, -100.0, -100.0, -100.0, -0.019265706, -0.0060840566, -0.044232056, -0.004807427, -0.018619878, -100.0, -0.013958687, -100.0, -0.010507663, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.0076555787, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0] +lab[10][5] = [-100.0, -100.0, -100.0, -100.0, -0.02919563, -0.0060840566, -0.04374403, -0.002909442, -0.012196044, -100.0, -0.01655533, -100.0, -0.011610778, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.0076555787, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0] +lab[10][6] = [-100.0, -100.0, -100.0, -100.0, -0.014946022, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.026508257, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0] +lab[10][7] = [-100.0, -100.0, -100.0, -100.0, -0.031692307, -0.007922365, -0.023501813, -0.0058935503, -0.021940108, -100.0, -0.027975522, -100.0, -0.011811018, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.008111444, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0] +lab[10][8] = [-100.0, -100.0, -100.0, -100.0, 0.08409503, 0.008447876, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.02651535, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.014948052, -100.0, -100.0, -100.0] +lab[10][9] = [-100.0, -100.0, -100.0, -100.0, -0.03174676, -0.0072506266, -0.025777975, -0.0070578745, -0.023986494, -100.0, -0.019441407, -100.0, -0.011610778, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.0076555787, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0] +lab[10][10] = [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.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, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0] +lab[10][11] = [-100.0, -100.0, -100.0, -100.0, -0.020492751, -0.011677122, -0.014922382, -0.008271219, 0.07524326, -100.0, -0.0102564655, -100.0, -0.03576118, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.05996136, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0] +lab[10][12] = [-100.0, -100.0, -100.0, -100.0, 0.011622721, 0.032384023, -0.0026711538, 0.0038835537, -4.5388937E-5, -100.0, 0.008428662, -100.0, -0.014357973, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.04065571, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0] +lab[10][13] = [-100.0, -100.0, -100.0, -100.0, 0.0073663713, 0.030481348, -0.010437234, -9.3441224E-4, 0.039967984, -100.0, 0.0064717443, -100.0, -0.024461718, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.046183094, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0] +lab[10][14] = [-100.0, -100.0, -100.0, -100.0, 0.01587913, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.06235354, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, 0.016389329, -100.0, -100.0, -100.0, -0.02086558, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0] +lab[11][0] = [-100.0, -100.0, -100.0, -100.0, 0.004183382, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0] +lab[11][1] = [-100.0, -100.0, -100.0, -100.0, -0.0076409145, 0.024953196, -100.0, -100.0, -0.028889697, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.020499956, -100.0, -100.0, -100.0, -0.011986047, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.01859772, -100.0, -100.0, -100.0] +lab[11][2] = [-100.0, -100.0, -100.0, -100.0, -0.060003787, -0.014070317, -100.0, -0.0059156157, 0.010306167, -100.0, -0.015206532, -100.0, -0.019881038, -100.0, -100.0, -0.028339827, -100.0, -0.067398205, -100.0, -100.0, -100.0, 0.008997908, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.018300084, -0.007920352] +lab[11][3] = [-100.0, -100.0, -100.0, -100.0, -0.01894506, -0.013162743, -100.0, -0.007979904, -0.0016385664, -100.0, -0.018153787, -100.0, -0.017998304, -100.0, -100.0, -0.021245552, -100.0, -0.05939291, -100.0, -100.0, -100.0, -0.004197329, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.032008335, -0.00921024] +lab[11][4] = [-100.0, -100.0, -100.0, -100.0, -0.0025721304, -0.009940909, -100.0, -0.009773591, 0.020629605, -100.0, -0.023574987, -100.0, 0.0029413053, -100.0, -100.0, -0.01590158, -100.0, -0.06557504, -100.0, -100.0, -100.0, -0.0120780505, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.02265994, -0.010470008] +lab[11][5] = [-100.0, -100.0, -100.0, -100.0, -0.004847251, -0.016105207, -100.0, -0.013647844, 0.020292103, -100.0, -0.012678393, -100.0, -0.02244311, -100.0, -100.0, -0.021245552, -100.0, -0.060949195, -100.0, -100.0, -100.0, -0.0073509244, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.027212191, -0.014650679] +lab[11][6] = [-100.0, -100.0, -100.0, -100.0, -0.033746358, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.023005461, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0] +lab[11][7] = [-100.0, -100.0, -100.0, -100.0, -0.05617983, -0.011991441, -100.0, -0.009326804, 0.011956559, -100.0, -0.018397594, -100.0, -0.01995382, -100.0, -100.0, -0.030099161, -100.0, -0.07172404, -100.0, -100.0, -100.0, -0.0029683935, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.020174116, -0.015947435] +lab[11][8] = [-100.0, -100.0, -100.0, -100.0, 0.005519841, 9.0104673E-4, -100.0, -100.0, -0.019728117, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.020637562, -100.0, -100.0, -100.0, -0.016223626, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.013563827, -100.0, -100.0, -100.0] +lab[11][9] = [-100.0, -100.0, -100.0, -100.0, 0.015746564, -0.0070220693, -100.0, -0.007731626, 0.022043357, -100.0, -0.016831335, -100.0, -0.014862879, -100.0, -100.0, -0.026977727, -100.0, -0.064945415, -100.0, -100.0, -100.0, -0.00923226, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.014802031, -0.008515398] +lab[11][10] = [-100.0, -100.0, -100.0, -100.0, 0.17183895, -0.019662648, -0.02055108, -0.022982247, -0.05656849, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.029510943, -100.0, -100.0, -100.0, -0.01362725, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0] +lab[11][11] = [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.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, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0] +lab[11][12] = [-100.0, -100.0, -100.0, -100.0, 0.004987302, 0.11272088, -100.0, 0.13417284, 0.046005733, -100.0, -0.011221319, -100.0, -0.009711958, -100.0, -100.0, -0.029535037, -100.0, -0.010512706, -100.0, -100.0, -100.0, -0.047170322, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, 0.013259491, -0.0056126397] +lab[11][13] = [-100.0, -100.0, -100.0, -100.0, 0.120297045, 0.09330137, -100.0, 0.070799686, 0.040355153, -100.0, -0.039030172, -100.0, -7.0239895E-4, -100.0, -100.0, -0.032085977, -100.0, -0.011256315, -100.0, -100.0, -100.0, -0.027810505, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, 0.00633472, -0.008622873] +lab[11][14] = [-100.0, -100.0, -100.0, -100.0, 0.11600753, -0.005624147, -100.0, 0.03412821, -0.012586624, -100.0, -100.0, -0.075249486, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, 0.019362854, 0.013571097, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.008141532] +lab[12][0] = [-100.0, -100.0, -100.0, -100.0, 0.0020547423, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0] +lab[12][1] = [-100.0, -100.0, -100.0, -100.0, 0.0396342, -0.015539667, -100.0, -100.0, -0.025371484, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.024309423, -100.0, -100.0, -100.0, -0.011986047, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.027883962, -100.0, -100.0, -100.0] +lab[12][2] = [-100.0, -100.0, -100.0, -100.0, -0.05916558, -0.016076984, -100.0, -0.005667337, 0.0051087197, -100.0, -0.016055794, -100.0, -0.027272215, -100.0, -100.0, -0.026044102, -100.0, -0.07120015, -100.0, -100.0, -100.0, -0.0015342243, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.021045266, -0.008740985] +lab[12][3] = [-100.0, -100.0, -100.0, -100.0, 0.0031062858, -0.013976154, -100.0, -0.009553928, -0.005194581, -100.0, -0.013632725, -100.0, -0.026658138, -100.0, -100.0, -0.0232241, -100.0, -0.060299862, -100.0, -100.0, -100.0, -0.0088612195, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.029549452, -0.011608116] +lab[12][4] = [-100.0, -100.0, -100.0, -100.0, 0.00867251, -0.011926816, -100.0, -0.010248993, 0.01097198, -100.0, -0.018405842, -100.0, -0.026264463, -100.0, -100.0, -0.014724364, -100.0, -0.07129672, -100.0, -100.0, -100.0, -0.010854144, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.023430107, -0.01412765] +lab[12][5] = [-100.0, -100.0, -100.0, -100.0, 0.0054890797, -0.012925926, -100.0, -0.010225224, 0.0135046225, -100.0, -0.013068038, -100.0, -0.02711486, -100.0, -100.0, -0.0232241, -100.0, -0.06496835, -100.0, -100.0, -100.0, -0.0061270185, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.02475331, -0.020265082] +lab[12][6] = [-100.0, -100.0, -100.0, -100.0, -0.02469039, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.018911082, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0] +lab[12][7] = [-100.0, -100.0, -100.0, -100.0, -0.034386136, -0.01227389, -100.0, -0.004852564, 0.005298138, -100.0, -0.015678015, -100.0, -0.02966849, -100.0, -100.0, -0.03331035, -100.0, -0.076273516, -100.0, -100.0, -100.0, -3.9869107E-4, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.020319534, -0.0150832] +lab[12][8] = [-100.0, -100.0, -100.0, -100.0, 0.042473763, -0.026352536, -100.0, -100.0, -0.017569697, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.020599995, -100.0, -100.0, -100.0, -0.016223626, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.017437482, -100.0, -100.0, -100.0] +lab[12][9] = [-100.0, -100.0, -100.0, -100.0, 0.02230397, -0.010012049, -100.0, -0.009553928, 0.017520748, -100.0, -0.014661487, -100.0, -0.024577547, -100.0, -100.0, -0.03023924, -100.0, -0.073132485, -100.0, -100.0, -100.0, -0.007911795, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.021642737, -0.017785992] +lab[12][10] = [-100.0, -100.0, -100.0, -100.0, 0.2285694, -0.026922856, -0.020569138, -0.02599477, -0.012410844, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.038398586, -100.0, -100.0, -100.0, -0.012401053, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0] +lab[12][11] = [-100.0, -100.0, -100.0, -100.0, -0.04830719, -0.014254008, -100.0, -0.0038235525, 0.016373483, -100.0, -0.0115593225, -100.0, -0.024683233, -100.0, -100.0, -0.033282496, -100.0, -0.06943184, -100.0, -100.0, -100.0, -0.0022925064, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.0191256, -0.019381609] +lab[12][12] = [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.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, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0] +lab[12][13] = [-100.0, -100.0, -100.0, -100.0, 0.068326406, 0.13544416, -100.0, 0.0998629, 0.097386986, -100.0, -0.034251586, -100.0, -0.0054424014, -100.0, -100.0, -0.019764677, -100.0, -0.03183618, -100.0, -100.0, -100.0, -0.04539673, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, 0.009344805, -0.0098096] +lab[12][14] = [-100.0, -100.0, -100.0, -100.0, 0.08549086, -0.004960265, -100.0, 0.010753985, -0.007879022, -100.0, -100.0, -0.12814987, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, 0.007242377, 0.008014331, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.008141532] +lab[13][0] = [-100.0, -100.0, -100.0, -100.0, 0.0020547423, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0] +lab[13][1] = [-100.0, -100.0, -100.0, -100.0, 0.05739301, 0.020208525, -100.0, -100.0, -0.02736584, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.020499956, -100.0, -100.0, -100.0, -0.011986047, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.021537926, -100.0, -100.0, -100.0] +lab[13][2] = [-100.0, -100.0, -100.0, -100.0, -0.019036207, -0.01617592, -100.0, -0.0059156157, 0.0020330462, -100.0, -0.014504712, -100.0, -0.021567954, -100.0, -100.0, -0.023315748, -100.0, -0.0683606, -100.0, -100.0, -100.0, 3.295847E-4, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.015582237, -0.016198281] +lab[13][3] = [-100.0, -100.0, -100.0, -100.0, 0.03114741, -0.01407509, -100.0, -0.009802206, -0.005134943, -100.0, -0.010012224, -100.0, -0.020953877, -100.0, -100.0, -0.023286957, -100.0, -0.062059816, -100.0, -100.0, -100.0, -0.0021215002, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.022727123, -0.0130320545] +lab[13][4] = [-100.0, -100.0, -100.0, -100.0, 0.03841355, -0.011122017, -100.0, -0.011595893, 0.02051436, -100.0, -0.015433424, -100.0, -0.019930566, -100.0, -100.0, -0.015886845, -100.0, -0.06907656, -100.0, -100.0, -100.0, -0.009811342, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.015284575, -0.014291821] +lab[13][5] = [-100.0, -100.0, -100.0, -100.0, 0.037527163, -0.011974635, -100.0, -0.011149107, 0.019251764, -100.0, -0.007873704, -100.0, -0.019512307, -100.0, -100.0, -0.023286957, -100.0, -0.06205247, -100.0, -100.0, -100.0, -0.005275096, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.01793098, -0.01646095] +lab[13][6] = [-100.0, -100.0, -100.0, -100.0, -0.02906044, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.021853115, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0] +lab[13][7] = [-100.0, -100.0, -100.0, -100.0, 0.0051080245, -0.012372827, -100.0, -0.009326804, 0.0060452437, -100.0, -0.013101375, -100.0, -0.022065936, -100.0, -100.0, -0.02896975, -100.0, -0.073357634, -100.0, -100.0, -100.0, -5.846833E-4, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.015330794, -0.015957894] +lab[13][8] = [-100.0, -100.0, -100.0, -100.0, 0.08354042, 0.003999633, -100.0, -100.0, -0.0148448525, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.020637562, -100.0, -100.0, -100.0, -0.016223626, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.009822253, -100.0, -100.0, -100.0] +lab[13][9] = [-100.0, -100.0, -100.0, -100.0, 0.06996338, -0.010110986, -100.0, -0.011149107, 0.018004304, -100.0, -0.01152831, -100.0, -0.016974993, -100.0, -100.0, -0.032456063, -100.0, -0.06277614, -100.0, -100.0, -100.0, -0.008038912, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.019617168, -0.018978095] +lab[13][10] = [-100.0, -100.0, -100.0, -100.0, 0.1966709, -0.037076153, -0.022834187, -0.030513555, 0.010913024, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.029907519, -100.0, -100.0, -100.0, -0.012401054, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0] +lab[13][11] = [-100.0, -100.0, -100.0, -100.0, -0.022209378, -0.013499531, -100.0, -0.0038235525, 0.013696095, -100.0, -0.009977228, -100.0, -0.018342398, -100.0, -100.0, -0.029386675, -100.0, -0.07173414, -100.0, -100.0, -100.0, -0.00394613, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.014987734, -0.017867286] +lab[13][12] = [-100.0, -100.0, -100.0, -100.0, 0.09764857, -0.020975709, -100.0, -0.013096463, 0.01657707, -100.0, -0.010012224, -100.0, -0.018349338, -100.0, -100.0, -0.030115183, -100.0, -0.071751185, -100.0, -100.0, -100.0, -0.0040298626, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.018266436, -0.013942889] +lab[13][13] = [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.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, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0] +lab[13][14] = [-100.0, -100.0, -100.0, -100.0, 0.056084678, -0.012318356, -100.0, 0.014322455, -0.014129913, -100.0, -100.0, -0.14917272, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, 0.0063895416, 0.028424421, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.009038948] +lab[14][0] = [-100.0, -100.0, -100.0, -100.0, -0.008927362, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0] +lab[14][1] = [-100.0, -100.0, -100.0, -100.0, 0.028905792, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.08073401, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0] +lab[14][2] = [-100.0, -100.0, -100.0, -100.0, -0.016127275, -0.011781214, -0.029326014, -100.0, -0.0073180962, -100.0, -0.036407348, -100.0, -0.02709568, -100.0, -100.0, -100.0, -100.0, 0.010117588, -100.0, -100.0, -100.0, -0.027180063, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0] +lab[14][3] = [-100.0, -100.0, -100.0, -100.0, -0.014929585, -0.01646292, 0.010563016, -100.0, -0.003801383, -100.0, -0.021647654, -100.0, -0.04209665, -100.0, -100.0, -100.0, -100.0, 0.02020907, -100.0, -100.0, -100.0, -0.023904413, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0] +lab[14][4] = [-100.0, -100.0, -100.0, -100.0, -0.021154426, -0.016442642, 0.0037343476, -100.0, -0.0045591975, -100.0, -0.034271818, -100.0, -0.041392848, -100.0, -100.0, -100.0, -100.0, -0.042646084, -100.0, -100.0, -100.0, -0.021064406, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0] +lab[14][5] = [-100.0, -100.0, -100.0, -100.0, -0.011393564, -0.03390301, 0.009589337, -100.0, -0.01744324, -100.0, -0.007175665, -100.0, -0.043987717, -100.0, -100.0, -100.0, -100.0, 0.035264224, -100.0, -100.0, -100.0, -0.02660139, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0] +lab[14][6] = [-100.0, -100.0, -100.0, -100.0, -0.0271488, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.03853228, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0] +lab[14][7] = [-100.0, -100.0, -100.0, -100.0, -0.019168273, -0.011024953, -0.03493552, -100.0, -0.003224189, -100.0, -0.025564909, -100.0, -0.028018715, -100.0, -100.0, -100.0, -100.0, 0.015027219, -100.0, -100.0, -100.0, -0.02618499, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0] +lab[14][8] = [-100.0, -100.0, -100.0, -100.0, -0.015771415, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.074303724, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0] +lab[14][9] = [-100.0, -100.0, -100.0, -100.0, -0.014042193, -0.020506615, -0.037382524, -100.0, -0.011863008, -100.0, -0.026074145, -100.0, -0.038123965, -100.0, -100.0, -100.0, -100.0, 0.018390698, -100.0, -100.0, -100.0, -0.025254652, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0] +lab[14][10] = [-100.0, -100.0, -100.0, -100.0, 0.04561069, -100.0, -0.019445466, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -0.10429093, -100.0, -100.0, -100.0, 0.0013721561, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0] +lab[14][11] = [-100.0, -100.0, -100.0, -100.0, -0.0128257405, -0.011499481, -0.01790243, -100.0, -0.0073180962, -100.0, -0.03406727, -100.0, -0.032254595, -100.0, -100.0, -100.0, -100.0, 0.03551333, -100.0, -100.0, -100.0, -0.02621014, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0] +lab[14][12] = [-100.0, -100.0, -100.0, -100.0, -0.005733858, -0.014030532, -0.007075153, -100.0, -0.003224189, -100.0, -0.034181435, -100.0, -0.038144123, -100.0, -100.0, -100.0, -100.0, -0.08827253, -100.0, -100.0, -100.0, -0.026157081, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0] +lab[14][13] = [-100.0, -100.0, -100.0, -100.0, -0.0042990698, -0.015845833, -0.013813869, -100.0, 0.0018438096, -100.0, -0.028911412, -100.0, -0.035165127, -100.0, -100.0, -100.0, -100.0, -0.041419115, -100.0, -100.0, -100.0, -0.027013248, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0] +lab[14][14] = [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.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, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0] +fv = a feature vector +sib[0][1][0] = [0.1009304] +sib[0][1][1] = [0.1009304] +sib[0][2][0] = [0.077498816, -0.18321107] +sib[0][2][1] = [0.0, 3.6234892E-4] +sib[0][2][2] = [0.077498816, -0.18321107] +sib[0][3][0] = [0.09607812, -0.16572231] +sib[0][3][1] = [9.148505E-12, 3.6234892E-4] +sib[0][3][2] = [0.002879443, -0.002180265] +sib[0][3][3] = [0.09607812, -0.16572231] +sib[0][4][0] = [0.09607812, -0.16775823] +sib[0][4][1] = [9.148505E-12, 3.6234892E-4] +sib[0][4][2] = [0.002879443, 0.013257431] +sib[0][4][3] = [0.0036714405, -0.012758426] +sib[0][4][4] = [0.09607812, -0.16775823] +sib[0][5][0] = [0.07752588, -0.19025701] +sib[0][5][1] = [0.0, 3.6234892E-4] +sib[0][5][2] = [0.002879443, -0.0053304173] +sib[0][5][3] = [0.0036714405, -0.019903192] +sib[0][5][4] = [0.0, -0.017437585] +sib[0][5][5] = [0.07752588, -0.19025701] +sib[0][6][0] = [0.37733674, 0.0030680192, 0.060625646] +sib[0][6][1] = [0.0, 4.400658E-11, -0.0086955335] +sib[0][6][2] = [0.0026465259, 8.476209E-4, 0.0] +sib[0][6][3] = [0.0020373724, -0.0043442375, 0.0050378544] +sib[0][6][4] = [0.004083242, -0.008529572, 0.0050378544] +sib[0][6][5] = [-0.00261556, -0.0063765747, -0.0016225355] +sib[0][6][6] = [0.37733674, 0.0030680192, 0.060625646] +sib[0][7][0] = [0.05387699, -0.17501158] +sib[0][7][1] = [0.0, 3.6234892E-4] +sib[0][7][2] = [0.002879443, 0.0081029795] +sib[0][7][3] = [0.0138752125, -0.012863668] +sib[0][7][4] = [0.0023320774, -0.008248902] +sib[0][7][5] = [-2.8348272E-4, -0.01896391] +sib[0][7][6] = [-0.08313296, -0.008190515] +sib[0][7][7] = [0.05387699, -0.17501158] +sib[0][8][0] = [0.11001998] +sib[0][8][1] = [1.4472277E-11] +sib[0][8][2] = [0.0032793367] +sib[0][8][3] = [0.0036714405] +sib[0][8][4] = [0.0] +sib[0][8][5] = [-0.00261556] +sib[0][8][6] = [-0.08946653] +sib[0][8][7] = [0.0] +sib[0][8][8] = [0.11001998] +sib[0][9][0] = [0.012241538, -0.18679896] +sib[0][9][1] = [0.0, 3.6234892E-4] +sib[0][9][2] = [0.002879443, -0.00530215] +sib[0][9][3] = [0.0036714405, -0.01240495] +sib[0][9][4] = [0.0, -0.0077901836] +sib[0][9][5] = [-0.00261556, -0.018505193] +sib[0][9][6] = [-0.08946653, -0.014085354] +sib[0][9][7] = [-0.0014011511, -0.027908202] +sib[0][9][8] = [0.0, 9.841713E-4] +sib[0][9][9] = [0.012241538, -0.18679896] +sib[0][10][0] = [0.07278153] +sib[0][10][1] = [4.5836373E-11] +sib[0][10][2] = [0.004280594] +sib[0][10][3] = [0.0036714405] +sib[0][10][4] = [0.0] +sib[0][10][5] = [-0.00261556] +sib[0][10][6] = [-0.08946653] +sib[0][10][7] = [0.0020818603] +sib[0][10][8] = [7.797135E-11] +sib[0][10][9] = [-0.0012656527] +sib[0][10][10] = [0.07278153] +sib[0][11][0] = [0.09697626, -0.17547522] +sib[0][11][1] = [-2.0503228E-10, 3.6234892E-4] +sib[0][11][2] = [0.002879443, 0.03612773] +sib[0][11][3] = [0.0036714405, 0.013015134] +sib[0][11][4] = [0.0, 0.017629903] +sib[0][11][5] = [-0.00261556, -0.00237903] +sib[0][11][6] = [-0.08946653, -0.019980194] +sib[0][11][7] = [-0.0014011511, 5.599223E-4] +sib[0][11][8] = [-0.0028200145, 0.008869357] +sib[0][11][9] = [0.0, -0.002049474] +sib[0][11][10] = [-0.0022987006, -0.03887186] +sib[0][11][11] = [0.09697626, -0.17547522] +sib[0][12][0] = [0.07289503, -0.15863656] +sib[0][12][1] = [9.148505E-12, -0.015169687] +sib[0][12][2] = [0.002879443, -0.0036189742] +sib[0][12][3] = [0.0036714405, -0.0075441077] +sib[0][12][4] = [0.0, -0.002929342] +sib[0][12][5] = [-0.00261556, -0.022938276] +sib[0][12][6] = [-0.08667535, -0.014085353] +sib[0][12][7] = [-0.0014011511, -0.029324945] +sib[0][12][8] = [9.148505E-12, 9.841713E-4] +sib[0][12][9] = [0.0, -0.027787007] +sib[0][12][10] = [0.0021417032, -0.03531133] +sib[0][12][11] = [0.002296214, -0.026198987] +sib[0][12][12] = [0.07289503, -0.15863656] +sib[0][13][0] = [0.022648372, -0.15350725] +sib[0][13][1] = [0.0, 3.6234892E-4] +sib[0][13][2] = [0.002879443, -0.026968949] +sib[0][13][3] = [-0.0014464923, -0.034926094] +sib[0][13][4] = [0.0, -0.03031133] +sib[0][13][5] = [-0.00261556, -0.04102634] +sib[0][13][6] = [-0.08667535, -0.016529191] +sib[0][13][7] = [-0.0014011511, -0.043380998] +sib[0][13][8] = [0.0, 9.841713E-4] +sib[0][13][9] = [0.0, -0.043879043] +sib[0][13][10] = [0.0021417032, -0.0357359] +sib[0][13][11] = [0.002296214, -0.035447378] +sib[0][13][12] = [0.0015939093, -0.057777908] +sib[0][13][13] = [0.022648372, -0.15350725] +sib[0][14][0] = [0.31167406, 0.15251747, 0.018790457, 0.012185015] +sib[0][14][1] = [-0.0030729363, -1.1884883E-10, 9.4561983E-4, 0.0039847502] +sib[0][14][2] = [0.005333848, -0.004690854, -0.0023448789, -0.013482017] +sib[0][14][3] = [0.004724694, -0.0049285507, 0.0, -7.5240387E-4] +sib[0][14][4] = [0.0010532537, -0.0049285507, 8.7857735E-4, 0.013280388] +sib[0][14][5] = [-0.0015623064, -0.0049285507, 6.6842075E-4, 0.011406964] +sib[0][14][6] = [-0.08946653, -0.02312115, 7.354752E-12, -2.2225347E-12] +sib[0][14][7] = [-2.5238388E-4, -0.005386516, 0.0039864522, 0.002022608] +sib[0][14][8] = [-0.0030729363, -0.0064442162, -0.0020600068, 0.003577187] +sib[0][14][9] = [-7.0605893E-6, -0.0063338643, -0.0023448789, -0.012578556] +sib[0][14][10] = [1.4686887E-11, 0.0043251663, 3.665739E-4, 0.0026315032] +sib[0][14][11] = [0.013265651, -0.0038110844, 0.0, -0.009902528] +sib[0][14][12] = [0.0015868493, -0.006571561, 0.0, -0.008799822] +sib[0][14][13] = [-7.0605893E-6, -0.0060651805, 0.0, 0.0010815861] +sib[0][14][14] = [0.31167406, 0.15251747, 0.018790457, 0.012185015] +sib[1][0][0] = [-0.14506936] +sib[1][0][1] = [-0.14506936] +sib[1][2][1] = [0.8223301, 0.15931079, 0.35679403, 0.096370235, 0.16478507, 0.05396487] +sib[1][2][2] = [0.8223301, 0.15931079, 0.35679403, 0.096370235, 0.16478507, 0.05396487] +sib[1][3][1] = [0.7328315, 0.071922556, 0.3353346, -0.084273316, 0.18448874, 0.063882634] +sib[1][3][2] = [-0.17718247, -0.048298623, -0.08761847, -0.08399954, -0.028174773, -0.016735515] +sib[1][3][3] = [0.7328315, 0.071922556, 0.3353346, -0.084273316, 0.18448874, 0.063882634] +sib[1][4][1] = [0.74362266, 0.074151605, 0.33832115, -0.08473284, 0.18674353, 0.061846726] +sib[1][4][2] = [-0.18171725, -0.042668555, -0.090021595, -0.11272397, -0.03076177, -0.0012978215] +sib[1][4][3] = [-0.1923438, -0.04521106, -0.065176874, -0.017205017, -0.07633624, -0.009437358] +sib[1][4][4] = [0.74362266, 0.074151605, 0.33832115, -0.08473284, 0.18674353, 0.061846726] +sib[1][5][1] = [0.7273429, 0.06951806, 0.37647092, -0.11422935, 0.11937228, 0.02388254] +sib[1][5][2] = [-0.17346698, -0.03045045, -0.09098843, -0.0948249, -0.015072234, -0.019885667] +sib[1][5][3] = [-0.1865165, -0.025386048, -0.06763257, -0.027074134, -0.06819977, -0.016582124] +sib[1][5][4] = [-0.18198171, -0.036187537, -0.056837518, 0.0044096145, -0.06264385, -0.027142761] +sib[1][5][5] = [0.7273429, 0.06951806, 0.37647092, -0.11422935, 0.11937228, 0.02388254] +sib[1][6][1] = [0.13799278] +sib[1][6][2] = [0.026691256] +sib[1][6][3] = [0.007929184] +sib[1][6][4] = [0.01669214] +sib[1][6][5] = [0.012944166] +sib[1][6][6] = [0.13799278] +sib[1][7][1] = [0.70997274, 0.09760554, 0.48473144, 0.03187166, 0.1530679, 0.03221134] +sib[1][7][2] = [-0.18709238, -0.048056874, -0.09347163, -0.062301688, -0.031794682, -0.0064522717] +sib[1][7][3] = [-0.17118181, -0.054923926, -0.06860041, 0.059358608, -0.015151251, -0.009542598] +sib[1][7][4] = [-0.17118181, -0.054923926, -0.059294213, 0.06307418, -0.010485761, -0.017954078] +sib[1][7][5] = [-0.1714512, -0.05614167, -0.066502064, 0.07803505, -0.031801704, -0.028669087] +sib[1][7][6] = [-0.0066187354, 0.0, 0.0, 0.04309825, -0.009898367, -0.009960687] +sib[1][7][7] = [0.70997274, 0.09760554, 0.48473144, 0.03187166, 0.1530679, 0.03221134] +sib[1][8][1] = [0.14466164] +sib[1][8][2] = [-0.0014932856] +sib[1][8][3] = [-0.0049484395] +sib[1][8][4] = [-0.010908695] +sib[1][8][5] = [-0.047897436] +sib[1][8][6] = [-0.07205967] +sib[1][8][7] = [-0.03267007] +sib[1][8][8] = [0.14466164] +sib[1][9][1] = [0.7941633, 0.14351022, 0.40630633, 0.101728044, 0.22039162, 0.025832525] +sib[1][9][2] = [-0.1469763, -0.06074291, -0.09695857, -0.12046871, 0.024239575, -0.019857401] +sib[1][9][3] = [-0.16942596, -0.052692678, -0.068992, -0.003081635, 0.002428099, -0.00908388] +sib[1][9][4] = [-0.16942596, -0.052692678, -0.0596858, 6.339379E-4, 0.007093591, -0.01749536] +sib[1][9][5] = [-0.16969535, -0.05391042, -0.06808764, 0.012101205, -4.7506066E-4, -0.02821037] +sib[1][9][6] = [-0.00875906, 0.0, -9.955837E-4, 0.028349187, 0.0074102087, -0.015855527] +sib[1][9][7] = [-0.15999229, -0.05038492, -0.079725966, -0.124766536, -0.031653732, -0.040038418] +sib[1][9][8] = [-0.021489913, -0.0033509294, 0.0, 0.0039077005, -7.73577E-4, 9.841713E-4] +sib[1][9][9] = [0.7941633, 0.14351022, 0.40630633, 0.101728044, 0.22039162, 0.025832525] +sib[1][10][1] = [0.40872738, 0.73735535, 0.11837222, 0.14335588, 0.06470696] +sib[1][10][2] = [-0.059155826, -0.08133857, -5.3938874E-4, 0.021138674, -0.051489163] +sib[1][10][3] = [-0.0576928, -0.08749205, 0.04564517, -0.06835486, -0.02692426] +sib[1][10][4] = [-0.0483866, -0.08749205, 0.04419522, -0.055656735, -0.03858459] +sib[1][10][5] = [-0.052616727, -0.08993608, 0.04401492, -0.052504648, -0.03858459] +sib[1][10][6] = [-0.0025701378, 0.0070631346, 0.013442162, -0.01039378, -0.0028068458] +sib[1][10][7] = [-0.057052415, -0.07474424, -5.647867E-4, -0.058527604, -0.05342383] +sib[1][10][8] = [-0.021949403, -0.020818597, 0.015592818, -0.0013685953, -0.005767775] +sib[1][10][9] = [-0.047719967, -0.0930448, 0.040142223, -0.019073889, -0.030611292] +sib[1][10][10] = [0.40872738, 0.73735535, 0.11837222, 0.14335588, 0.06470696] +sib[1][11][1] = [0.79462796, 0.12613454, 0.3748815, 0.09253451, 0.22781485, 0.065622464] +sib[1][11][2] = [-0.21084513, -0.06989765, -0.09474037, -0.126323, -0.02342927, 0.02157248] +sib[1][11][3] = [-0.20293489, -0.06394496, -0.06758666, -0.01732459, -0.0059071695, 0.016336206] +sib[1][11][4] = [-0.20293489, -0.06394496, -0.058280464, -0.013609019, -0.0035066297, 0.007924724] +sib[1][11][5] = [-0.20130599, -0.0651627, -0.06548831, 0.0054604346, -0.005950439, -0.012084208] +sib[1][11][6] = [-0.00875906, 0.0, 0.0, 0.03143002, -0.017132381, -0.021750366] +sib[1][11][7] = [-0.18423724, -0.05743317, -0.07596734, -0.11873575, -0.01840756, -0.01157029] +sib[1][11][8] = [-0.029544512, -0.00955603, 0.0, 0.06702636, 0.033138227, 0.0050735637] +sib[1][11][9] = [-0.19347359, -0.05170956, -0.075242564, -0.056771394, -0.027734496, -0.008300344] +sib[1][11][10] = [-0.09004499, 0.052916653, -0.013810598, -0.021381833, 0.014406228, -0.03887186] +sib[1][11][11] = [0.79462796, 0.12613454, 0.3748815, 0.09253451, 0.22781485, 0.065622464] +sib[1][12][1] = [0.784679, 0.11406528, 0.4023752, 0.077483386, 0.25407618, 0.070968404] +sib[1][12][2] = [-0.16144344, -0.058469675, -0.09971817, -0.13266534, -0.012766752, -0.018174225] +sib[1][12][3] = [-0.19172621, -0.05747579, -0.07180204, -0.005855644, -0.0067007844, -0.0042230384] +sib[1][12][4] = [-0.19584893, -0.05747579, -0.062495854, -0.002140074, -0.0020352905, -0.012634519] +sib[1][12][5] = [-0.19611831, -0.061888117, -0.0697037, 0.011901378, -0.001139537, -0.03264345] +sib[1][12][6] = [-0.01732036, 0.0, 0.0, 0.024115551, -0.023440033, -0.015855527] +sib[1][12][7] = [-0.17722084, -0.050481066, -0.08330333, -0.124951646, -0.051222946, -0.041455157] +sib[1][12][8] = [-0.060714513, -0.00955603, -0.005931367, 0.09389506, 0.004548329, -0.0028116223] +sib[1][12][9] = [-0.1857457, -0.03476999, -0.08091978, -0.06731631, -0.048553277, -0.03403788] +sib[1][12][10] = [-0.08174297, 0.03556207, -0.010301546, -0.011050482, -0.06616042, -0.03531133] +sib[1][12][11] = [-0.16741519, -0.041634258, -0.09653928, -0.11845435, -0.07660295, -0.04021944] +sib[1][12][12] = [0.784679, 0.11406528, 0.4023752, 0.077483386, 0.25407618, 0.070968404] +sib[1][13][1] = [0.8033916, 0.14681372, 0.4034932, 0.04889268, 0.23028061, 0.072416954] +sib[1][13][2] = [-0.15708967, -0.05103388, -0.09755864, -0.11520136, 0.010333281, -0.041524198] +sib[1][13][3] = [-0.17943211, -0.04492206, -0.069642514, 0.0077984845, 0.019408828, -0.031605024] +sib[1][13][4] = [-0.17943211, -0.050039995, -0.06250434, 0.011514056, 0.024074322, -0.040016502] +sib[1][13][5] = [-0.17942515, -0.0556522, -0.06754417, 0.024334319, 0.0020352225, -0.050731517] +sib[1][13][6] = [-0.023741333, 0.0, 0.0, 0.02395995, -0.021758288, -0.018299362] +sib[1][13][7] = [-0.17054209, -0.04390209, -0.081143804, -0.108708866, -0.043814924, -0.055511214] +sib[1][13][8] = [-0.06968277, -0.007558679, -0.005931367, 0.08285634, -0.020528413, -0.0028116223] +sib[1][13][9] = [-0.16852425, -0.027382981, -0.07876025, -0.052584186, -0.08898652, -0.050129913] +sib[1][13][10] = [-0.07044368, 0.04071981, -0.008472457, -0.009528046, -0.06525004, -0.0357359] +sib[1][13][11] = [-0.16452362, -0.02551473, -0.09586862, -0.1323378, -0.07599212, -0.049467836] +sib[1][13][12] = [-0.122956105, -0.022348002, -0.073540114, -0.08561526, -0.10653714, -0.069373325] +sib[1][13][13] = [0.8033916, 0.14681372, 0.4034932, 0.04889268, 0.23028061, 0.072416954] +sib[1][14][1] = [-0.1488827, 0.73145366, -0.038691726] +sib[1][14][2] = [-0.057306655, -0.06834161, -0.013022164] +sib[1][14][3] = [0.07321883, -0.06438151, -0.010292105] +sib[1][14][4] = [0.057945795, -0.06438151, -0.0088003315] +sib[1][14][5] = [0.027987286, -0.07644719, -0.008058093] +sib[1][14][6] = [0.26787516, 0.009855585, -8.11261E-4] +sib[1][14][7] = [-0.05378393, -0.10175465, -0.008854454] +sib[1][14][8] = [-0.010961269, 0.0331846, -0.0051823417] +sib[1][14][9] = [-0.08712432, -0.08935531, -0.014929943] +sib[1][14][10] = [-0.07270897, -0.04884997, -0.0023863493] +sib[1][14][11] = [-0.045111306, -0.0765708, -0.01041195] +sib[1][14][12] = [-0.03154144, -0.070103265, -0.0088003315] +sib[1][14][13] = [-0.058957256, -0.07688024, -0.0064464738] +sib[1][14][14] = [-0.1488827, 0.73145366, -0.038691726] +sib[2][0][0] = [-0.07002016] +sib[2][0][1] = [-0.004894569] +sib[2][0][2] = [-0.07002016] +sib[2][1][1] = [-0.023300149, -0.07763119, -0.06833927, -0.15426117, -0.08973858, -0.2105893] +sib[2][1][2] = [-0.023300149, -0.07763119, -0.06833927, -0.15426117, -0.08973858, -0.2105893] +sib[2][3][2] = [0.0030667265, 0.055973124, 0.16185215, 0.102194816, -0.15181133, -0.069784425, -0.09858685, -0.18661639, -0.033880048, -0.050956592, -0.11497596] +sib[2][3][3] = [0.0030667265, 0.055973124, 0.16185215, 0.102194816, -0.15181133, -0.069784425, -0.09858685, -0.18661639, -0.033880048, -0.050956592, -0.11497596] +sib[2][4][2] = [0.017022148, 0.006996327, 0.16085127, 0.10461412, -0.19781941, -0.099051535, -0.1054311, -0.22328228, -0.033880048, -0.058684338, -0.12042834] +sib[2][4][3] = [-0.045596465, -0.056390677, -0.050062075, -0.097261526, -0.0134103205, -0.02489933, -0.017836481, 0.012028221, -0.0024191486, -0.010112673, -0.006688064] +sib[2][4][4] = [0.017022148, 0.006996327, 0.16085127, 0.10461412, -0.19781941, -0.099051535, -0.1054311, -0.22328228, -0.033880048, -0.058684338, -0.12042834] +sib[2][5][2] = [-0.0038128698, 0.0023627656, 0.09348002, 0.088334285, -0.22731593, -0.060901817, -0.09670297, -0.22777005, -0.033880048, -0.058684338, -0.15839253] +sib[2][5][3] = [-0.00989531, -0.025851687, 0.007153724, -0.10584166, -0.027832221, -0.025866164, -0.011156052, 0.00627356, -0.0024191486, -0.014139971, -0.011174329] +sib[2][5][4] = [-0.06930705, -0.057231218, -0.09708246, -0.0747798, 0.005082002, -0.024477692, -0.006208457, -0.007032466, -0.0015446771, -0.010112673, -0.019423649] +sib[2][5][5] = [-0.0038128698, 0.0023627656, 0.09348002, 0.088334285, -0.22731593, -0.060901817, -0.09670297, -0.22777005, -0.033880048, -0.058684338, -0.15839253] +sib[2][6][2] = [0.0856092, 0.023162715] +sib[2][6][3] = [0.074589275, -0.012859605] +sib[2][6][4] = [0.023362318, -0.012741394] +sib[2][6][5] = [-0.003970602, -0.020858906] +sib[2][6][6] = [0.0856092, 0.023162715] +sib[2][7][2] = [-0.02798745, 0.030450236, 0.12717563, 0.07096413, -0.08121491, 0.047358803, -0.04972786, -0.12838377, -0.030403443, -0.04421254, -0.15006372] +sib[2][7][3] = [-0.025541667, -0.05538957, 0.0556802, -0.08896982, 0.052671146, -0.026833996, -0.0056346385, 0.054540448, -0.005096597, -0.008215474, -0.0067933043] +sib[2][7][4] = [-0.05304926, -0.070425056, -0.020544259, -0.07220218, 0.061470177, -0.025445525, -0.0056346385, 0.03468742, -0.0042221253, -0.009944886, -0.010234964] +sib[2][7][5] = [-0.06928063, -0.07644652, -0.069272436, -0.0689533, 0.077528775, -0.025445525, -0.008135341, 0.030741397, -0.0042221253, -0.01183651, -0.020949975] +sib[2][7][6] = [-0.0025985183, 0.001627638, -0.052818563, -0.008561299, 0.04309825, -0.004009964, 0.0026703556, -0.02746283, -1.643592E-11, -9.703423E-4, -0.008190515] +sib[2][7][7] = [-0.02798745, 0.030450236, 0.12717563, 0.07096413, -0.08121491, 0.047358803, -0.04972786, -0.12838377, -0.030403443, -0.04421254, -0.15006372] +sib[2][8][2] = [0.076986805, -0.016464042, 0.08880119, 0.03479346, -0.19845805, -0.12528196] +sib[2][8][3] = [0.051009394, -0.009787562, 0.047646087, -0.003885689, 0.0010148, -0.009085627] +sib[2][8][4] = [0.020872638, -0.021129338, 0.048127007, -0.0024972174, 0.002350955, -0.0037509361] +sib[2][8][5] = [-0.043528356, -0.023956222, 0.047775924, -0.010181325, -0.009281956, -0.009085627] +sib[2][8][6] = [-0.12178734, 4.2700802E-4, -0.059341986, -0.022653384, -0.0117155025, -0.009019228] +sib[2][8][7] = [-0.0075305547, -0.023150373, 0.09874402, -0.004103143, -0.006852805, -0.0077615865] +sib[2][8][8] = [0.076986805, -0.016464042, 0.08880119, 0.03479346, -0.19845805, -0.12528196] +sib[2][9][2] = [-0.020520642, 0.076354906, 0.1944994, 0.15515459, -0.011358529, -0.031066343, -0.09887106, -0.11063344, -0.032141745, -0.051495682, -0.15644252] +sib[2][9][3] = [-0.027242858, -0.053158324, 0.07393179, -0.10852734, -0.0051501845, -0.02722559, -0.033271253, 0.0025097397, -0.009558577, -0.0056730197, -0.0063345856] +sib[2][9][4] = [-0.05229169, -0.0681938, -0.0029649083, -0.07044635, -9.7006967E-4, -0.025837118, -0.034270104, -0.018459626, -0.008684105, -0.0056730197, -0.009776246] +sib[2][9][5] = [-0.06603368, -0.07421527, -0.037945807, -0.06719745, 0.011594927, -0.027031107, -0.036770806, -0.017832227, -0.008684105, -0.0056730197, -0.020491257] +sib[2][9][6] = [-0.009841235, 4.2700802E-4, -0.03250438, -0.017214263, 0.032508813, -0.009003615, 0.004312259, -0.023045013, 0.009281213, -0.0061465385, -0.014085354] +sib[2][9][7] = [0.061626144, -0.07034968, -0.03195047, -0.09455538, -0.120078005, -0.03296606, -0.049614057, -0.026877865, -0.004828308, -0.013543218, -0.028570222] +sib[2][9][8] = [0.11295945, -0.022145407, -0.0019896077, 0.04971677, -0.01857473, -3.880954E-4, 0.013332176, -0.03681626, -0.0020619298, -0.00273389, 0.003756082] +sib[2][9][9] = [-0.020520642, 0.076354906, 0.1944994, 0.15515459, -0.011358529, -0.031066343, -0.09887106, -0.11063344, -0.032141745, -0.051495682, -0.15644252] +sib[2][10][2] = [0.13180268, 0.11493771, -0.0047045387, 0.15951079, -0.15873712, -0.11043491, -0.0255826] +sib[2][10][3] = [0.008182732, -0.0071631013, -0.0205923, -0.015757592, -0.014230743, -0.033518903, 0.03614378] +sib[2][10][4] = [-0.051778182, -0.018504877, -0.020471526, 0.0016789434, -0.011928141, -0.030058809, 0.021001622] +sib[2][10][5] = [-0.07603834, -0.02133176, -0.017493805, 0.0027531967, -0.01069214, -0.030058809, 0.015227638] +sib[2][10][6] = [-0.04895925, -0.0037904466, -0.0105781695, -0.0013920688, 8.9861406E-4, -0.0010366742, 0.0064062] +sib[2][10][7] = [-0.044887293, -0.05752436, -0.016226107, -0.01911595, -0.018176608, -0.041148964, 0.032745954] +sib[2][10][8] = [0.051647864, -0.04317956, -0.022725593, 0.05492984, 0.005214537, 7.999297E-4, 0.049496748] +sib[2][10][9] = [0.080191016, 0.0143312, -0.0070167757, 0.00965486, -0.010810163, -0.024215773, 0.047102004] +sib[2][10][10] = [0.13180268, 0.11493771, -0.0047045387, 0.15951079, -0.15873712, -0.11043491, -0.0255826] +sib[2][11][2] = [0.010808839, 0.058979243, 0.20192263, 0.15561938, -0.020552063, -0.062491164, -0.10430702, -0.068041086, -0.030403443, -0.05217783, -0.11665259] +sib[2][11][3] = [2.20889E-4, -0.0644106, 0.07165513, -0.12014822, -0.015950715, -0.025820244, -0.040056784, 0.05870781, -0.0059317155, -0.008525055, 0.019085499] +sib[2][11][4] = [-0.029053152, -0.079446085, -0.013565132, -0.10395525, -0.01521303, -0.024431773, -0.040056784, 0.040202104, -0.0069625564, -0.008525055, 0.015643839] +sib[2][11][5] = [-0.057436574, -0.08546755, -0.043421194, -0.09880806, 0.0049541546, -0.024431773, -0.04255749, 0.026142383, -0.0069625564, -0.008525055, -0.004365093] +sib[2][11][6] = [-0.0074269967, 4.2700802E-4, -0.05704697, -0.017214263, 0.035589654, -0.008008031, -0.008562432, -0.027901186, -1.643592E-11, 0.005974566, -0.019980194] +sib[2][11][7] = [0.009692701, -0.07739792, -0.018704299, -0.11880031, -0.11404723, -0.02920743, -0.05252111, -0.050313536, -0.006090795, -0.016395256, -1.0209717E-4] +sib[2][11][8] = [0.14200197, -0.033050418, 0.09287813, 0.064871795, 0.042836916, -7.761908E-4, 0.0034649817, -0.043622717, -0.0020619298, 9.1371406E-4, 0.011641268] +sib[2][11][9] = [0.07109661, -0.050286762, 0.061908476, -0.06479681, -0.059158638, -0.026408441, -0.028151553, 0.0076437136, -0.0061847903, -0.011734949, -0.0027114945] +sib[2][11][10] = [0.08717857, 0.027359774, -0.08028591, -0.0888139, -0.03766033, -0.014323417, -0.029919054, -0.005170907, -0.0014785305, 2.4921317E-11, -0.03767125] +sib[2][11][11] = [0.010808839, 0.058979243, 0.20192263, 0.15561938, -0.020552063, -0.062491164, -0.10430702, -0.068041086, -0.030403443, -0.05217783, -0.11665259] +sib[2][12][2] = [-0.008806081, 0.04691, 0.2281839, 0.1456705, -0.035603188, -0.034997478, -0.12742673, -0.104196735, -0.027057149, -0.04807265, -0.11130665] +sib[2][12][3] = [0.041237235, -0.057941437, 0.069496565, -0.108939536, -0.005303272, -0.030035634, -0.041630562, 0.026382752, -0.005096597, -0.011700289, 0.0011847559] +sib[2][12][4] = [0.010378617, -0.07297691, -0.012093794, -0.0968693, -0.0037440853, -0.028647162, -0.041630562, 0.009728894, -0.006127438, -0.011700289, -0.004915405] +sib[2][12][5] = [-0.03239, -0.082192965, -0.038610287, -0.0936204, 0.0113951005, -0.028647162, -0.040566582, 0.004212398, -0.006127438, -0.011700289, -0.02492434] +sib[2][12][6] = [-0.0074269967, 4.2700802E-4, -0.06335462, -0.025775561, 0.02827518, -0.008008031, -9.899097E-4, -0.027693516, 0.010466568, 0.0012967229, -0.014085353] +sib[2][12][7] = [0.05567226, -0.07044582, -0.05151968, -0.11178391, -0.12026312, -0.036543418, -0.06484246, -0.07705597, -0.0070241163, -0.022745721, -0.029986966] +sib[2][12][8] = [0.109401174, -0.033050418, 0.06428825, 0.0337018, 0.06970561, -0.006707558, 0.037565842, 0.016676368, -0.0020619298, 9.1371406E-4, 0.003756082] +sib[2][12][9] = [0.11584553, -0.033347193, 0.04108969, -0.057068896, -0.06970354, -0.032085657, -0.03658042, -0.034205142, -0.0053496724, -0.014910184, -0.028449029] +sib[2][12][10] = [0.050475307, 0.016030503, -0.17972536, -0.07408078, -0.027328981, -0.010814365, -0.036067106, -0.014868278, -0.0014785305, 2.4921317E-11, -0.03556287] +sib[2][12][11] = [0.1235604, -0.055605866, 0.038780686, -0.043198757, -0.12062013, -0.05599679, -0.06447694, -0.060442697, -0.009797992, -0.013322568, -0.026861008] +sib[2][12][12] = [-0.008806081, 0.04691, 0.2281839, 0.1456705, -0.035603188, -0.034997478, -0.12742673, -0.104196735, -0.027057149, -0.04807265, -0.11130665] +sib[2][13][2] = [0.014043956, 0.07965843, 0.20438835, 0.16438305, -0.06419388, -0.03387947, -0.11047739, -0.112318926, -0.035618346, -0.06265212, -0.10985812] +sib[2][13][3] = [0.017949808, -0.045387708, 0.09065651, -0.10325236, 0.0121607, -0.027876105, -0.03573527, 0.045849197, -0.005096597, -0.0132879075, -0.02216522] +sib[2][13][4] = [-0.011906292, -0.06554112, 0.01401582, -0.08045248, 0.009910051, -0.02865566, -0.036601953, 0.028000686, -0.0042221253, -0.0132879075, -0.03229739] +sib[2][13][5] = [-0.038666643, -0.07595705, -0.03543552, -0.07692724, 0.023828043, -0.026487634, -0.031106602, 0.021909405, -0.0042221253, -0.0132879075, -0.043012403] +sib[2][13][6] = [-0.0025985183, 4.2700802E-4, -0.061672874, -0.032196537, 0.028119579, -0.008008031, -0.0011130623, -0.03201366, -1.643592E-11, 0.0, -0.016529191] +sib[2][13][7] = [0.049662627, -0.06386685, -0.04411166, -0.10510516, -0.10402035, -0.03438389, -0.055382475, -0.058717933, -0.0014534729, -0.02433334, -0.04404302] +sib[2][13][8] = [0.092199616, -0.031053064, 0.039211504, 0.02473355, 0.0586669, -0.006707558, 0.037803967, 0.006024688, -0.0020619298, 8.5615006E-4, 0.003756082] +sib[2][13][9] = [0.09659037, -0.025960183, 6.564618E-4, -0.039847475, -0.054971434, -0.029926129, -0.023374705, -0.0174373, -0.0053496724, -0.016497802, -0.044541065] +sib[2][13][10] = [0.031881973, 0.021188242, -0.17881499, -0.06278148, -0.025806544, -0.008985275, -0.048415747, -0.020805689, 0.0, 2.4921317E-11, -0.03598744] +sib[2][13][11] = [0.14344193, -0.03394379, 0.06377165, -0.048529483, -0.13677996, -0.053837266, -0.06477384, -0.056066412, -0.009797992, -0.016497802, -0.0361094] +sib[2][13][12] = [0.06824247, -0.032865155, -0.05144591, -0.009715655, -0.08558081, -0.03452714, -0.038933642, -0.08403366, -0.0071181115, -0.022780383, -0.05843993] +sib[2][13][13] = [0.014043956, 0.07965843, 0.20438835, 0.16438305, -0.06419388, -0.03387947, -0.11047739, -0.112318926, -0.035618346, -0.06265212, -0.10985812] +sib[2][14][2] = [-0.29136357, 0.21550456, 0.19781417, 0.14476764, -0.13681059, -0.058578, 0.1117025, 0.1984607] +sib[2][14][3] = [0.021534488, 0.045160346, -0.0045002564, -0.031228358, 0.022753827, -0.006190028, -0.023327127, -0.0030455515] +sib[2][14][4] = [0.05371026, -0.007045494, 0.015167823, -0.042570144, 0.018961541, -0.0053155567, -0.03846929, -0.0016570799] +sib[2][14][5] = [0.024433777, -0.027317604, 0.0066204155, -0.04539703, 0.018408414, -0.0061849365, -0.039378367, -0.0016570799] +sib[2][14][6] = [0.30589902, -0.048999812, 0.0014003827, 4.2700802E-4, -0.010726305, 0.0011060901, 0.007897306, -0.008008031] +sib[2][14][7] = [-0.05841264, -0.007967059, -0.055748023, -0.048123967, 0.02175959, -0.00801485, 0.0010496601, -0.0016570799] +sib[2][14][8] = [-0.050100226, 0.05648551, 0.10893307, 0.026581593, 0.004339601, -0.0045064306, 0.049496748, -7.761908E-4] +sib[2][14][9] = [-0.057856422, 0.07628463, 0.019891167, -0.021742167, 0.010795908, -0.014184332, 0.02426618, 0.0022314647] +sib[2][14][10] = [-0.012750375, -0.13579145, -0.053836614, -0.0510779, 0.01005627, -0.0023863493, 0.023752104, -0.011390338] +sib[2][14][11] = [-0.0064315833, 0.13281591, 0.01999303, -0.033362556, -0.0044995677, -0.01349137, 0.020228367, -0.007570683] +sib[2][14][12] = [0.029471051, 0.070170105, 0.0154845975, -0.033804964, 0.011769939, -0.006443104, 0.01857647, -0.005878956] +sib[2][14][13] = [-0.0030388515, 0.05772932, 0.018012315, -0.03560932, 0.0062698415, -0.005700865, 0.02500667, -0.0059585073] +sib[2][14][14] = [-0.29136357, 0.21550456, 0.19781417, 0.14476764, -0.13681059, -0.058578, 0.1117025, 0.1984607] +sib[3][0][0] = [-0.05789368] +sib[3][0][1] = [0.010715714] +sib[3][0][2] = [-0.007978581] +sib[3][0][3] = [-0.05789368] +sib[3][1][1] = [-0.087511264, -0.12744133, -0.104752496, -0.17722015, -0.092124306, -0.21522388] +sib[3][1][2] = [0.03430704, -0.0010550766, -0.015493946, 0.002736577, -0.004425691, -0.0017134671] +sib[3][1][3] = [-0.087511264, -0.12744133, -0.104752496, -0.17722015, -0.092124306, -0.21522388] +sib[3][2][2] = [-0.06426263, -0.069901936, -0.10168637, -0.09750523, -0.1218078, -0.090425715, -0.08923541, -0.077614814, -0.090978056, -0.121757455, -0.08038013] +sib[3][2][3] = [-0.06426263, -0.069901936, -0.10168637, -0.09750523, -0.1218078, -0.090425715, -0.08923541, -0.077614814, -0.090978056, -0.121757455, -0.08038013] +sib[3][4][3] = [0.012380985, -0.04081459, 0.0821533, -0.07474714, -0.20395957, -0.16560583, -0.07983476, -0.19544126, -0.027634017, -0.057838816, -0.14035416] +sib[3][4][4] = [0.012380985, -0.04081459, 0.0821533, -0.07474714, -0.20395957, -0.16560583, -0.07983476, -0.19544126, -0.027634017, -0.057838816, -0.14035416] +sib[3][5][3] = [-0.007085464, -0.09665399, 0.011526372, -0.099398784, -0.2790046, -0.15970978, -0.082440555, -0.22966766, -0.027634017, -0.06556656, -0.18173482] +sib[3][5][4] = [-0.05487947, -0.045098934, 0.052111655, -0.10031113, 0.015462773, -0.02529343, -0.0042411042, 0.005197253, -0.0015446771, -0.006902779, -0.012733134] +sib[3][5][5] = [-0.007085464, -0.09665399, 0.011526372, -0.099398784, -0.2790046, -0.15970978, -0.082440555, -0.22966766, -0.027634017, -0.06556656, -0.18173482] +sib[3][6][3] = [0.0036555498, -0.036290288] +sib[3][6][4] = [0.14733498, -0.0077255554] +sib[3][6][5] = [0.109134026, -0.019898158] +sib[3][6][6] = [0.0036555498, -0.036290288] +sib[3][7][3] = [-0.031260066, -0.06856652, 0.04522199, -0.11676894, -0.13290358, -0.051449183, -0.03546544, -0.13028136, -0.024157416, -0.051094763, -0.17340602] +sib[3][7][4] = [-0.04330022, -0.058292788, 0.12432846, -0.08908352, 0.06723203, -0.026261263, -0.003667286, 0.05421242, -0.0042221253, -0.006662595, -0.0035444521] +sib[3][7][5] = [-0.08124242, -0.07744131, 0.043832168, -0.09079691, 0.087276354, -0.026261263, -0.0061679883, 0.031382058, -0.0042221253, -0.008626616, -0.020949975] +sib[3][7][6] = [-0.031865876, 0.0, -0.051752053, -0.008561299, 0.04309825, -0.004812273, 0.003292874, -0.021627404, 0.0, -9.703423E-4, -0.008190515] +sib[3][7][7] = [-0.031260066, -0.06856652, 0.04522199, -0.11676894, -0.13290358, -0.051449183, -0.03546544, -0.13028136, -0.024157416, -0.051094763, -0.17340602] +sib[3][8][3] = [-0.004966825, -0.11548082, -0.09893188, -0.064014524, -0.21564847, -0.14862426] +sib[3][8][4] = [0.10903192, -0.012690772, 0.044209372, -0.0033129558, 0.0020286364, -0.0037509361] +sib[3][8][5] = [0.06957626, -0.024951018, 0.025932293, -0.010997063, -0.007393649, -0.009085628] +sib[3][8][6] = [-0.124904506, 0.0, -0.052829344, -0.021456657, -0.0117155025, -0.009019228] +sib[3][8][7] = [0.023370812, -0.02231672, 0.112717025, -0.004918881, -0.0049644983, -0.006423532] +sib[3][8][8] = [-0.004966825, -0.11548082, -0.09893188, -0.064014524, -0.21564847, -0.14862426] +sib[3][9][3] = [-0.023793247, -0.022661865, 0.11254575, -0.032578483, -0.0630472, -0.12987432, -0.084608644, -0.11253104, -0.025895717, -0.058377907, -0.17978483] +sib[3][9][4] = [-0.04500141, -0.056061525, 0.14258005, -0.10864104, 0.009410702, -0.026652856, -0.0313039, -0.0019144005, -0.008684105, -0.0024631263, -0.0030857343] +sib[3][9][5] = [-0.07799548, -0.07521007, 0.07515881, -0.08904107, 0.02134251, -0.027846845, -0.034803454, -0.017191567, -0.008684105, -0.0024631263, -0.020491257] +sib[3][9][6] = [-0.0391086, 0.0, -0.03562153, -0.010701624, 0.032508813, -0.0078068906, 0.0049347775, -0.018508233, 0.009281213, -0.0061465385, -0.014085354] +sib[3][9][7] = [0.09251948, -0.06951603, -0.011008778, -0.07883953, -0.11552522, -0.033781793, -0.043712, -0.050451096, -0.0064717247, -0.010333326, -0.027232168] +sib[3][9][8] = [0.106523976, -0.025107507, -0.027313342, 0.0643436, -0.020281743, -3.880954E-4, 0.013332176, -0.041317776, 0.0, -0.00273389, 0.003756082] +sib[3][9][9] = [-0.023793247, -0.022661865, 0.11254575, -0.032578483, -0.0630472, -0.12987432, -0.084608644, -0.11253104, -0.025895717, -0.058377907, -0.17978483] +sib[3][10][3] = [0.049849, 0.015920937, -0.103512526, -0.0282223, -0.15162304, -0.1337772, -0.028855206] +sib[3][10][4] = [0.08486363, -0.010066313, -0.020019567, -0.015871307, -0.011928141, -0.033518903, 0.01838523] +sib[3][10][5] = [0.037066273, -0.022326551, -0.018309543, -0.019090429, -0.01069214, -0.030058809, 0.003265826] +sib[3][10][6] = [-0.052076407, -0.0042174547, -0.009381445, 0.0051205703, 1.1164299E-4, -0.0010366742, -0.022861157] +sib[3][10][7] = [-0.0239456, -0.0566907, -0.017041847, -0.0034001134, -0.018176608, -0.03981091, 0.06363928] +sib[3][10][8] = [0.009411858, -0.04614166, -0.022725593, 0.057259593, 0.0027610764, 7.999297E-4, 0.052491844] +sib[3][10][9] = [0.1020553, 0.018468937, -0.015737467, -0.019766212, -0.015054941, -0.024877794, 0.09240703] +sib[3][10][10] = [0.049849, 0.015920937, -0.103512526, -0.0282223, -0.15162304, -0.1337772, -0.028855206] +sib[3][11][3] = [0.007536241, -0.040037517, 0.11996899, -0.032113697, -0.07224075, -0.16129914, -0.090044595, -0.06993868, -0.024157416, -0.059060056, -0.13999487] +sib[3][11][4] = [-0.017537657, -0.06731382, 0.13803843, -0.12026193, -0.0013898304, -0.02524751, -0.03808943, 0.05428367, -0.0050572436, -0.0053151622, 0.022334352] +sib[3][11][5] = [-0.06939837, -0.086462356, 0.06968344, -0.120651685, 0.014701741, -0.02524751, -0.040590137, 0.026783044, -0.0069625564, -0.0053151622, -0.0043650935] +sib[3][11][6] = [-0.03669436, 0.0, -0.060164124, -0.010701624, 0.035589654, -0.006811307, -0.007939913, -0.023364406, 0.0, 0.005974566, -0.019980194] +sib[3][11][7] = [0.04058604, -0.07656428, 0.0022373926, -0.10308445, -0.10949445, -0.030023169, -0.046619054, -0.073886774, -0.007734212, -0.013185361, 0.0012359582] +sib[3][11][8] = [0.14499708, -0.036012515, 0.050642148, 0.067201555, 0.041129906, -7.761908E-4, 0.0034649817, -0.04812423, 0.0, 9.137141E-4, 0.011641268] +sib[3][11][9] = [0.118235655, -0.046149027, 0.062057465, -0.10321512, -0.047871336, -0.035129134, -0.026184201, 0.008284374, -0.003369519, -0.0063851266, -0.0033735158] +sib[3][11][10] = [0.10789909, 0.037529636, -9.849798E-4, -0.045202315, -0.030076612, -0.015593061, -0.019619161, -0.0038627228, -0.0014785305, -0.0019659526, -0.03767125] +sib[3][11][11] = [0.007536241, -0.040037517, 0.11996899, -0.032113697, -0.07224075, -0.16129914, -0.090044595, -0.06993868, -0.024157416, -0.059060056, -0.13999487] +sib[3][12][3] = [-0.012078681, -0.052106764, 0.14623025, -0.042062573, -0.08729188, -0.13380544, -0.11316432, -0.10609435, -0.020811122, -0.054954875, -0.13464893] +sib[3][12][4] = [0.023478685, -0.06084465, 0.13814482, -0.113175966, 0.009257614, -0.0294629, -0.03966321, 0.021958612, -0.0042221253, -0.008490396, 0.00443361] +sib[3][12][5] = [-0.0443518, -0.08318776, 0.07449434, -0.11546402, 0.021142684, -0.0294629, -0.03859923, 0.0048530586, -0.006127438, -0.008490396, -0.024924338] +sib[3][12][6] = [-0.03669436, 0.0, -0.06647178, -0.019262923, 0.02827518, -0.006811307, -3.673914E-4, -0.023156736, 0.010466568, 0.0012967229, -0.014085353] +sib[3][12][7] = [0.08656559, -0.06961218, -0.030577995, -0.09606805, -0.11571034, -0.037359156, -0.0589404, -0.100629196, -0.008667532, -0.019535828, -0.028648913] +sib[3][12][8] = [0.11239628, -0.036012515, 0.022052249, 0.03603155, 0.06799861, -0.006707558, 0.037565842, 0.012174852, 0.0, 9.137141E-4, 0.003756082] +sib[3][12][9] = [0.16298458, -0.029209461, 0.04123869, -0.0954872, -0.058416236, -0.040806353, -0.03461307, -0.033564482, -0.0025344007, -0.00956036, -0.02911105] +sib[3][12][10] = [0.071195826, 0.02620035, -0.100424424, -0.030469187, -0.01974526, -0.012084009, -0.025767213, -0.013560094, -0.0014785305, -0.0019659526, -0.03556287] +sib[3][12][11] = [0.19785225, -0.06643538, -0.04062798, -0.063266315, -0.11048587, -0.055547453, -0.06250958, -0.059802037, -0.0032337965, -0.007972743, -0.027523026] +sib[3][12][12] = [-0.012078681, -0.052106764, 0.14623025, -0.042062573, -0.08729188, -0.13380544, -0.11316432, -0.10609435, -0.020811122, -0.054954875, -0.13464893] +sib[3][13][3] = [0.010771354, -0.019358344, 0.12243471, -0.023350026, -0.115882576, -0.13268743, -0.09621497, -0.11421653, -0.029372318, -0.06953435, -0.13320039] +sib[3][13][4] = [1.9125821E-4, -0.05340885, 0.15930477, -0.10336607, 0.026721582, -0.029471397, -0.0346346, 0.041425057, -0.0042221253, -0.010078013, -0.018916365] +sib[3][13][5] = [-0.050628446, -0.07695184, 0.0776691, -0.098770864, 0.033575624, -0.027303372, -0.02913925, 0.022550065, -0.0042221253, -0.010078013, -0.043012403] +sib[3][13][6] = [-0.031865876, 0.0, -0.06479003, -0.025683897, 0.028119579, -0.006811307, -4.9054436E-4, -0.02747688, 0.0, 0.0, -0.016529191] +sib[3][13][7] = [0.08055597, -0.06303321, -0.023169972, -0.0893893, -0.09946756, -0.035199627, -0.04948042, -0.082291186, -0.0030968897, -0.021123445, -0.042704962] +sib[3][13][8] = [0.09519473, -0.034015164, -0.0030244961, 0.0270633, 0.05695989, -0.006707558, 0.037803967, 0.0015231725, 0.0, 8.561501E-4, 0.003756082] +sib[3][13][9] = [0.14372943, -0.021822449, 8.054506E-4, -0.07826577, -0.043684132, -0.038646825, -0.021407353, -0.01679664, -0.0025344007, -0.011147978, -0.045203086] +sib[3][13][10] = [0.052602503, 0.03135809, -0.09951402, -0.019169897, -0.018222826, -0.0102549195, -0.03811585, -0.019497504, 5.0247823E-11, -0.0019659526, -0.03598744] +sib[3][13][11] = [0.2177338, -0.0447733, -0.009973826, -0.0668631, -0.1266457, -0.053387925, -0.06280649, -0.055425752, -0.0032337965, -0.011147978, -0.03677142] +sib[3][13][12] = [0.15116192, -0.029928438, -0.0682897, -0.030506752, -0.075446546, -0.034077805, -0.03499894, -0.083393, -0.0059905644, -0.017430559, -0.05910195] +sib[3][13][13] = [0.010771354, -0.019358344, 0.12243471, -0.023350026, -0.115882576, -0.13268743, -0.09621497, -0.11421653, -0.029372318, -0.06953435, -0.13320039] +sib[3][14][3] = [-0.26056057, 0.13355096, 0.010081072, 0.04575086, -0.19626357, -0.05233198, 0.108429894, 0.099652715] +sib[3][14][4] = [-0.0051852446, 0.11604688, -0.00461397, -0.034131575, 0.027734272, -0.0053155567, -0.041085675, -0.0024728184] +sib[3][14][5] = [0.005049154, 0.08578702, -0.015223209, -0.046391815, 0.019369159, -0.0061849365, -0.05134018, -0.0024728184] +sib[3][14][6] = [0.29295436, -0.052116968, 0.007913021, 0.0, -0.0017050705, 0.0011060901, -0.021370051, -0.006811307] +sib[3][14][7] = [-0.05461452, 0.012974637, -0.04003219, -0.047290314, 0.0119293835, -0.009658267, 0.03194299, -0.0024728184] +sib[3][14][8] = [-0.057784926, 0.014249502, 0.111262836, 0.023619492, 0.012321563, -0.0024445008, 0.052491844, -7.761908E-4] +sib[3][14][9] = [-0.091370605, 0.07643362, -0.018527146, -0.017604437, 0.006615444, -0.011369062, 0.07140522, -0.0064892285] +sib[3][14][10] = [-0.0065967264, -0.056490522, -0.010225024, -0.040908042, -0.009007444, -0.0023863493, 0.044472635, -0.012659982] +sib[3][14][11] = [-0.031473212, 0.059070446, 0.0016594138, -0.044192065, -0.004975613, -0.006927175, 0.094520256, -0.007121347] +sib[3][14][12] = [0.014797458, 0.058989495, -0.0035725532, -0.030868255, -0.0056242477, -0.0053155567, 0.10149591, -0.00542962] +sib[3][14][13] = [-0.017712446, 0.040885523, -0.0027787832, -0.034492105, -0.007669338, -0.0045733177, 0.10792611, -0.005509171] +sib[3][14][14] = [-0.26056057, 0.13355096, 0.010081072, 0.04575086, -0.19626357, -0.05233198, 0.108429894, 0.099652715] +sib[4][0][0] = [-0.05979176] +sib[4][0][1] = [0.012160879] +sib[4][0][2] = [-0.01094074] +sib[4][0][3] = [0.0063267057] +sib[4][0][4] = [-0.05979176] +sib[4][1][1] = [-0.089409344, -0.12744133, -0.104752496, -0.17722015, -0.092124306, -0.21522388] +sib[4][1][2] = [0.045860104, -0.0010550766, -0.018948799, 0.002736577, -0.004425691, -0.0017134671] +sib[4][1][3] = [0.18554153, -0.0011986855, 0.022944935, -0.0010610658, -0.011354887, -0.0020284676] +sib[4][1][4] = [-0.089409344, -0.12744133, -0.104752496, -0.17722015, -0.092124306, -0.21522388] +sib[4][2][2] = [-0.06426263, -0.11276391, -0.1925163, -0.11661321, -0.10168587, -0.09961935, -0.05639325, -0.06719341, -0.090978056, -0.13028353, -0.04757992] +sib[4][2][3] = [-1.10459565E-10, -0.0011986855, 0.04283212, 0.0, -0.006403528, -0.0010610659, -0.004545454, -0.030168634, -0.009606322, -0.0035743571, -0.08554308] +sib[4][2][4] = [-0.06426263, -0.11276391, -0.1925163, -0.11661321, -0.10168587, -0.09961935, -0.05639325, -0.06719341, -0.090978056, -0.13028353, -0.04757992] +sib[4][3][3] = [-0.06058728, -0.0979148, -0.05424255, -0.11633432, -0.1772722, -0.10616377, -0.1507355, -0.12918414, -0.098134555, -0.12852645, -0.070781246] +sib[4][3][4] = [-0.06058728, -0.0979148, -0.05424255, -0.11633432, -0.1772722, -0.10616377, -0.1507355, -0.12918414, -0.098134555, -0.12852645, -0.070781246] +sib[4][5][4] = [-0.054044735, 0.012123318, 0.009650465, -0.09443181, -0.23345609, -0.12745614, -0.071106635, -0.19992904, -0.027634017, -0.057838816, -0.17831837] +sib[4][5][5] = [-0.054044735, 0.012123318, 0.009650465, -0.09443181, -0.23345609, -0.12745614, -0.071106635, -0.19992904, -0.027634017, -0.057838816, -0.17831837] +sib[4][6][4] = [-0.0014760229, -0.036290288] +sib[4][6][5] = [0.12858586, -0.015006369] +sib[4][6][6] = [-0.0014760229, -0.036290288] +sib[4][7][4] = [-0.07685082, -0.0109950565, 0.04009042, -0.12017377, -0.13290358, -0.051449183, -0.03546544, -0.13028136, -0.024157416, -0.051094763, -0.17340602] +sib[4][7][5] = [-0.049684986, -0.07010144, 0.08261798, -0.08824345, 0.08446929, -0.028010322, -0.0058490587, 0.051007185, -0.0042221253, -0.008554218, -0.01425946] +sib[4][7][6] = [-0.031865876, -0.0034969435, -0.051817406, -0.008561299, 0.04309825, -0.0039980677, 0.0050420538, -0.021627404, -0.0040520946, -9.703423E-4, -0.010745135] +sib[4][7][7] = [-0.07685082, -0.0109950565, 0.04009042, -0.12017377, -0.13290358, -0.051449183, -0.03546544, -0.13028136, -0.024157416, -0.051094763, -0.17340602] +sib[4][8][4] = [-0.010098394, -0.057909343, -0.10233671, -0.064014524, -0.21564847, -0.14862426] +sib[4][8][5] = [0.05164864, -0.021304846, 0.04144946, -0.012746122, -0.007393649, -0.009085628] +sib[4][8][6] = [-0.12496985, -0.0034969435, -0.052829344, -0.020642452, -0.0117155025, -0.011573848] +sib[4][8][7] = [0.030665996, -0.02231672, 0.112717025, -0.0066679395, 0.0055457638, -0.006423532] +sib[4][8][8] = [-0.010098394, -0.057909343, -0.10233671, -0.064014524, -0.21564847, -0.14862426] +sib[4][9][4] = [-0.06938398, 0.034909606, 0.10741418, -0.035983317, -0.0630472, -0.12987432, -0.084608644, -0.11253104, -0.025895717, -0.058377907, -0.17978483] +sib[4][9][5] = [-0.048896812, -0.0678702, 0.11461686, -0.10780097, 0.02315436, -0.029595902, -0.033485673, -5.4621685E-4, -0.008684105, -0.0024631263, -0.013800743] +sib[4][9][6] = [-0.0391086, -0.0034969435, -0.035686884, -0.010701624, 0.032508813, -0.0069926856, 0.0066839578, -0.018508233, 0.0052291187, -0.0061465385, -0.016639974] +sib[4][9][7] = [0.09522878, -0.06951603, -0.00371359, -0.07883953, -0.11552522, -0.03553085, -0.043712, -0.050451096, -0.0064717247, -0.010333326, -0.027232168] +sib[4][9][8] = [0.110481456, -0.025107507, -0.027313342, 0.0643436, -0.020281743, -3.880954E-4, 0.013332176, -0.041317776, 0.0, -0.00273389, 0.003756082] +sib[4][9][9] = [-0.06938398, 0.034909606, 0.10741418, -0.035983317, -0.0630472, -0.12987432, -0.084608644, -0.11253104, -0.025895717, -0.058377907, -0.17978483] +sib[4][10][4] = [0.044717442, 0.073492415, -0.103512526, -0.031627126, -0.15162304, -0.1337772, -0.07444595] +sib[4][10][5] = [0.06762118, -0.018680383, -0.018790904, -0.017205872, -0.01069214, -0.033518903, 0.022457847] +sib[4][10][6] = [-0.052141756, -0.007714398, -0.008567239, 0.0051205703, 1.1164299E-4, -0.0035912949, -0.022861157] +sib[4][10][7] = [-0.01665042, -0.0566907, -0.018790904, -0.0034001134, -0.018176608, -0.03981091, 0.06634858] +sib[4][10][8] = [0.009411858, -0.04614166, -0.022725593, 0.057259593, 0.002291532, 7.999297E-4, 0.056449328] +sib[4][10][9] = [0.10935048, 0.018468937, -0.018297859, -0.019766212, -0.015054941, -0.024877794, 0.09511633] +sib[4][10][10] = [0.044717442, 0.073492415, -0.103512526, -0.031627126, -0.15162304, -0.1337772, -0.07444595] +sib[4][11][4] = [-0.038054492, 0.017533954, 0.114837416, -0.035518527, -0.07224075, -0.16129914, -0.090044595, -0.06993868, -0.024157416, -0.059060056, -0.13999487] +sib[4][11][5] = [-0.036074486, -0.07912248, 0.115200095, -0.11752356, 0.019956019, -0.026996568, -0.040271208, 0.04096473, -0.0050572436, -0.0053151622, 0.0023254189] +sib[4][11][6] = [-0.03669436, -0.0034969435, -0.060229473, -0.010701624, 0.035589654, -0.005997102, -0.006190733, -0.023364406, -0.0040520946, 0.005974566, -0.022534816] +sib[4][11][7] = [0.04329534, -0.07656428, 0.00953258, -0.10308445, -0.10949445, -0.031772226, -0.046619054, -0.073886774, -0.007734212, -0.013185361, 0.0012359582] +sib[4][11][8] = [0.14895456, -0.036012515, 0.050642148, 0.067201555, 0.041129906, -7.761908E-4, 0.0034649817, -0.04812423, 0.0, 9.137141E-4, 0.011641268] +sib[4][11][9] = [0.12094496, -0.046149027, 0.06935266, -0.10321512, -0.046747983, -0.037689526, -0.026184201, 0.008284374, -0.003369519, -0.0063851266, -0.0033735158] +sib[4][11][10] = [0.10789909, 0.037529636, -9.849798E-4, -0.045202315, -0.030076612, -0.015593061, -0.019619161, -0.0038627228, -0.0014785305, -0.0019659526, -0.03767125] +sib[4][11][11] = [-0.038054492, 0.017533954, 0.114837416, -0.035518527, -0.07224075, -0.16129914, -0.090044595, -0.06993868, -0.024157416, -0.059060056, -0.13999487] +sib[4][12][4] = [-0.05766942, 0.0054647066, 0.1410987, -0.045467407, -0.08729188, -0.13380544, -0.11316432, -0.10609435, -0.020811122, -0.054954875, -0.13464893] +sib[4][12][5] = [-0.009443326, -0.07584788, 0.11864605, -0.11233589, 0.025575463, -0.031211957, -0.0382803, 0.017182902, -0.0042221253, -0.008490396, -0.015575324] +sib[4][12][6] = [-0.03669436, -0.0034969435, -0.066537134, -0.019262923, 0.02827518, -0.005997102, 0.0013817883, -0.023156736, 0.0064144735, 0.0012967229, -0.016639974] +sib[4][12][7] = [0.08927489, -0.06961218, -0.023282807, -0.09606805, -0.11571034, -0.039108217, -0.0589404, -0.100629196, -0.008667532, -0.019535828, -0.028648913] +sib[4][12][8] = [0.11635375, -0.036012515, 0.022052249, 0.03603155, 0.06799861, -0.006707558, 0.037565842, 0.012174852, 0.0, 9.137141E-4, 0.003756082] +sib[4][12][9] = [0.16569388, -0.029209461, 0.04853387, -0.0954872, -0.057292882, -0.04336675, -0.03461307, -0.033564482, -0.0025344007, -0.00956036, -0.02911105] +sib[4][12][10] = [0.071195826, 0.02620035, -0.100424424, -0.030469187, -0.01974526, -0.012084009, -0.025767213, -0.013560094, -0.0014785305, -0.0019659526, -0.03556287] +sib[4][12][11] = [0.20056158, -0.06643538, -0.032409538, -0.063266315, -0.11048587, -0.057296515, -0.06250958, -0.059802037, -0.0032337965, -0.007972743, -0.027523026] +sib[4][12][12] = [-0.05766942, 0.0054647066, 0.1410987, -0.045467407, -0.08729188, -0.13380544, -0.11316432, -0.10609435, -0.020811122, -0.054954875, -0.13464893] +sib[4][13][4] = [-0.034819357, 0.038213126, 0.11730314, -0.02675486, -0.115882576, -0.13268743, -0.09621497, -0.11421653, -0.029372318, -0.06953435, -0.13320039] +sib[4][13][5] = [-0.016722493, -0.06961197, 0.116871156, -0.10224965, 0.04181824, -0.029052429, -0.028820321, 0.036074564, -0.0042221253, -0.010078013, -0.029631376] +sib[4][13][6] = [-0.031865876, -0.0034969435, -0.06485539, -0.025683897, 0.028119579, -0.005997102, 0.0012586355, -0.02747688, -0.0040520946, 0.0, -0.019083811] +sib[4][13][7] = [0.08326527, -0.06303321, -0.015874784, -0.0893893, -0.09946756, -0.03694869, -0.04948042, -0.082291186, -0.0030968897, -0.021123445, -0.042704962] +sib[4][13][8] = [0.0991522, -0.034015164, -0.0030244961, 0.0270633, 0.05695989, -0.006707558, 0.037803967, 0.0015231725, 0.0, 8.561501E-4, 0.003756082] +sib[4][13][9] = [0.14643873, -0.021822449, 0.008100649, -0.07826577, -0.04256078, -0.041207217, -0.021407353, -0.01679664, -0.0025344007, -0.011147978, -0.045203086] +sib[4][13][10] = [0.052602503, 0.03135809, -0.09951402, -0.019169897, -0.018222826, -0.0102549195, -0.03811585, -0.019497504, 5.0247823E-11, -0.0019659526, -0.03598744] +sib[4][13][11] = [0.2204431, -0.0447733, -0.0017553885, -0.0668631, -0.1266457, -0.055136986, -0.06280649, -0.055425752, -0.0032337965, -0.011147978, -0.03677142] +sib[4][13][12] = [0.15387122, -0.029928438, -0.049746484, -0.033426255, -0.075446546, -0.03582687, -0.03499894, -0.083393, -0.0048520667, -0.017430559, -0.05910195] +sib[4][13][13] = [-0.034819357, 0.038213126, 0.11730314, -0.02675486, -0.115882576, -0.13268743, -0.09621497, -0.11421653, -0.029372318, -0.06953435, -0.13320039] +sib[4][14][4] = [-0.25785947, 0.12841938, 0.006676249, 0.103322335, -0.19626357, -0.05233198, 0.06283919, 0.099652715] +sib[4][14][5] = [-0.03720701, 0.10279249, -0.0155701935, -0.04274565, 0.024220739, -0.0061849365, -0.032148156, -0.004221876] +sib[4][14][6] = [0.29295436, -0.05218232, 0.007913021, -0.0034969435, -0.0017050705, -0.0029460045, -0.021370051, -0.005997102] +sib[4][14][7] = [-0.057200015, 0.02026982, -0.04003219, -0.047290314, 0.0119293835, -0.009658267, 0.034652296, -0.004221876] +sib[4][14][8] = [-0.057784926, 0.014249502, 0.111262836, 0.023619492, 0.012321563, -0.0024445008, 0.056449328, -7.761908E-4] +sib[4][14][9] = [-0.09395609, 0.083728805, -0.018527146, -0.017604437, 0.008007561, -0.011369062, 0.074114524, -0.009049619] +sib[4][14][10] = [-0.0062989416, -0.056490522, -0.010225024, -0.040908042, -0.009007444, -0.0023863493, 0.044472635, -0.012659982] +sib[4][14][11] = [-0.034058698, 0.06728889, 0.0016594138, -0.044192065, -0.004975613, -0.006927175, 0.09722956, -0.008870404] +sib[4][14][12] = [0.017230764, 0.0775327, -0.006492055, -0.030868255, -0.0021692405, -0.004177059, 0.104205206, -0.0071786777] +sib[4][14][13] = [-0.020297935, 0.048180707, -0.0027787832, -0.032672606, -0.007669338, -0.0045733177, 0.110635415, -0.007258229] +sib[4][14][14] = [-0.25785947, 0.12841938, 0.006676249, 0.103322335, -0.19626357, -0.05233198, 0.06283919, 0.099652715] +sib[5][0][0] = [-0.013991715] +sib[5][0][1] = [0.020473363] +sib[5][0][2] = [-0.0114432555] +sib[5][0][3] = [0.001716299] +sib[5][0][4] = [0.0026450125] +sib[5][0][5] = [-0.013991715] +sib[5][1][1] = [-0.02070929, -0.10959918, -0.08935779, -0.16785827, -0.092124306, -0.18564034] +sib[5][1][2] = [0.045357592, -0.0024686644, -0.018948799, 0.002736577, -0.004425691, -0.0017134671] +sib[5][1][3] = [0.20380627, -0.0011986855, 0.018373724, -0.0010610658, -0.011354887, -0.0020284676] +sib[5][1][4] = [0.18631344, 1.2342613E-10, 0.017089274, -0.0033572963, -0.008851382, -0.0020284676] +sib[5][1][5] = [-0.02070929, -0.10959918, -0.08935779, -0.16785827, -0.092124306, -0.18564034] +sib[5][2][2] = [-0.057222914, -0.09492177, -0.12381624, -0.10121852, -0.10252683, -0.09025747, -0.04938847, -0.059581477, -0.09315635, -0.12234431, -0.01799638] +sib[5][2][3] = [-1.10459565E-10, -0.0011986855, 0.03549111, 0.0, -0.004048791, -0.0010610659, -0.006800021, -0.03606269, -0.009606322, -0.0042461595, -0.08717637] +sib[5][2][4] = [-1.10459565E-10, 1.3019351E-10, 0.031250264, -0.004602578, 0.012307799, -0.0010610659, -0.0036521195, -0.023576815, -0.012198655, 0.0, -0.09329657] +sib[5][2][5] = [-0.057222914, -0.09492177, -0.12381624, -0.10121852, -0.10252683, -0.09025747, -0.04938847, -0.059581477, -0.09315635, -0.12234431, -0.01799638] +sib[5][3][3] = [-0.053547565, -0.122934654, -0.07447434, -0.12004759, -0.15799122, -0.10599553, -0.11088853, -0.111150794, -0.10031285, -0.1291133, -0.008397517] +sib[5][3][4] = [-9.0646456E-11, 2.235752E-10, 0.05345586, 0.0, -0.022630576, 7.305343E-4, 0.0031873789, 0.0077236216, -0.012198654, 0.0, -0.06923724] +sib[5][3][5] = [-0.053547565, -0.122934654, -0.07447434, -0.12004759, -0.15799122, -0.10599553, -0.11088853, -0.111150794, -0.10031285, -0.1291133, -0.008397517] +sib[5][4][4] = [-0.053547565, -0.080072656, 0.018722693, -0.09064961, -0.18364106, -0.09680189, -0.14517066, -0.13152951, -0.10031285, -0.112729274, -0.07246438] +sib[5][4][5] = [-0.053547565, -0.080072656, 0.018722693, -0.09064961, -0.18364106, -0.09680189, -0.14517066, -0.13152951, -0.10031285, -0.112729274, -0.07246438] +sib[5][6][5] = [-0.0069973017, -0.057975613] +sib[5][6][6] = [-0.0069973017, -0.057975613] +sib[5][7][5] = [-0.07812354, -0.05433413, -0.05680359, -0.14005183, -0.1564012, -0.045264285, -0.03546544, -0.13028136, -0.024157416, -0.043367013, -0.17340602] +sib[5][7][6] = [-0.027037395, -0.0016036503, -0.046380665, -0.0064209746, 0.04309825, -0.0039980677, 0.0036118033, -0.019141719, 0.0, -9.703423E-4, -0.008190515] +sib[5][7][7] = [-0.07812354, -0.05433413, -0.05680359, -0.14005183, -0.1564012, -0.045264285, -0.03546544, -0.13028136, -0.024157416, -0.043367013, -0.17340602] +sib[5][8][5] = [-0.10699241, -0.101248406, -0.12221478, -0.057829622, -0.21564847, -0.14862426] +sib[5][8][6] = [-0.1206842, -0.0016036503, -0.045305535, -0.017991304, -0.0117155025, -0.0067315595] +sib[5][8][7] = [0.039422035, -0.019231547, 0.1148796, -0.0066679395, -0.0049644983, -0.006423532] +sib[5][8][8] = [-0.10699241, -0.101248406, -0.12221478, -0.057829622, -0.21564847, -0.14862426] +sib[5][9][5] = [-0.0706567, -0.00842947, 0.0105201565, -0.055861387, -0.0865448, -0.123689435, -0.084608644, -0.11253104, -0.025895717, -0.05065016, -0.17978483] +sib[5][9][6] = [-0.034280118, -0.0016036503, -0.031616483, -0.008561299, 0.032508813, -0.0069926856, 0.005253707, -0.014723899, 0.009281213, -0.0061465385, -0.014085354] +sib[5][9][7] = [0.09625212, -0.06643085, 0.008681927, -0.07667696, -0.11552522, -0.03553085, -0.043712, -0.050451096, -0.0062997285, -0.010333326, -0.027232168] +sib[5][9][8] = [0.0955457, -0.025107507, -0.056608, 0.057471104, -0.016701257, 1.6950024E-4, 0.013332176, -0.041317776, 0.0, -0.004396819, 0.004836182] +sib[5][9][9] = [-0.0706567, -0.00842947, 0.0105201565, -0.055861387, -0.0865448, -0.123689435, -0.084608644, -0.11253104, -0.025895717, -0.05065016, -0.17978483] +sib[5][10][5] = [-0.052176554, 0.030153338, -0.097327635, -0.051505208, -0.15162304, -0.1337772, -0.075718686] +sib[5][10][6] = [-0.046405777, -0.005821105, -0.008567239, 0.0051205703, 1.1164299E-4, -0.0010366742, -0.020446917] +sib[5][10][7] = [-0.0042549046, -0.053605534, -0.018790904, -0.0012375494, -0.018893855, -0.03981091, 0.06737193] +sib[5][10][8] = [-0.030470861, -0.04614166, -0.022168, 0.04551848, 0.00461428, 0.00188003, 0.03547753] +sib[5][10][9] = [0.118106514, 0.021554112, -0.016426917, -0.017603647, -0.015054941, -0.024877794, 0.09857213] +sib[5][10][10] = [-0.052176554, 0.030153338, -0.097327635, -0.051505208, -0.15162304, -0.1337772, -0.075718686] +sib[5][11][5] = [-0.039327215, -0.025805116, 0.017943379, -0.0553966, -0.095738366, -0.15511423, -0.090044595, -0.06993868, -0.024157416, -0.051332314, -0.13999487] +sib[5][11][6] = [-0.029451635, -0.0016036503, -0.051301815, -0.008561299, 0.035589654, -0.005997102, -0.003960719, -0.019580074, 0.0, 0.005974566, -0.019980194] +sib[5][11][7] = [0.044318676, -0.0734791, 0.021928096, -0.10092189, -0.10949445, -0.031772226, -0.046619054, -0.073886774, -0.0075622164, -0.013185361, 0.0012359582] +sib[5][11][8] = [0.12798275, -0.036012515, 0.010759438, 0.055460453, 0.044710394, -2.1859515E-4, 0.0034649817, -0.04812423, 0.0, -7.4921496E-4, 0.012721368] +sib[5][11][9] = [0.122632876, -0.043063845, 0.08343441, -0.10105256, -0.04614701, -0.035818584, -0.026184201, 0.008284374, -0.0058744918, -0.00870971, -0.0033735158] +sib[5][11][10] = [0.10789909, 0.03907222, 0.0065080505, -0.045202315, -0.030076612, -0.015593061, -0.015956124, -0.0038627228, 0.012713905, -0.0019659526, -0.039875332] +sib[5][11][11] = [-0.039327215, -0.025805116, 0.017943379, -0.0553966, -0.095738366, -0.15511423, -0.090044595, -0.06993868, -0.024157416, -0.051332314, -0.13999487] +sib[5][12][5] = [-0.05894215, -0.03787438, 0.044204667, -0.06534549, -0.11078949, -0.12762056, -0.11316432, -0.10609435, -0.020811122, -0.04722713, -0.13464893] +sib[5][12][6] = [-0.029451635, -0.0016036503, -0.059930466, -0.014982273, 0.02827518, -0.005997102, 0.0036118033, -0.019372404, 0.010466568, 0.0012967229, -0.014085353] +sib[5][12][7] = [0.090298235, -0.066527, -0.010887292, -0.093905486, -0.11571034, -0.039108217, -0.0589404, -0.100629196, -0.008495537, -0.019535828, -0.028648913] +sib[5][12][8] = [0.09538196, -0.036012515, -0.017830458, 0.024290444, 0.07157909, -0.0061499625, 0.037565842, 0.012174852, 0.0, -7.4921496E-4, 0.004836182] +sib[5][12][9] = [0.16738178, -0.02612428, 0.06261563, -0.09332464, -0.05669192, -0.041495804, -0.03461307, -0.033564482, -0.0050393734, -0.0118849445, -0.02911105] +sib[5][12][10] = [0.071195826, 0.027742948, -0.092931375, -0.030469187, -0.01974526, -0.012084009, -0.02210418, -0.013560094, 0.012713905, -0.0019659526, -0.037766952] +sib[5][12][11] = [0.20401737, -0.06180762, -0.017890045, -0.061103754, -0.11048587, -0.057296515, -0.06250958, -0.059802037, -0.005738769, -0.007972743, -0.027523026] +sib[5][12][12] = [-0.05894215, -0.03787438, 0.044204667, -0.06534549, -0.11078949, -0.12762056, -0.11316432, -0.10609435, -0.020811122, -0.04722713, -0.13464893] +sib[5][13][5] = [-0.03609209, -0.0051259417, 0.020409117, -0.046632934, -0.1393802, -0.12650257, -0.09621497, -0.11421653, -0.029372318, -0.0618066, -0.13320039] +sib[5][13][6] = [-0.027037395, -0.0016036503, -0.058248725, -0.019262923, 0.028119579, -0.005997102, -1.7161481E-4, -0.023692548, 0.0, 0.0, -0.016529191] +sib[5][13][7] = [0.084288605, -0.05994803, -0.0034792693, -0.08722674, -0.09946756, -0.03694869, -0.04948042, -0.082291186, -0.0029248935, -0.021123445, -0.042704962] +sib[5][13][8] = [0.07818041, -0.034015164, -0.0429072, 0.015322188, 0.06054037, -0.0061499625, 0.037803967, 0.0015231725, 0.0, -8.0677896E-4, 0.004836182] +sib[5][13][9] = [0.14812665, -0.018737271, 0.022182394, -0.07610321, -0.041959807, -0.039336275, -0.021407353, -0.01679664, -0.0050393734, -0.013472561, -0.045203086] +sib[5][13][10] = [0.052602503, 0.032900687, -0.092021, -0.019169897, -0.018222826, -0.0102549195, -0.03445282, -0.019497504, 0.014192436, -0.0019659526, -0.038191523] +sib[5][13][11] = [0.22147283, -0.040145542, 0.011916089, -0.06470054, -0.1266457, -0.055136986, -0.06280649, -0.055425752, -0.005738769, -0.011147978, -0.03677142] +sib[5][13][12] = [0.16193217, -0.025300676, -0.04007332, -0.026181616, -0.075446546, -0.03582687, -0.03499894, -0.083393, -0.008495537, -0.017430559, -0.05910195] +sib[5][13][13] = [-0.03609209, -0.0051259417, 0.020409117, -0.046632934, -0.1393802, -0.12650257, -0.09621497, -0.11421653, -0.029372318, -0.0618066, -0.13320039] +sib[5][14][5] = [-0.25537568, 0.03152537, -0.013201834, 0.059983265, -0.15300572, -0.05233198, 0.06156646, 0.1058376] +sib[5][14][6] = [0.22932234, -0.047896665, 0.00977265, -0.0016036503, 0.0028055469, 0.0011060901, -0.018955812, -0.005997102] +sib[5][14][7] = [-0.057181142, 0.032665327, -0.03786962, -0.044205137, 0.01412938, -0.009486271, 0.03567564, -0.004221876] +sib[5][14][8] = [-0.10915528, -0.025633207, 0.09952172, 0.023619492, 0.012321563, -0.0024445008, 0.03547753, -2.1859512E-4] +sib[5][14][9] = [-0.09114166, 0.09781057, -0.016364582, -0.014519258, 0.010207557, -0.013874034, 0.07580243, -0.0071786777] +sib[5][14][10] = [-0.022430215, -0.048997488, -0.010225024, -0.039365456, -0.030367618, 0.011806087, 0.044472635, -0.012659982] +sib[5][14][11] = [-0.03267824, 0.08096037, 0.0038219786, -0.0395643, -0.002775615, -0.009432147, 0.09825929, -0.008870404] +sib[5][14][12] = [0.013550812, 0.08635787, 7.5257575E-4, -0.026240492, 0.0012436521, -0.007820529, 0.10984009, -0.0071786777] +sib[5][14][13] = [-0.016257526, 0.06910189, 0.0015463475, -0.028044844, -0.004256447, -0.0070782905, 0.11869636, -0.007258229] +sib[5][14][14] = [-0.25537568, 0.03152537, -0.013201834, 0.059983265, -0.15300572, -0.05233198, 0.06156646, 0.1058376] +sib[6][0][0] = [-0.022900363] +sib[6][0][1] = [-0.057151113] +sib[6][0][2] = [0.011239517] +sib[6][0][3] = [0.10355931] +sib[6][0][4] = [0.10113679] +sib[6][0][5] = [0.07846503] +sib[6][0][6] = [-0.022900363] +sib[6][1][1] = [-8.780435E-4, 0.054963592, -0.19108737, -0.12623905] +sib[6][1][2] = [0.08165514, 0.020282855, 0.009559401, 0.0] +sib[6][1][3] = [0.31926402, 0.18964835, 0.0109074125, -0.0049274187] +sib[6][1][4] = [0.3212951, 0.1837927, 0.0109074125, -0.007223649] +sib[6][1][5] = [0.27594438, 0.17922972, 0.010594603, -0.0014743196] +sib[6][1][6] = [-8.780435E-4, 0.054963592, -0.19108737, -0.12623905] +sib[6][2][2] = [-0.11222258, 0.050404858, 0.047185533, -0.12299454, -0.01300682, -0.12578073] +sib[6][2][3] = [-0.18014275, 0.024966255, -0.05153896, 0.10415388, 0.0067137536, -0.0041224123] +sib[6][2][4] = [-0.19134797, 0.055446297, -0.04143285, 0.12907921, 0.0076070875, -5.4805516E-4] +sib[6][2][5] = [-0.2072391, 0.047943812, -0.038106382, 0.11535951, 0.005871078, -5.480552E-4] +sib[6][2][6] = [-0.11222258, 0.050404858, 0.047185533, -0.12299454, -0.01300682, -0.12578073] +sib[6][3][3] = [0.016463423, -0.0050595235, -0.0043837857, -0.07365265, -0.0745069, -0.13254973] +sib[6][3][4] = [-0.23648699, 0.004247016, -0.013646705, 0.11907454, 0.014446586, -5.4805516E-4] +sib[6][3][5] = [-0.2675099, 0.035713844, -2.141227E-4, 0.123929575, 0.013603911, -0.0041251206] +sib[6][3][6] = [0.016463423, -0.0050595235, -0.0043837857, -0.07365265, -0.0745069, -0.13254973] +sib[6][4][4] = [-0.0053208517, -0.010587407, -0.014341103, -0.06938746, -0.07594687, -0.124691784] +sib[6][4][5] = [-0.2547534, 0.0011128939, -0.010320229, 0.11575825, 0.016701154, -5.480552E-4] +sib[6][4][6] = [-0.0053208517, -0.010587407, -0.014341103, -0.06938746, -0.07594687, -0.124691784] +sib[6][5][5] = [-0.046530344, -0.024754517, -0.026675642, -0.06694023, -0.08020722, -0.122011766] +sib[6][5][6] = [-0.046530344, -0.024754517, -0.026675642, -0.06694023, -0.08020722, -0.122011766] +sib[6][7][6] = [-0.06668398, 0.15701908, 0.053081654, -0.041562922, -0.09335676, -0.045879193] +sib[6][7][7] = [-0.06668398, 0.15701908, 0.053081654, -0.041562922, -0.09335676, -0.045879193] +sib[6][8][6] = [0.031888455, -0.020159408, -0.115749374, -0.068911076] +sib[6][8][7] = [0.016328888, 0.31059718, -0.046885177, -0.0030382373] +sib[6][8][8] = [0.031888455, -0.020159408, -0.115749374, -0.068911076] +sib[6][9][6] = [-0.015463634, 0.24337994, 0.055914782, 0.0537837, -0.15392841, -0.053162336] +sib[6][9][7] = [0.10410624, -0.18479788, 0.04730715, 0.012246521, -0.07957622, -8.776218E-4] +sib[6][9][8] = [0.027913697, 0.05140003, -0.092991486, 0.029301297, 0.0036965762, -0.006102523] +sib[6][9][9] = [-0.015463634, 0.24337994, 0.055914782, 0.0537837, -0.15392841, -0.053162336] +sib[6][10][6] = [0.1638811, 0.0075014764, -0.0685837, 0.017256824, 0.009674108, 0.008494894] +sib[6][10][7] = [-0.09328745, -0.04625144, 0.07584937, 0.09840125, -0.013758433, 0.21754192] +sib[6][10][8] = [0.030252352, 0.006564774, -0.0014200294, -0.066030756, 0.0021090396, -0.055661373] +sib[6][10][9] = [-0.030235123, 0.03063292, 1.0149321E-5, 0.02545148, -0.0042993072, 0.029465321] +sib[6][10][10] = [0.1638811, 0.0075014764, -0.0685837, 0.017256824, 0.009674108, 0.008494894] +sib[6][11][6] = [-0.01100229, 0.23418641, 0.098507136, 0.06120694, -0.15936437, -0.05384449] +sib[6][11][7] = [0.054312088, -0.17876709, 0.023871478, 0.02549269, -0.08248328, -0.0037296575] +sib[6][11][8] = [0.039586127, 0.12569854, -0.084939435, 0.055912003, -0.0021388545, -0.0024549188] +sib[6][11][9] = [-0.057456873, -0.036878854, 0.0153086055, -0.017903224, -0.02430544, 0.0027138065] +sib[6][11][10] = [-9.1476756E-4, -0.026575249, -0.045395516, 0.12486483, -0.090377145, 7.5696927E-4] +sib[6][11][11] = [-0.01100229, 0.23418641, 0.098507136, 0.06120694, -0.15936437, -0.05384449] +sib[6][12][6] = [-0.02428934, 0.21913527, 0.062351488, 0.08746822, -0.18248409, -0.049739305] +sib[6][12][7] = [0.08172652, -0.18498299, -0.002870936, -0.0073226904, -0.09480462, -0.010080125] +sib[6][12][8] = [0.060293876, 0.15256722, -0.024640348, 0.027322117, 0.031962015, -0.0024549188] +sib[6][12][9] = [-0.035604056, -0.047423758, -0.026540251, -0.038722, -0.032734312, -4.614269E-4] +sib[6][12][10] = [-0.018368417, -0.0162439, -0.055092886, 0.051493347, -0.09652519, 7.5696927E-4] +sib[6][12][11] = [-0.0030203306, -0.14671642, -0.01671135, 0.03598261, -0.07687208, -1.0438182E-4] +sib[6][12][12] = [-0.02428934, 0.21913527, 0.062351488, 0.08746822, -0.18248409, -0.049739305] +sib[6][13][6] = [-0.03134952, 0.19054458, 0.054229297, 0.06367267, -0.16553473, -0.064318776] +sib[6][13][7] = [0.03901016, -0.16874021, 0.015467081, 8.532498E-5, -0.085344635, -0.01166774] +sib[6][13][8] = [0.10142052, 0.14152852, -0.03529203, 0.0022453656, 0.032200135, -0.002512483] +sib[6][13][9] = [-0.08208025, -0.032691646, -0.009772409, -0.079155244, -0.01952859, -0.0020490438] +sib[6][13][10] = [-0.026550043, -0.0147214625, -0.061030302, 0.052403733, -0.10887383, 7.5696927E-4] +sib[6][13][11] = [-0.022819908, -0.16087684, -0.0112027, 0.024575166, -0.067042306, -0.0032796157] +sib[6][13][12] = [-0.029787974, -0.11174141, -0.028042313, -0.016218323, -0.045164082, -0.0054269037] +sib[6][13][13] = [-0.03134952, 0.19054458, 0.054229297, 0.06367267, -0.16553473, -0.064318776] +sib[6][14][6] = [-0.3345765, -0.05440959, 0.040200546, 0.12801376, 0.01691782, 0.08181266, 0.045465887, -0.06269189, 0.19499904, -0.03643303, -0.045039263] +sib[6][14][7] = [-0.11123689, -0.04801243, 0.108130954, -0.0027912362, 0.019480383, 0.08817583, 0.17541601, 0.03268152, -0.10618995, 8.067688E-4, 0.0019499091] +sib[6][14][8] = [0.08267829, -0.018383445, -0.0056146653, -0.008550599, -0.012715477, -0.06417089, 0.006681534, -0.05969155, 0.047013845, -0.0024445008, -0.0049756025] +sib[6][14][9] = [-0.05278799, -0.0128073795, 0.019861616, -0.04254823, 0.049759973, 0.005107398, 0.0054259934, 0.049033057, -0.021200787, -0.0060650813, 0.004518865] +sib[6][14][10] = [-0.045886233, -0.073182315, -0.0291582, 0.11211588, -0.0011666183, -0.039041538, -0.043296024, -0.025777517, -1.710013E-4, -0.0016210296, -3.3870904E-4] +sib[6][14][11] = [0.058548182, -0.009585906, 0.049257465, 0.054598287, 0.019539595, 0.034960963, -0.021758793, -0.012782857, -0.07152735, -0.0018835319, -0.0016170464] +sib[6][14][12] = [0.025623873, -0.0070910985, 0.052799314, 0.029978123, 0.015759178, 0.04479893, -0.010567277, 0.003709057, -0.080064036, 0.0029438091, 0.0021973252] +sib[6][14][13] = [9.183455E-4, -0.022048544, 0.05698071, 0.05393573, 0.015255726, 0.043666583, 0.0017024414, 0.013851647, -0.06619368, 0.0024183872, 0.0021973252] +sib[6][14][14] = [-0.3345765, -0.05440959, 0.040200546, 0.12801376, 0.01691782, 0.08181266, 0.045465887, -0.06269189, 0.19499904, -0.03643303, -0.045039263] +sib[7][0][0] = [0.010996293] +sib[7][0][1] = [0.021207577] +sib[7][0][2] = [0.008265113] +sib[7][0][3] = [0.005559855] +sib[7][0][4] = [0.0035264082] +sib[7][0][5] = [0.0021829614] +sib[7][0][6] = [-0.009157593] +sib[7][0][7] = [0.010996293] +sib[7][1][1] = [0.019516613, -0.042894334, -0.04891747, -0.16450386, -0.08597361, -0.16393876] +sib[7][1][2] = [0.065065965, -0.0010550767, -0.020631796, 0.002736577, -6.542017E-4, -0.00419551] +sib[7][1][3] = [0.2076498, 0.0028507598, 0.014616444, -0.00858758, -0.008421026, -0.0020284678] +sib[7][1][4] = [0.21006994, 0.0, 0.010835064, -0.0063792104, -0.008851382, -0.0020284678] +sib[7][1][5] = [0.23289569, 0.0, 0.019819837, -0.00408298, -0.008851382, -0.0052061304] +sib[7][1][6] = [0.051611308, -0.0020070989, -0.018679755, -3.151076E-4, 0.013253022, -0.011876351] +sib[7][1][7] = [0.019516613, -0.042894334, -0.04891747, -0.16450386, -0.08597361, -0.16393876] +sib[7][2][2] = [-0.057888865, -0.02821692, -0.08359034, -0.06077819, -0.08085317, -0.086903065, -0.058034517, -0.058742765, -0.0870358, -0.108123936, 0.0037051851] +sib[7][2][3] = [0.005249313, 0.0028507598, 0.03851226, -0.0037572803, -0.012854091, -0.0055656657, 0.023232648, -0.020314965, -0.0013696172, -0.0052313716, -0.08717637] +sib[7][2][4] = [0.005249313, 6.7673783E-12, 0.027485203, -0.006285575, 0.015750417, -0.00408298, -0.005906687, -0.026932385, -0.0039619496, 0.0, -0.09492986] +sib[7][2][5] = [0.0, 6.7673783E-12, 0.036819294, 0.0, 0.011115744, -0.0027740486, -0.0076426957, -0.019999389, -0.0039619496, -0.0014217849, -0.09329657] +sib[7][2][6] = [-0.002669402, -0.004425875, 0.015476611, 0.0035821022, -0.0015197482, -3.1510755E-4, 0.0013554007, -0.008296368, 0.0, -0.0026259448, -0.032617223] +sib[7][2][7] = [-0.057888865, -0.02821692, -0.08359034, -0.06077819, -0.08085317, -0.086903065, -0.058034517, -0.058742765, -0.0870358, -0.108123936, 0.0037051851] +sib[7][3][3] = [-0.054213516, -0.056229804, -0.03424845, -0.079607256, -0.13631754, -0.10264112, -0.119534604, -0.11031208, -0.0941923, -0.11489293, 0.013304057] +sib[7][3][4] = [0.005249313, 1.0014907E-10, 0.053822003, -0.0016829971, -0.023169383, 7.305342E-4, 9.328113E-4, 0.0043680533, -0.003961949, 0.0, -0.070870526] +sib[7][3][5] = [1.9813108E-11, 1.0014907E-10, 0.04538936, 0.0, -0.0011142243, -9.824485E-4, 9.0136426E-5, 0.017892864, -0.0065542813, -0.00499885, -0.07586638] +sib[7][3][6] = [0.0018903521, -0.0066188276, 0.037315063, 0.0030355034, -0.0015197482, -3.1510755E-4, 0.00258643, -0.005530912, -0.0012453651, -0.0026259448, -0.04723473] +sib[7][3][7] = [-0.054213516, -0.056229804, -0.03424845, -0.079607256, -0.13631754, -0.10264112, -0.119534604, -0.11031208, -0.0941923, -0.11489293, 0.013304057] +sib[7][4][4] = [-0.054213516, -0.056229804, -0.02998326, -0.06931724, -0.14184542, -0.10264112, -0.12097458, -0.120269395, -0.0941923, -0.10703498, -0.01796261] +sib[7][4][5] = [1.9813108E-11, 1.0014907E-10, 0.06440448, 0.0, -0.02382263, 0.0020394656, 0.0031873793, 0.011301048, -0.0056409836, -0.0014217849, -0.07289222] +sib[7][4][6] = [0.0018903521, -0.004425875, 0.037315063, 0.0030355034, -0.0015197482, -3.1510755E-4, 0.00258643, -0.005530912, -0.0012453651, -2.8477004E-4, -0.04723473] +sib[7][4][7] = [-0.054213516, -0.056229804, -0.02998326, -0.06931724, -0.14184542, -0.10264112, -0.12097458, -0.120269395, -0.0941923, -0.10703498, -0.01796261] +sib[7][5][5] = [-0.054213516, -0.051324546, -0.028492367, -0.06816616, -0.15643947, -0.10264112, -0.15897451, -0.12543847, -0.0941923, -0.11489293, -0.07503934] +sib[7][5][6] = [0.0018903521, -0.004425875, 0.03719254, 0.0016454, -0.0015197482, -3.1510755E-4, 0.00258643, -0.005530912, -0.0012453651, -0.0026259448, -0.0430724] +sib[7][5][7] = [-0.054213516, -0.051324546, -0.028492367, -0.06816616, -0.15643947, -0.10264112, -0.15897451, -0.12543847, -0.0941923, -0.11489293, -0.07503934] +sib[7][6][6] = [-0.085978806, -0.14015438] +sib[7][6][7] = [-0.085978806, -0.14015438] +sib[7][8][7] = [0.09145066, -0.07198008, 0.13344514, -0.019058011, -0.19137497, -0.08871789] +sib[7][8][8] = [0.09145066, -0.07198008, 0.13344514, -0.019058011, -0.19137497, -0.08871789] +sib[7][9][7] = [-0.031885665, -0.002001539, 0.048732176, 0.06327891, -0.068889074, -0.101456136, -0.06247451, -0.12991948, -0.029551104, -0.047641955, -0.14544168] +sib[7][9][8] = [0.07952398, -0.017923644, 0.010222033, 0.029505935, -0.0011618757, -3.880954E-4, 0.015562127, -0.018838957, 0.0, -0.004396819, 0.008740568] +sib[7][9][9] = [-0.031885665, -0.002001539, 0.048732176, 0.06327891, -0.068889074, -0.101456136, -0.06247451, -0.12991948, -0.029551104, -0.047641955, -0.14544168] +sib[7][10][7] = [-0.013964549, 0.03658127, -0.07509431, 0.067635104, -0.15079187, -0.09943407, -0.036947634] +sib[7][10][8] = [-0.004245987, -0.038026284, -0.019059833, 0.0013370246, 0.0010751414, 0.005784415, 0.024770517] +sib[7][10][9] = [0.08163267, -0.0052820547, -0.01810176, -0.037956532, -0.015054941, -0.024215773, 0.023180518] +sib[7][10][10] = [-0.013964549, 0.03658127, -0.07509431, 0.067635104, -0.15079187, -0.09943407, -0.036947634] +sib[7][11][7] = [-5.561798E-4, -0.019377183, 0.056155406, 0.06374371, -0.07808261, -0.13288094, -0.06791046, -0.08732714, -0.027812803, -0.048324108, -0.10565175] +sib[7][11][8] = [0.09843541, -0.028828653, 0.080446735, 0.034427915, 0.06900093, -7.761908E-4, 0.006813285, -0.014959782, 0.0, -7.49215E-4, 0.008740568] +sib[7][11][9] = [0.047241263, -0.069900006, 0.048805356, -0.112408206, -0.06311045, -0.037493426, -0.024437603, 0.010386061, -0.0050572436, -0.010720863, -0.0027114945] +sib[7][11][10] = [0.047056198, 0.042475596, -0.047744174, -0.057172924, -0.030490663, -0.014323417, -0.024300834, -0.005170907, -0.00481218, 6.394236E-11, -0.039119426] +sib[7][11][11] = [-5.561798E-4, -0.019377183, 0.056155406, 0.06374371, -0.07808261, -0.13288094, -0.06791046, -0.08732714, -0.027812803, -0.048324108, -0.10565175] +sib[7][12][7] = [-0.020171098, -0.031446446, 0.08241671, 0.05379483, -0.09313373, -0.10538727, -0.09103019, -0.1234828, -0.024466509, -0.044218924, -0.1003058] +sib[7][12][8] = [0.07449598, -0.028828653, 0.05895011, 0.002796925, 0.11660792, -0.006707558, 0.038684193, 0.039116763, 0.0, -7.49215E-4, 0.008740568] +sib[7][12][9] = [0.09199017, -0.052960448, 0.027986571, -0.104680285, -0.07365536, -0.043170646, -0.03286647, -0.031462796, -0.0042221253, -0.013896097, -0.028449029] +sib[7][12][10] = [0.010352926, 0.031146316, -0.1471836, -0.042439796, -0.020159317, -0.010814365, -0.030448886, -0.014868278, -0.00481218, 6.394236E-11, -0.037011046] +sib[7][12][11] = [0.10722286, -0.07493079, 0.025387798, -0.07814595, -0.12289652, -0.058971357, -0.060762983, -0.05770035, -0.0032337965, -0.012308481, -0.026861008] +sib[7][12][12] = [-0.020171098, -0.031446446, 0.08241671, 0.05379483, -0.09313373, -0.10538727, -0.09103019, -0.1234828, -0.024466509, -0.044218924, -0.1003058] +sib[7][13][7] = [0.0026789322, 0.0013019902, 0.058621146, 0.07250738, -0.12172444, -0.10426925, -0.07408085, -0.13160497, -0.03302771, -0.058798395, -0.09885727] +sib[7][13][8] = [0.0631651, -0.02597448, 0.037828177, -0.009120149, 0.11996424, -0.006707558, 0.04226387, 0.04394432, 0.0, -8.06779E-4, 0.008740568] +sib[7][13][9] = [0.07273503, -0.045573436, -0.012446653, -0.087458864, -0.058923244, -0.041011117, -0.019660754, -0.014694952, -0.0042221253, -0.015483716, -0.044541065] +sib[7][13][10] = [-0.008240411, 0.036304057, -0.14627323, -0.03114051, -0.018636882, -0.008985275, -0.04279752, -0.020805689, -0.0033336494, 6.394236E-11, -0.037435617] +sib[7][13][11] = [0.1255262, -0.053268705, 0.068387896, -0.08174273, -0.13905635, -0.05681183, -0.06105988, -0.053324066, -0.0032337965, -0.008510702, -0.03840468] +sib[7][13][12] = [0.03452136, -0.04630676, -0.02264944, -0.039773952, -0.0878572, -0.03750171, -0.03325234, -0.07886929, -0.0031040115, -0.021766298, -0.05843993] +sib[7][13][13] = [0.0026789322, 0.0013019902, 0.058621146, 0.07250738, -0.12172444, -0.10426925, -0.07408085, -0.13160497, -0.03302771, -0.058798395, -0.09885727] +sib[7][14][7] = [-0.26414376, 0.06973738, 0.10593847, 0.0664112, -0.1071457, -0.055987366, 0.10033749, 0.12807092] +sib[7][14][8] = [-0.11902496, 0.008113168, 0.06471773, 0.016862381, 0.004339601, -0.0024445008, 0.024770517, -7.761908E-4] +sib[7][14][9] = [-0.045185737, 0.06318151, -0.027720224, -0.041355416, 0.014794314, -0.013056786, 4.108306E-4, -0.00885352] +sib[7][14][10] = [-0.0061226934, -0.103249714, -0.022195634, -0.035962082, 3.397325E-5, -0.005719999, -0.01637028, -0.011390338] +sib[7][14][11] = [0.0053691436, 0.13743219, -0.013220221, -0.05268746, 0.0016800195, -0.006927175, 0.0023126388, -0.010545246] +sib[7][14][12] = [0.055539697, 0.11697571, -0.012839755, -0.047246568, 0.009567992, -0.0024290038, -0.016722832, -0.00885352] +sib[7][14][13] = [0.021415919, 0.086525775, -0.012045981, -0.049050927, 0.004067893, -0.0016867651, -0.008714438, -0.008933071] +sib[7][14][14] = [-0.26414376, 0.06973738, 0.10593847, 0.0664112, -0.1071457, -0.055987366, 0.10033749, 0.12807092] +sib[8][0][0] = [-0.1306883] +sib[8][0][1] = [-0.0031998698] +sib[8][0][2] = [-0.013289453] +sib[8][0][3] = [-0.008273367] +sib[8][0][4] = [-0.010306813] +sib[8][0][5] = [-0.010239473] +sib[8][0][6] = [0.0] +sib[8][0][7] = [4.4407556E-5] +sib[8][0][8] = [-0.1306883] +sib[8][1][1] = [-0.16752008] +sib[8][1][2] = [0.048054956] +sib[8][1][3] = [0.19381656] +sib[8][1][4] = [0.1962367] +sib[8][1][5] = [0.22047327] +sib[8][1][6] = [0.05407614] +sib[8][1][7] = [0.03259886] +sib[8][1][8] = [-0.16752008] +sib[8][2][2] = [-0.09066302, -0.13003787, -0.16142634, -0.15207109, -0.26127905, 7.7442965E-5] +sib[8][2][3] = [-0.0014265252, -0.0077776024, -7.2852474E-11, -0.004048791, 0.019596174, -0.08604795] +sib[8][2][4] = [-0.006029103, -0.0077776024, -7.2852474E-11, 0.016942471, 0.013651979, -0.09380145] +sib[8][2][5] = [-0.0014265252, -0.0077776024, -9.664457E-4, 0.012307799, 0.024396855, -0.09329657] +sib[8][2][6] = [0.0048993025, -0.0024187758, -0.0017435295, -4.2051418E-11, 0.02235306, -0.0348629] +sib[8][2][7] = [4.8703526E-4, 0.0038177134, -0.001485926, -0.0028415276, 0.05204464, -0.08211417] +sib[8][2][8] = [-0.09066302, -0.13003787, -0.16142634, -0.15207109, -0.26127905, 7.7442965E-5] +sib[8][3][3] = [-0.10949209, -0.15805076, -0.17716438, -0.20753546, -0.21193713, 0.009676317] +sib[8][3][4] = [-0.0014265252, -0.0077776024, 0.0017916001, -0.02197733, 0.03490593, -0.06974211] +sib[8][3][5] = [-0.0014265252, -0.0077776024, 8.251545E-4, 7.783045E-5, 0.03296693, -0.07586638] +sib[8][3][6] = [0.0043527037, -0.0046117287, 0.0011168586, -4.2051418E-11, 0.044191517, -0.049480405] +sib[8][3][7] = [4.8703526E-4, 0.0038177134, 3.0567427E-4, -0.016087243, 0.02829557, -0.06396307] +sib[8][3][8] = [-0.10949209, -0.15805076, -0.17716438, -0.20753546, -0.21193713, 0.009676317] +sib[8][4][4] = [-0.09920207, -0.15805076, -0.17716438, -0.21306334, -0.20767194, -0.02159035] +sib[8][4][5] = [-0.0014265252, -0.0077776024, 8.251545E-4, -0.022630576, 0.046899192, -0.07289222] +sib[8][4][6] = [0.0043527037, -0.0024187758, 0.0011168586, -4.2051418E-11, 0.044191517, -0.049480405] +sib[8][4][7] = [4.8703526E-4, 0.0038177134, 3.0567427E-4, -0.013569284, 0.032772113, -0.06130428] +sib[8][4][8] = [-0.09920207, -0.15805076, -0.17716438, -0.21306334, -0.20767194, -0.02159035] +sib[8][5][5] = [-0.098051, -0.1531455, -0.17716438, -0.22765741, -0.20618106, -0.07866707] +sib[8][5][6] = [0.0029626004, -0.0024187758, 0.0011168586, -4.2051418E-11, 0.044068985, -0.045318075] +sib[8][5][7] = [-0.0016342016, 0.0016858783, 3.0567427E-4, -0.021759551, 0.03046755, -0.060595863] +sib[8][5][8] = [-0.098051, -0.1531455, -0.17716438, -0.22765741, -0.20618106, -0.07866707] +sib[8][6][6] = [-0.2945214] +sib[8][6][7] = [-0.008584548] +sib[8][6][8] = [-0.2945214] +sib[8][7][7] = [-0.09558498, -0.14580676, -0.15594773, -0.101749435, -0.22991525, -0.059299488] +sib[8][7][8] = [-0.09558498, -0.14580676, -0.15594773, -0.101749435, -0.22991525, -0.059299488] +sib[8][9][8] = [0.78801787, 0.22985879, 0.36780447, 0.1078232, 0.29729065, 0.025334237] +sib[8][9][9] = [0.78801787, 0.22985879, 0.36780447, 0.1078232, 0.29729065, 0.025334237] +sib[8][10][8] = [0.3778783, 0.7138954, 0.12205364, 0.21584456, 0.05456043] +sib[8][10][9] = [-0.059722286, -0.09083596, 0.041860487, -0.028273586, -0.037889853] +sib[8][10][10] = [0.3778783, 0.7138954, 0.12205364, 0.21584456, 0.05456043] +sib[8][11][8] = [0.771168, 0.21248314, 0.34403247, 0.09235164, 0.30030355, 0.05547594] +sib[8][11][9] = [-0.19855681, -0.056822326, -0.0894422, -0.07517671, -0.0369342, -0.015578905] +sib[8][11][10] = [-0.084116936, 0.050267287, -0.011977294, -0.02446951, 9.7631407E-4, -0.03887186] +sib[8][11][11] = [0.771168, 0.21248314, 0.34403247, 0.09235164, 0.30030355, 0.05547594] +sib[8][12][8] = [0.761219, 0.20041385, 0.37152606, 0.07730051, 0.32656485, 0.060821887] +sib[8][12][9] = [-0.19082892, -0.039882757, -0.095119424, -0.08468197, -0.057752986, -0.04131644] +sib[8][12][10] = [-0.075814925, 0.0329127, -0.008468242, -0.014138159, -0.079590335, -0.03531133] +sib[8][12][11] = [-0.17127416, -0.049114514, -0.108307295, -0.13420378, -0.097858824, -0.034285795] +sib[8][12][12] = [0.761219, 0.20041385, 0.37152606, 0.07730051, 0.32656485, 0.060821887] +sib[8][13][8] = [0.7799316, 0.23316228, 0.37264413, 0.04870981, 0.3027693, 0.06227043] +sib[8][13][9] = [-0.17360747, -0.03249575, -0.09295989, -0.06994984, -0.098186225, -0.057408478] +sib[8][13][10] = [-0.064515635, 0.038070444, -0.006639153, -0.012615723, -0.07867995, -0.0357359] +sib[8][13][11] = [-0.16899568, -0.032994986, -0.10763662, -0.14808722, -0.09456525, -0.04353419] +sib[8][13][12] = [-0.1257692, -0.031805098, -0.08162767, -0.09916444, -0.1300085, -0.06586472] +sib[8][13][13] = [0.7799316, 0.23316228, 0.37264413, 0.04870981, 0.3027693, 0.06227043] +sib[8][14][8] = [-0.13940644, 0.70799375, -0.04977177] +sib[8][14][9] = [-0.056291524, -0.09443851, -0.016541561] +sib[8][14][10] = [-0.090868294, -0.04292191, -0.0012392468] +sib[8][14][11] = [-0.043322347, -0.081042856, -0.012329705] +sib[8][14][12] = [-0.048961572, -0.07352945, -0.009252757] +sib[8][14][13] = [-0.06984594, -0.078610934, -0.006592763] +sib[8][14][14] = [-0.13940644, 0.70799375, -0.04977177] +sib[9][0][0] = [-0.07034887] +sib[9][0][1] = [-0.0113618225] +sib[9][0][2] = [-0.006281595] +sib[9][0][3] = [0.012695111] +sib[9][0][4] = [0.010661664] +sib[9][0][5] = [0.009318218] +sib[9][0][6] = [-0.0031773483] +sib[9][0][7] = [0.009483286] +sib[9][0][8] = [-0.025391717] +sib[9][0][9] = [-0.07034887] +sib[9][1][1] = [-0.1011759, -0.07143136, -0.1059882, -0.17183484, -0.091196485, -0.18513407] +sib[9][1][2] = [0.052392587, -0.0010550766, -0.018948799, 0.002736577, -0.004425691, -0.0017134671] +sib[9][1][3] = [0.21478505, -0.0011986855, 0.018373724, -0.0010610658, -0.011354887, -0.0014217426] +sib[9][1][4] = [0.2172052, 1.2342613E-10, 0.012518062, -0.0060311006, -0.008851382, -0.0014217426] +sib[9][1][5] = [0.24003094, 1.2342613E-10, 0.019819837, -0.0010610658, -0.008851382, -0.0045994055] +sib[9][1][6] = [0.0508988, 0.0, -0.013630568, 2.6559156E-11, 0.014032768, -0.011876351] +sib[9][1][7] = [0.06701221, -0.0010550766, -0.026815884, -0.0017672072, -0.006077345, -0.0020284676] +sib[9][1][8] = [0.034916025, -0.0017478155, -0.0038286392, -0.006166786, 0.0, -0.014572306] +sib[9][1][9] = [-0.1011759, -0.07143136, -0.1059882, -0.17183484, -0.091196485, -0.18513407] +sib[9][2][2] = [-0.062582, -0.056753963, -0.20428288, -0.11784891, -0.10288976, -0.094234064, -0.054490432, -0.06126349, -0.08680433, -0.12707745, -0.017490098] +sib[9][2][3] = [0.0033699158, -0.0011986855, 0.04455407, 6.7594264E-12, -4.26305E-4, -0.0010610659, -0.006648346, -0.03606269, -0.011389632, -0.0035743571, -0.08656964] +sib[9][2][4] = [0.0033699158, 1.3019351E-10, 0.03462046, -0.004602578, 0.020564955, -0.0037348699, -0.005755012, -0.025610901, -0.013981964, 0.0, -0.09432313] +sib[9][2][5] = [0.0033699158, 1.3019351E-10, 0.04395455, 6.7594264E-12, 0.015930286, 2.4786548E-4, -0.0074910205, -0.023576815, -0.013981964, 0.0, -0.09268984] +sib[9][2][6] = [-0.0066579944, -0.0024187758, 0.019175712, 0.0035821022, -1.848424E-4, -0.002860388, -0.0014214896, -0.01028468, 0.0, 5.837672E-4, -0.036261305] +sib[9][2][7] = [0.0033699158, -0.0031338134, 0.056400374, 0.0019135604, 0.0015796584, -0.0021793821, -9.805523E-4, -0.015657805, -0.014526446, -0.005065879, -0.08211417] +sib[9][2][8] = [0.0, -0.0017478155, -0.021038817, 0.009213619, 0.020823805, 1.5195471E-4, 8.020853E-5, -0.009715047, -0.005318772, 0.0, -0.0102435] +sib[9][2][9] = [-0.062582, -0.056753963, -0.20428288, -0.11784891, -0.10288976, -0.094234064, -0.054490432, -0.06126349, -0.08680433, -0.12707745, -0.017490098] +sib[9][3][3] = [-0.058906656, -0.084766835, -0.15494096, -0.13667798, -0.15835413, -0.10997212, -0.115990505, -0.11283281, -0.09396083, -0.13384646, -0.007891232] +sib[9][3][4] = [0.0033699158, 2.235752E-10, 0.059863806, 6.7594264E-12, -0.018354842, -0.0019432697, 0.0010844865, 0.0056895404, -0.0139819635, 0.0, -0.0702638] +sib[9][3][5] = [0.0033699158, 2.235752E-10, 0.05252462, 6.7594264E-12, 0.0037003167, 0.0020394656, 2.4181162E-4, 0.014315439, -0.016574297, -0.0035770652, -0.07525965] +sib[9][3][6] = [-0.0020982404, -0.0046117287, 0.041014165, 0.0030355034, -1.848424E-4, 7.584112E-11, -1.9046036E-4, -0.0075192237, -0.0012453651, 5.837672E-4, -0.050878808] +sib[9][3][7] = [0.0033699158, -0.0031338134, 0.032651298, 0.0019135604, -0.0116660595, -3.87782E-4, 0.0036544318, -0.008762814, -0.01971111, -0.002893438, -0.06396307] +sib[9][3][8] = [0.0, -0.0017478155, -0.03509238, 0.0058086934, -4.3411588E-4, 1.5195471E-4, 0.007849641, -0.01592761, 5.395991E-4, -0.0051903967, -0.008748124] +sib[9][3][9] = [-0.058906656, -0.084766835, -0.15494096, -0.13667798, -0.15835413, -0.10997212, -0.115990505, -0.11283281, -0.09396083, -0.13384646, -0.007891232] +sib[9][4][4] = [-0.058906656, -0.084766835, -0.15067577, -0.12638798, -0.16388203, -0.10997212, -0.11743048, -0.12279012, -0.09396083, -0.1259885, -0.039157894] +sib[9][4][5] = [0.0033699158, 2.235752E-10, 0.070446275, 6.7594264E-12, -0.01900809, 0.0020394656, 0.0033390545, 0.0077236216, -0.015661, 0.0, -0.07228549] +sib[9][4][6] = [-0.0020982404, -0.0024187758, 0.041014165, 0.0030355034, -1.848424E-4, 7.584112E-11, -1.9046036E-4, -0.0075192237, -0.0012453651, 0.002924942, -0.050878808] +sib[9][4][7] = [0.0033699158, -0.0031338134, 0.03712784, 0.0019135604, -0.0091480985, -3.87782E-4, 0.0017899475, -0.008762814, -0.01971111, -0.002893438, -0.06130428] +sib[9][4][8] = [0.0, -0.0017478155, -0.029629342, 0.0058086934, -4.3411588E-4, 0.0022711253, 0.007849641, -0.01592761, 5.395991E-4, -0.004375567, -0.008748124] +sib[9][4][9] = [-0.058906656, -0.084766835, -0.15067577, -0.12638798, -0.16388203, -0.10997212, -0.11743048, -0.12279012, -0.09396083, -0.1259885, -0.039157894] +sib[9][5][5] = [-0.058906656, -0.079861574, -0.14918488, -0.1252369, -0.17847608, -0.10997212, -0.15543042, -0.12795919, -0.09396083, -0.13384646, -0.096234635] +sib[9][5][6] = [-0.0020982404, -0.0024187758, 0.04089164, 0.0016454, -1.848424E-4, -2.4944128E-11, -1.9046036E-4, -0.0075192237, -0.0012453651, 0.002521164, -0.046716478] +sib[9][5][7] = [0.0033699158, -0.0021318349, 0.034823276, -2.0767644E-4, -0.017338365, -3.87782E-4, 0.0036544318, -0.01277848, -0.01971111, -0.002893438, -0.060595863] +sib[9][5][8] = [-0.0018001135, -0.0017478155, -0.02844011, 0.008361049, 0.0012216937, 1.5195471E-4, 0.015772633, -0.010470614, -0.001196497, -0.0064024087, -0.008748124] +sib[9][5][9] = [-0.058906656, -0.079861574, -0.14918488, -0.1252369, -0.17847608, -0.10997212, -0.15543042, -0.12795919, -0.09396083, -0.13384646, -0.096234635] +sib[9][6][6] = [-0.24552456, -0.15129414] +sib[9][6][7] = [0.006215946, -0.0027184573] +sib[9][6][8] = [-0.023212386, 0.0010730807] +sib[9][6][9] = [-0.24552456, -0.15129414] +sib[9][7][7] = [-0.062582, -0.07252283, -0.15046915, -0.12517364, -0.081251726, -0.09594374, -0.12587339, -0.09161502, -0.09625019, -0.12978898, -0.06474607] +sib[9][7][8] = [0.0, -0.0017478155, -0.022458764, 0.0058086934, 0.021875191, 0.00120843, 0.010813163, -0.0064338804, -0.0069222776, 0.0, -0.009914654] +sib[9][7][9] = [-0.062582, -0.07252283, -0.15046915, -0.12517364, -0.081251726, -0.09594374, -0.12587339, -0.09161502, -0.09625019, -0.12978898, -0.06474607] +sib[9][8][8] = [-0.020221319, -0.036588803, -0.04983248, -0.15051144, -0.09741203, -0.1296102] +sib[9][8][9] = [-0.020221319, -0.036588803, -0.04983248, -0.15051144, -0.09741203, -0.1296102] +sib[9][10][9] = [0.058185466, 0.18593371, 0.013361546, 0.05250779, -0.15585752, -0.09314026, -0.024650116] +sib[9][10][10] = [0.058185466, 0.18593371, 0.013361546, 0.05250779, -0.15585752, -0.09314026, -0.024650116] +sib[9][11][9] = [0.010377872, 0.11967139, 0.13280055, 0.058676593, -0.046707705, -0.072339505, -0.08746066, -0.06420231, -0.029372318, -0.047733497, -0.12351745] +sib[9][11][10] = [0.13447289, 0.040904917, 0.18432452, -0.04691888, -0.031945646, -0.021555042, -0.01900445, -0.0034406362, -0.0014785305, 2.4921317E-11, -0.03767125] +sib[9][11][11] = [0.010377872, 0.11967139, 0.13280055, 0.058676593, -0.046707705, -0.072339505, -0.08746066, -0.06420231, -0.029372318, -0.047733497, -0.12351745] +sib[9][12][9] = [-0.009237043, 0.10760212, 0.1590618, 0.048727725, -0.061758842, -0.044845812, -0.110580385, -0.100357965, -0.026026024, -0.043628313, -0.11817151] +sib[9][12][10] = [0.09776962, 0.029575646, 0.07672849, -0.03404893, -0.021614298, -0.01804599, -0.025152503, -0.0131380055, -0.0014785305, 2.4921317E-11, -0.03556287] +sib[9][12][11] = [0.25697288, -0.088507816, -0.009320511, -0.032928392, -0.11276226, -0.057192735, -0.063904464, -0.063531876, -0.0032337965, -0.011226524, -0.028146785] +sib[9][12][12] = [-0.009237043, 0.10760212, 0.1590618, 0.048727725, -0.061758842, -0.044845812, -0.110580385, -0.100357965, -0.026026024, -0.043628313, -0.11817151] +sib[9][13][9] = [0.013612992, 0.14035055, 0.13526626, 0.06744026, -0.09034954, -0.0437278, -0.09363104, -0.108480155, -0.034587223, -0.058207784, -0.11672297] +sib[9][13][10] = [0.07917629, 0.034733385, 0.08110547, -0.022749638, -0.020091861, -0.0162169, -0.035234727, -0.017345145, 0.0, 2.4921317E-11, -0.03598744] +sib[9][13][11] = [0.2788935, -0.066845745, 0.022597812, -0.039993078, -0.12892209, -0.05503321, -0.06420136, -0.05915559, -0.0032337965, -0.014401756, -0.03739518] +sib[9][13][12] = [0.18689674, -0.057967238, -0.11454363, 0.031081818, -0.07772294, -0.035723086, -0.034426462, -0.08544957, -0.0071663177, -0.018500524, -0.059725706] +sib[9][13][13] = [0.013612992, 0.14035055, 0.13526626, 0.06744026, -0.09034954, -0.0437278, -0.09363104, -0.108480155, -0.034587223, -0.058207784, -0.11672297] +sib[9][14][9] = [-0.25209263, 0.1463825, 0.10087137, 0.20545979, -0.13530877, -0.057546876, 0.11127153, 0.18861237] +sib[9][14][10] = [-0.050928675, 0.11547458, -0.015944967, -0.037532754, -0.0047936477, -0.0023863493, 0.07104642, -0.018621963] +sib[9][14][11] = [0.00563729, 0.09164208, 0.028529447, -0.066264495, -0.007344978, -0.006927175, 0.15567993, -0.008766629] +sib[9][14][12] = [0.008060956, 0.013999755, 0.054548122, -0.058907047, 0.0070343534, -0.00649131, 0.13926981, -0.007074901] +sib[9][14][13] = [-0.019813104, -0.0053684125, 0.06431517, -0.060711406, 0.0015342542, -0.005749071, 0.14366095, -0.0071544526] +sib[9][14][14] = [-0.25209263, 0.1463825, 0.10087137, 0.20545979, -0.13530877, -0.057546876, 0.11127153, 0.18861237] +sib[10][0][0] = [-0.059043508] +sib[10][0][1] = [0.025374867] +sib[10][0][2] = [-0.010792654] +sib[10][0][3] = [-0.017562985] +sib[10][0][4] = [-0.018177532] +sib[10][0][5] = [-0.022483138] +sib[10][0][6] = [0.0017099967] +sib[10][0][7] = [-0.0060652886] +sib[10][0][8] = [0.030930744] +sib[10][0][9] = [-0.010792654] +sib[10][0][10] = [-0.059043508] +sib[10][1][1] = [-0.05920863, -0.090162024, -0.102852575, -0.14439504] +sib[10][1][2] = [0.04903557, -0.018948799, -0.0060798614, 0.0] +sib[10][1][3] = [0.18755428, 0.01895392, -0.013009057, 0.0] +sib[10][1][4] = [0.19139335, 0.01121319, -0.007386175, -0.0022962305] +sib[10][1][5] = [0.21125697, 0.020400032, -0.011000266, 0.0] +sib[10][1][6] = [0.053369354, -0.015731946, 0.015331525, 0.0034863725] +sib[10][1][7] = [0.054491006, -0.026815884, -0.0060798614, -7.323949E-4] +sib[10][1][8] = [0.089037456, 0.019426785, 0.0, -0.005944387] +sib[10][1][9] = [0.0468777, -0.00752901, -0.0060798614, 0.0] +sib[10][1][10] = [-0.05920863, -0.090162024, -0.102852575, -0.14439504] +sib[10][2][2] = [-0.048039384, -0.033936597, -0.1076843, -0.08561048, -0.18102275, -0.063882194, -0.27944726, -0.06961856] +sib[10][2][3] = [-0.03545773, -4.3242677E-11, 5.80196E-4, 2.0403232E-4, 0.0133339325, -0.0051465426, -0.13283041, -7.2852474E-11] +sib[10][2][4] = [-0.028865915, -4.3242677E-11, -0.005907449, 2.0403232E-4, 0.008808636, 0.016942471, -0.13296017, -7.2852474E-11] +sib[10][2][5] = [-0.022971857, -4.3242677E-11, 5.80196E-4, 2.0403232E-4, 0.015180563, 0.008977336, -0.15586855, 0.0013089313] +sib[10][2][6] = [-0.008296368, -0.002669402, 0.0014807231, -0.0024187758, 0.021646274, -0.0021272162, 0.079501994, 6.259845E-4] +sib[10][2][7] = [-0.014046128, 0.0, 0.0019135604, -0.004179495, 0.043879174, 0.0041841725, -0.024367616, -0.00114457] +sib[10][2][8] = [-0.016525857, -0.0025111497, 0.015022312, -9.820932E-4, 0.037353337, 0.022290064, 0.030802153, -8.340767E-4] +sib[10][2][9] = [-0.023818199, -1.0399219E-10, -2.977391E-11, -0.0010456814, -0.0041673095, -0.039385617, -0.0727223, -7.2852474E-11] +sib[10][2][10] = [-0.048039384, -0.033936597, -0.1076843, -0.08561048, -0.18102275, -0.063882194, -0.27944726, -0.06961856] +sib[10][3][3] = [-0.09960871, -0.030261248, -0.12651338, -0.11362336, -0.13168085, -0.11934658, -0.15076126, -0.085356615] +sib[10][3][4] = [0.0024345233, -2.3429569E-11, -0.0013048707, 2.040324E-4, 0.03006259, -0.02197733, -0.19214498, 0.0017916001] +sib[10][3][5] = [0.014920399, -2.3429569E-11, 5.80196E-4, 2.040324E-4, 0.023750644, -0.003252635, -0.21613938, 0.0031005316] +sib[10][3][6] = [-0.005530912, 0.0018903521, 9.3412434E-4, -0.0046117287, 0.043484725, -0.0021272162, 0.1461553, 0.0034863725] +sib[10][3][7] = [-0.0071511366, 0.0, 0.0019135604, -0.004179495, 0.020130098, -0.009061545, 0.03431515, 6.470303E-4] +sib[10][3][8] = [-0.022738421, -0.0025111497, 0.011617387, -0.0032574702, 0.023299767, 0.0019173237, 0.045053303, -8.340767E-4] +sib[10][3][9] = [-0.015549341, -4.3242677E-11, -2.977391E-11, -0.0010456813, -0.0017319783, -0.038781445, -0.08130009, 0.0032380675] +sib[10][3][10] = [-0.09960871, -0.030261248, -0.12651338, -0.11362336, -0.13168085, -0.11934658, -0.15076126, -0.085356615] +sib[10][4][4] = [-0.10956604, -0.030261248, -0.11622335, -0.11362336, -0.12741564, -0.12487447, -0.17254554, -0.085356615] +sib[10][4][5] = [0.008328579, -2.3429569E-11, 5.80196E-4, 2.040324E-4, 0.037682906, -0.02596104, -0.21185596, 0.0031005316] +sib[10][4][6] = [-0.005530912, 0.0018903521, 9.3412434E-4, -0.0024187758, 0.043484725, -0.0021272162, 0.15845388, 0.0034863725] +sib[10][4][7] = [-0.0071511366, 0.0, 0.0019135604, -0.004179495, 0.024606647, -0.0065435837, 0.025490979, 6.470303E-4] +sib[10][4][8] = [-0.022738421, -0.0025111497, 0.011617387, -0.0032574702, 0.028762808, 0.0019173237, 0.036042124, 0.0012850938] +sib[10][4][9] = [-0.015549341, -4.3242677E-11, -2.977391E-11, -0.0010456813, 0.0027445666, -0.038781445, -0.09012426, 0.0032380675] +sib[10][4][10] = [-0.10956604, -0.030261248, -0.11622335, -0.11362336, -0.12741564, -0.12487447, -0.17254554, -0.085356615] +sib[10][5][5] = [-0.11473512, -0.030261248, -0.11507228, -0.108718105, -0.12592475, -0.13946849, -0.19167395, -0.085356615] +sib[10][5][6] = [-0.005530912, 0.0018903521, -4.5597902E-4, -0.0024187758, 0.0433622, -0.0021272162, 0.13301979, 0.0034863725] +sib[10][5][7] = [-0.011166802, 0.0, -2.0767644E-4, -0.0031775166, 0.022302076, -0.014733851, 0.027197832, 6.470303E-4] +sib[10][5][8] = [-0.013207361, -0.004311263, 0.014169742, -0.0032574702, 0.03137211, 0.005228941, 0.008087682, -8.340767E-4] +sib[10][5][9] = [-0.019565009, -4.3242677E-11, -2.977391E-11, -0.0010456813, -0.0020602378, -0.044453755, -0.086815685, 0.0032380675] +sib[10][5][10] = [-0.11473512, -0.030261248, -0.11507228, -0.108718105, -0.12592475, -0.13946849, -0.19167395, -0.085356615] +sib[10][6][6] = [-0.10306311, -0.2031597] +sib[10][6][7] = [-0.004742817, -0.006305254] +sib[10][6][8] = [6.8480964E-5, 0.024987387] +sib[10][6][9] = [-0.0020921042, -0.014598351] +sib[10][6][10] = [-0.10306311, -0.2031597] +sib[10][7][7] = [-0.07839093, -0.033936597, -0.11500903, -0.101379365, -0.12720901, -0.04224415, -0.2632762, -0.07132824] +sib[10][7][8] = [-0.024684515, -0.0025111497, 0.011617387, -9.820932E-4, 0.027987499, 0.02499726, 0.04452046, -8.340767E-4] +sib[10][7][9] = [-0.031356703, -4.3242677E-11, -2.977391E-11, -0.0010456813, -0.019378543, -0.029830173, -0.0730696, -8.799264E-11] +sib[10][7][10] = [-0.07839093, -0.033936597, -0.11500903, -0.101379365, -0.12720901, -0.04224415, -0.2632762, -0.07132824] +sib[10][8][8] = [-0.061185136, -0.018472185, -0.10816938, -0.128322] +sib[10][8][9] = [-2.1848828E-5, -0.0061198915, -0.003867016, 0.0] +sib[10][8][10] = [-0.061185136, -0.018472185, -0.10816938, -0.128322] +sib[10][9][9] = [-0.071560964, -0.030261248, -0.0720657, -0.08686474, -0.093842424, -0.19551773, -0.24368197, -0.07979041] +sib[10][9][10] = [-0.071560964, -0.030261248, -0.0720657, -0.08686474, -0.093842424, -0.19551773, -0.24368197, -0.07979041] +sib[10][11][10] = [-0.051991284, -0.06937934, -0.016163576, 0.053064074, 0.08693847, 0.019920709, -0.13684247, -0.1479983] +sib[10][11][11] = [-0.051991284, -0.06937934, -0.016163576, 0.053064074, 0.08693847, 0.019920709, -0.13684247, -0.1479983] +sib[10][12][10] = [-0.08531261, -0.06413493, -0.05977267, -0.022204375, 0.051638376, -0.03699434, -0.17177294, -0.1723037] +sib[10][12][11] = [-0.06677956, 0.068897344, -0.041090466, -0.043190118, -0.10512746, -0.08707124, -0.060287543, -0.04228424] +sib[10][12][12] = [-0.08531261, -0.06413493, -0.05977267, -0.022204375, 0.051638376, -0.03699434, -0.17177294, -0.1723037] +sib[10][13][10] = [-0.09343482, -0.0412849, -0.041060112, 0.010544043, 0.027842823, -0.06558503, -0.17883311, -0.17118572] +sib[10][13][11] = [-0.049473174, 0.08055082, -0.038259365, -0.026170572, -0.08088517, -0.097375445, -0.08329418, -0.04012471] +sib[10][13][12] = [-0.06825196, 0.03314009, -0.027902417, -0.024682438, -0.1125624, -0.0713303, -0.09034211, -0.032421686] +sib[10][13][13] = [-0.09343482, -0.0412849, -0.041060112, 0.010544043, 0.027842823, -0.06558503, -0.17883311, -0.17118572] +sib[10][14][10] = [-0.29800513, 0.06716653, 0.030734247, 0.052991964] +sib[10][14][11] = [-0.09484864, 0.0031243088, -0.005557349, -0.06585641] +sib[10][14][12] = [-0.06504598, -0.006278834, -0.0043337257, -0.022472793] +sib[10][14][13] = [-0.090015024, -0.005038573, 0.0016201909, -0.03029346] +sib[10][14][14] = [-0.29800513, 0.06716653, 0.030734247, 0.052991964] +sib[11][0][0] = [-0.007372096] +sib[11][0][1] = [-0.0117301885] +sib[11][0][2] = [1.7489446E-4] +sib[11][0][3] = [-0.00123771] +sib[11][0][4] = [-0.003271157] +sib[11][0][5] = [-0.005359205] +sib[11][0][6] = [-0.002019499] +sib[11][0][7] = [0.010771036] +sib[11][0][8] = [-0.029056469] +sib[11][0][9] = [-0.023738708] +sib[11][0][10] = [0.0030166223] +sib[11][0][11] = [-0.007372096] +sib[11][1][1] = [0.0018578265, -0.054558165, -0.0604494, -0.17884487, -0.08183588, -0.20679036] +sib[11][1][2] = [0.056975745, 0.005668442, -0.018948799, 0.001544904, -0.004425691, -0.0042697564] +sib[11][1][3] = [0.20085223, 0.005524833, 0.018373724, -0.002252739, -0.011354887, -0.00299346] +sib[11][1][4] = [0.20327237, 0.006723519, 0.012518062, -0.0045489697, -0.008851382, -0.0039780317] +sib[11][1][5] = [0.22535354, 0.006723519, 0.019819837, -0.002252739, -0.008851382, -0.007155695] +sib[11][1][6] = [0.052056644, 0.0, -0.013630568, -7.422609E-11, 0.015331525, -0.011876351] +sib[11][1][7] = [0.068299964, 0.005668442, -0.026815884, -0.002252739, -0.006077345, -0.0076014055] +sib[11][1][8] = [0.027525611, -0.0019323565, 0.016894437, -0.006166786, 0.0011550465, -0.018592926] +sib[11][1][9] = [0.018857269, 0.0015575043, 8.552619E-4, 0.0014732641, -0.007938184, -0.0059139905] +sib[11][1][10] = [0.039753977, -5.9690885E-4, -0.017307745, -0.014496746, -0.024867129, -0.0062500164] +sib[11][1][11] = [0.0018578265, -0.054558165, -0.0604494, -0.17884487, -0.08183588, -0.20679036] +sib[11][2][2] = [-0.06727515, -0.039880756, -0.101249136, -0.07231011, -0.10864645, -0.101244085, -0.048028372, -0.06371725, -0.08343171, -0.11429499, -0.039146423] +sib[11][2][3] = [0.0, 0.0055248337, 0.030621234, 0.0, -4.26305E-4, -0.002252739, -0.006648346, -0.03606269, -0.00916679, -0.0052283416, -0.08814137] +sib[11][2][4] = [0.0, 0.006723519, 0.020687636, -0.004602578, 0.024846062, -0.002252739, -0.005755012, -0.029470876, -0.011759123, -0.0016539845, -0.09687942] +sib[11][2][5] = [0.0, 0.006723519, 0.029277127, 0.0, 0.015930286, -9.438076E-4, -0.0074910205, -0.023576815, -0.014191874, 0.0, -0.095246136] +sib[11][2][6] = [-0.002669402, -0.0024187758, 0.020333562, 0.0035821022, -1.848424E-4, -0.002860388, -3.935173E-12, -0.0014916197, 0.0012843906, -7.149898E-4, -0.036261305] +sib[11][2][7] = [0.0012985886, 0.0035897053, 0.05768812, 0.0019135604, 0.0015796584, -0.002664914, -9.805523E-4, -0.015657805, -0.014526446, -0.005065879, -0.08768711] +sib[11][2][8] = [-1.6855371E-11, -0.0019323565, -0.02441728, 0.012489964, 0.021536471, 1.5195471E-4, 0.0021693285, -0.030377915, -0.010483608, 0.0, -0.014740901] +sib[11][2][9] = [-6.074951E-11, 0.006723519, -0.013831265, 0.0, -0.038916126, 0.001473264, -0.018928917, -0.025520945, -0.015844021, 0.0013519778, -0.087466374] +sib[11][2][10] = [-0.02627029, 0.0013403501, -0.031924155, 0.011060903, -0.017858764, -0.017715154, -0.04361326, -0.0058456473, 0.0043095946, 4.7011906E-4, -0.039736304] +sib[11][2][11] = [-0.06727515, -0.039880756, -0.101249136, -0.07231011, -0.10864645, -0.101244085, -0.048028372, -0.06371725, -0.08343171, -0.11429499, -0.039146423] +sib[11][3][3] = [-0.0635998, -0.06789364, -0.051907234, -0.0911392, -0.16411085, -0.11698214, -0.109528445, -0.11528658, -0.09058821, -0.121063985, -0.029547555] +sib[11][3][4] = [1.9813108E-11, 0.006723519, 0.04593098, 0.0, -0.014073737, -4.6113878E-4, 0.0010844865, 0.001829566, -0.011759122, -0.0016539845, -0.07282009] +sib[11][3][5] = [1.9813108E-11, 0.006723519, 0.0378472, 0.0, 0.0037003167, 8.477926E-4, 2.4181162E-4, 0.014315439, -0.016784206, -0.0035770652, -0.07781593] +sib[11][3][6] = [0.0018903521, -0.0046117287, 0.042172015, 0.0030355034, -1.848424E-4, -2.4944128E-11, 0.0012310293, 0.0012738362, 3.9025443E-5, -7.149898E-4, -0.050878808] +sib[11][3][7] = [0.0012985886, 0.0035897053, 0.03393905, 0.0019135604, -0.0116660595, -8.7331375E-4, 0.0036544318, -0.008762814, -0.01971111, -0.002893438, -0.069536015] +sib[11][3][8] = [-1.6855371E-11, -0.004207734, -0.038470846, 0.009085039, 0.001163731, 1.5195471E-4, 0.015866034, -0.03659048, -0.0046252366, -0.0051903967, -0.013245526] +sib[11][3][9] = [0.0, 0.006723519, -0.013421126, 0.0, -0.03831196, 0.0047113313, -0.01512234, -0.017252088, -0.021028686, 0.0013519778, -0.055630326] +sib[11][3][10] = [-0.034883592, -0.009302226, -0.03815173, -0.012217581, -0.021105701, -0.012877224, -0.05123791, -0.017816678, 0.015131095, 0.002381786, -0.030664032] +sib[11][3][11] = [-0.0635998, -0.06789364, -0.051907234, -0.0911392, -0.16411085, -0.11698214, -0.109528445, -0.11528658, -0.09058821, -0.121063985, -0.029547555] +sib[11][4][4] = [-0.0635998, -0.06789364, -0.047642045, -0.08084916, -0.16963877, -0.11698214, -0.11096842, -0.12524389, -0.09058821, -0.11320603, -0.060814228] +sib[11][4][5] = [1.9813108E-11, 0.006723519, 0.055768855, 0.0, -0.01900809, 8.477926E-4, 0.0033390545, 0.0077236216, -0.015870908, 0.0, -0.07484178] +sib[11][4][6] = [0.0018903521, -0.0024187758, 0.042172015, 0.0030355034, -1.848424E-4, -2.4944128E-11, 0.0012310293, 0.0012738362, 3.9025443E-5, 0.001626185, -0.050878808] +sib[11][4][7] = [0.0012985886, 0.0035897053, 0.038415592, 0.0019135604, -0.0091480985, -8.7331375E-4, 0.0017899475, -0.008762814, -0.01971111, -0.002893438, -0.06687723] +sib[11][4][8] = [-1.6855371E-11, -0.004207734, -0.033007804, 0.009085039, 0.001163731, 0.0022711253, 0.015866034, -0.03659048, -0.0046252366, -0.004375567, -0.013245526] +sib[11][4][9] = [0.0, 0.006723519, -0.008944579, 0.0, -0.03831196, 0.0047113313, -0.013525365, -0.017252088, -0.021028686, 0.0013519778, -0.055630326] +sib[11][4][10] = [-0.034883592, -0.0032188678, -0.03815173, -0.012217581, -0.021105701, -0.012877224, -0.0531008, -0.017816678, 0.015079191, 4.7011906E-4, -0.036729466] +sib[11][4][11] = [-0.0635998, -0.06789364, -0.047642045, -0.08084916, -0.16963877, -0.11698214, -0.11096842, -0.12524389, -0.09058821, -0.11320603, -0.060814228] +sib[11][5][5] = [-0.0635998, -0.06298838, -0.046151154, -0.079698086, -0.18423282, -0.11698214, -0.14896835, -0.13041297, -0.09058821, -0.121063985, -0.11789097] +sib[11][5][6] = [0.0018903521, -0.0024187758, 0.042049482, 0.0016454, -1.848424E-4, -2.4944128E-11, 0.0012310293, -0.005530912, 3.9025443E-5, 0.0012224071, -0.046716478] +sib[11][5][7] = [0.0012985886, 0.004591684, 0.036111027, -2.0767644E-4, -0.017338365, -8.7331375E-4, 0.0036544318, -0.01277848, -0.01971111, -0.002893438, -0.06616881] +sib[11][5][8] = [-0.0018001135, -0.004207734, -0.030398501, 0.011637394, 0.004475348, 1.5195471E-4, 0.028451074, -0.02705942, -0.0063613327, -0.0064024087, -0.013245526] +sib[11][5][9] = [0.0, 0.006723519, -0.008013514, 0.0, -0.043984264, 0.0047113313, -0.013525365, -0.021267753, -0.021028686, 0.0013519778, -0.05226312] +sib[11][5][10] = [-0.034883592, -0.009302226, -0.04404863, -0.014543477, -0.019002203, -0.012877224, -0.04815198, -0.017816678, 0.015079191, -0.0015919966, -0.030664032] +sib[11][5][11] = [-0.0635998, -0.06298838, -0.046151154, -0.079698086, -0.18423282, -0.11698214, -0.14896835, -0.13041297, -0.09058821, -0.121063985, -0.11789097] +sib[11][6][6] = [-0.14249083, -0.14342183] +sib[11][6][7] = [0.007503695, -0.0027184573] +sib[11][6][8] = [-0.034999825, 0.0010730807] +sib[11][6][9] = [-0.03129263, -0.0020921042] +sib[11][6][10] = [3.224857E-4, 0.0] +sib[11][6][11] = [-0.14249083, -0.14342183] +sib[11][7][7] = [-0.06727515, -0.055649634, -0.047435418, -0.07963485, -0.08700845, -0.10295376, -0.119411334, -0.094068795, -0.092877574, -0.1170065, -0.08640239] +sib[11][7][8] = [-1.6855371E-11, -0.0019323565, -0.024417153, 0.009085039, 0.024243666, 0.00120843, 0.01756433, -0.023022685, -0.012087113, 0.0, -0.015578586] +sib[11][7][9] = [-0.0026487454, 0.006723519, -0.020125525, 0.0, -0.029360685, 0.001473264, -0.013388636, -0.03305945, -0.021028686, 0.0013519778, -0.042516686] +sib[11][7][10] = [-0.032058157, -0.0060932855, -0.059400894, 0.008735007, -0.0151623245, -0.017715154, -0.042483654, -0.0071071237, 0.021815212, 4.7011906E-4, -0.025759025] +sib[11][7][11] = [-0.06727515, -0.055649634, -0.047435418, -0.07963485, -0.08700845, -0.10295376, -0.119411334, -0.094068795, -0.092877574, -0.1170065, -0.08640239] +sib[11][8][8] = [-1.1867844E-4, -0.037765916, 0.011240432, -0.1627718, -0.0871527, -0.15140302] +sib[11][8][9] = [-0.021379888, 0.0043555237, 0.0034294096, 0.0014732641, -0.003512493, -0.004899758] +sib[11][8][10] = [0.009230928, 2.5665667E-4, -0.021784212, -0.014496746, -0.019540738, -0.019266201] +sib[11][8][11] = [-1.1867844E-4, -0.037765916, 0.011240432, -0.1627718, -0.0871527, -0.15140302] +sib[11][9][9] = [-0.0635998, -0.04113502, -0.1097605, -0.04355563, -0.21587107, -0.11415113, -0.11848409, -0.10366356, -0.093662694, -0.11480201, -0.057269786] +sib[11][9][10] = [-0.029095728, -0.012495045, -0.017741643, -0.01743728, -0.026143162, -0.014496746, -0.03998524, -0.01460873, 0.014109103, -0.001682732, -0.028564185] +sib[11][9][11] = [-0.0635998, -0.04113502, -0.1097605, -0.04355563, -0.21587107, -0.11415113, -0.11848409, -0.10366356, -0.093662694, -0.11480201, -0.057269786] +sib[11][10][10] = [0.016185801, 0.050528016, -0.10191259, -0.054291252, -0.0918271, -0.12861837, -0.086728685] +sib[11][10][11] = [0.016185801, 0.050528016, -0.10191259, -0.054291252, -0.0918271, -0.12861837, -0.086728685] +sib[11][12][11] = [-0.076583765, 0.1000884, 0.12034315, -0.030947931, -0.05483166, -0.1419828, -0.1134968, -0.111516334, -0.020103946, -0.050117638, -0.1205918] +sib[11][12][12] = [-0.076583765, 0.1000884, 0.12034315, -0.030947931, -0.05483166, -0.1419828, -0.1134968, -0.111516334, -0.020103946, -0.050117638, -0.1205918] +sib[11][13][11] = [-0.052365176, 0.08163097, 0.09329194, -0.02060718, -0.12897095, -0.17311844, -0.107881375, -0.14937714, -0.028665144, -0.072424866, -0.122559726] +sib[11][13][12] = [0.16537258, -0.049174204, -0.051370934, 0.027549144, -0.06851439, -0.04088717, -0.036889978, -0.055520758, -0.009449812, -0.019570488, -0.04900318] +sib[11][13][13] = [-0.052365176, 0.08163097, 0.09329194, -0.02060718, -0.12897095, -0.17311844, -0.107881375, -0.14937714, -0.028665144, -0.072424866, -0.122559726] +sib[11][14][11] = [-0.26430094, 0.104408175, 0.012823897, 0.14674018, -0.20307294, -0.051624805, 0.045293376, 0.059221696] +sib[11][14][12] = [-0.0047579724, 0.07093569, 0.059366412, -0.053807728, 0.0059649916, -0.008774804, 0.10658951, -0.0122389775] +sib[11][14][13] = [0.009189667, 0.022168335, 0.060918458, -0.06332501, 0.0021388289, -0.008032566, 0.099790245, -0.012318529] +sib[11][14][14] = [-0.26430094, 0.104408175, 0.012823897, 0.14674018, -0.20307294, -0.051624805, 0.045293376, 0.059221696] +sib[12][0][0] = [-0.04580705] +sib[12][0][1] = [0.015740372] +sib[12][0][2] = [-0.021155044] +sib[12][0][3] = [-0.004543713] +sib[12][0][4] = [-0.0065771597] +sib[12][0][5] = [-0.007920606] +sib[12][0][6] = [-0.004363601] +sib[12][0][7] = [1.2192794E-4] +sib[12][0][8] = [0.0038776542] +sib[12][0][9] = [-0.023993544] +sib[12][0][10] = [4.330249E-4] +sib[12][0][11] = [-0.04719632] +sib[12][0][12] = [-0.04580705] +sib[12][1][1] = [-0.07542464, -0.10021604, -0.092530094, -0.17725241, -0.09794984, -0.20757535] +sib[12][1][2] = [0.035645798, -0.0010550767, -0.018948799, 0.002736577, -0.004425691, -0.0017134671] +sib[12][1][3] = [0.19754623, -0.0011986856, 0.018373724, -0.0010610658, -0.011354887, -0.0014217427] +sib[12][1][4] = [0.19996637, 0.0, 0.012518062, -0.0033572963, -0.008851382, -0.0014217427] +sib[12][1][5] = [0.22279212, 0.0, 0.020722475, -0.0010610658, -0.0100392075, -0.0045994055] +sib[12][1][6] = [0.049712542, 0.0, -0.013630568, 0.0055411807, 0.015331525, -0.011876351] +sib[12][1][7] = [0.057650845, -0.0010550767, -0.026815884, -0.0010610658, -0.006077345, -0.0020284676] +sib[12][1][8] = [0.060459733, -0.006991262, 0.019426785, -0.006166786, 0.0, -0.019727793] +sib[12][1][9] = [0.018602433, -0.0051660147, 8.552619E-4, 0.0026649372, -0.01014044, -0.0033577022] +sib[12][1][10] = [0.06866573, -0.015890565, -0.02826008, -0.014496746, -0.02010237, -0.0080662165] +sib[12][1][11] = [0.041683365, 0.0, -0.007685021, 0.002736577, 0.005665609, -0.0026584687] +sib[12][1][12] = [-0.07542464, -0.10021604, -0.092530094, -0.17725241, -0.09794984, -0.20757535] +sib[12][2][2] = [-0.070287675, -0.085538626, -0.17853162, -0.10439081, -0.10050729, -0.099651605, -0.05405833, -0.0690917, -0.09129654, -0.1265269, -0.039931387] +sib[12][2][3] = [0.0, -0.0011986856, 0.027315225, 0.0, -0.0019767783, -0.0010610659, -0.006648346, -0.032485265, -0.008552926, -0.0052283416, -0.08656964] +sib[12][2][4] = [0.0, 6.7673783E-12, 0.01738163, -0.004602578, 0.019014481, -0.0010610659, -0.005755012, -0.02589345, -0.011145257, -0.0016539845, -0.09432313] +sib[12][2][5] = [0.0025123034, 6.7673783E-12, 0.026715722, 9.0263964E-4, 0.014379813, 2.4786548E-4, -0.0074910205, -0.019999389, -0.011145257, 0.0, -0.09268984] +sib[12][2][6] = [-0.002669402, -0.0024187758, 0.017989459, 0.0035821022, -1.848424E-4, 0.0026807927, -3.935173E-12, -0.005793827, 6.4053755E-11, -0.0033409346, -0.036261305] +sib[12][2][7] = [0.0, -0.0031338136, 0.047039017, 0.0019135604, 2.9184856E-5, -0.0014732409, -9.805523E-4, -0.015657805, -0.01168974, -0.005065879, -0.08211417] +sib[12][2][8] = [0.0, -0.006991262, 0.008516844, 0.015022312, 0.021536471, 1.5195471E-4, 0.0021693285, -0.0281388, -0.0126926545, 0.0, -0.015875768] +sib[12][2][9] = [-6.074951E-11, 9.7394426E-11, -0.014086101, 0.0, -0.040466603, 0.0026649372, -0.014669583, -0.018978458, -0.015576752, 0.0, -0.084910095] +sib[12][2][10] = [-0.033808216, -0.013953305, -0.037765395, 1.08569344E-4, -0.016909549, -0.017715154, -0.04482095, -0.009717198, 0.021477621, 4.7011906E-4, -0.042719033] +sib[12][2][11] = [-0.0022680296, 6.7673783E-12, -0.06998387, 0.0, -0.05669004, 0.002736577, -0.014201675, -0.028364774, -0.008958689, 0.0, -0.09505878] +sib[12][2][12] = [-0.070287675, -0.085538626, -0.17853162, -0.10439081, -0.10050729, -0.099651605, -0.05405833, -0.0690917, -0.09129654, -0.1265269, -0.039931387] +sib[12][3][3] = [-0.066612326, -0.11355151, -0.1291897, -0.123219885, -0.15597168, -0.11538966, -0.1155584, -0.12066103, -0.09845304, -0.1332959, -0.030332519] +sib[12][3][4] = [1.9813108E-11, 1.0014907E-10, 0.04262498, 0.0, -0.019905316, 7.305343E-4, 0.0010844865, 0.00540699, -0.011145257, -0.0016539845, -0.0702638] +sib[12][3][5] = [0.0025123034, 1.0014907E-10, 0.035285797, 9.0263964E-4, 0.0021498424, 0.0020394656, 2.4181162E-4, 0.017892864, -0.013737589, -0.0035770652, -0.07525965] +sib[12][3][6] = [0.0018903521, -0.0046117287, 0.039827913, 0.0030355034, -1.848424E-4, 0.0055411807, 0.0012310293, -0.0030283711, -0.001245365, -0.0033409346, -0.050878808] +sib[12][3][7] = [0.0, -0.0031338136, 0.023289941, 0.0019135604, -0.013216533, 3.1835935E-4, 0.0036544318, -0.008762814, -0.016874405, -0.002893438, -0.06396307] +sib[12][3][8] = [0.0, -0.009266639, -0.005536722, 0.011617387, 0.001163731, 1.5195471E-4, 0.015866034, -0.034351368, -0.0068342835, -0.0051903967, -0.014380393] +sib[12][3][9] = [0.0, 1.9077612E-10, -0.013675962, 0.0, -0.039862435, 0.0059030047, -0.010863007, -0.0107096005, -0.020761417, 0.0, -0.05307404] +sib[12][3][10] = [-0.042421516, -0.02459588, -0.043992974, -0.023169914, -0.020156486, -0.012877224, -0.0524456, -0.021688228, 0.032299124, 0.002381786, -0.033646762] +sib[12][3][11] = [-0.0022680296, 1.0014907E-10, -0.0678906, 2.176337E-12, -0.055077005, 0.0050104028, -0.008798122, -0.014618345, -0.014143352, -5.0404254E-11, -0.06282607] +sib[12][3][12] = [-0.066612326, -0.11355151, -0.1291897, -0.123219885, -0.15597168, -0.11538966, -0.1155584, -0.12066103, -0.09845304, -0.1332959, -0.030332519] +sib[12][4][4] = [-0.066612326, -0.11355151, -0.12492451, -0.112929866, -0.16149957, -0.11538966, -0.116998374, -0.13061833, -0.09845304, -0.12543795, -0.061599184] +sib[12][4][5] = [0.0025123034, 1.0014907E-10, 0.053207457, 9.0263964E-4, -0.020558564, 0.0020394656, 0.0033390545, 0.011301048, -0.012824291, 0.0, -0.07228549] +sib[12][4][6] = [0.0018903521, -0.0024187758, 0.039827913, 0.0030355034, -1.848424E-4, 0.0055411807, 0.0012310293, -0.0030283711, -0.001245365, -9.997599E-4, -0.050878808] +sib[12][4][7] = [0.0, -0.0031338136, 0.027766487, 0.0019135604, -0.010698572, 3.1835935E-4, 0.0017899475, -0.008762814, -0.016874405, -0.002893438, -0.06130428] +sib[12][4][8] = [0.0, -0.009266639, -7.368182E-5, 0.011617387, 0.001163731, 0.0022711253, 0.015866034, -0.034351368, -0.0068342835, -0.004375567, -0.014380393] +sib[12][4][9] = [0.0, 1.9077612E-10, -0.009199415, 0.0, -0.039862435, 0.0059030047, -0.009266032, -0.0107096005, -0.020761417, 0.0, -0.05307404] +sib[12][4][10] = [-0.042421516, -0.018512525, -0.043992974, -0.023169914, -0.020156486, -0.012877224, -0.05430849, -0.021688228, 0.032247216, 4.7011906E-4, -0.039712198] +sib[12][4][11] = [-0.0022680296, 1.0014907E-10, -0.06341405, 2.176337E-12, -0.055077005, 0.0050104028, -0.008798122, -0.014618345, -0.014143352, 0.0, -0.06282607] +sib[12][4][12] = [-0.066612326, -0.11355151, -0.12492451, -0.112929866, -0.16149957, -0.11538966, -0.116998374, -0.13061833, -0.09845304, -0.12543795, -0.061599184] +sib[12][5][5] = [-0.066612326, -0.10864625, -0.12343362, -0.11177879, -0.17609362, -0.11538966, -0.1549983, -0.13578743, -0.09845304, -0.1332959, -0.11867592] +sib[12][5][6] = [0.0018903521, -0.0024187758, 0.03970538, 0.0016454, -1.848424E-4, 0.0055411807, 0.0012310293, -0.00983312, -0.0012453651, -0.0014035378, -0.046716478] +sib[12][5][7] = [0.0, -0.002131835, 0.02546192, -2.0767644E-4, -0.018888839, 3.1835935E-4, 0.0036544318, -0.01277848, -0.016874405, -0.002893438, -0.060595863] +sib[12][5][8] = [-0.0018001135, -0.009266639, 0.0025356233, 0.014169742, 0.004475348, 1.5195471E-4, 0.028451074, -0.024820304, -0.00857038, -0.0064024087, -0.014380393] +sib[12][5][9] = [0.0, 1.9077612E-10, -0.00826835, 0.0, -0.04553474, 0.0059030047, -0.009266032, -0.014725266, -0.020761417, 0.0, -0.04970683] +sib[12][5][10] = [-0.042421516, -0.02459588, -0.049889874, -0.02549581, -0.018052988, -0.012877224, -0.049359668, -0.021688228, 0.032247216, -0.0015919966, -0.033646762] +sib[12][5][11] = [-0.0022680296, 1.0014907E-10, -0.0758889, 2.176337E-12, -0.06074931, 0.0050104028, -0.008798122, -0.01863401, -0.014143352, 0.0, -0.059458848] +sib[12][5][12] = [-0.066612326, -0.10864625, -0.12343362, -0.11177879, -0.17609362, -0.11538966, -0.1549983, -0.13578743, -0.09845304, -0.1332959, -0.11867592] +sib[12][6][6] = [-0.21977329, -0.14708066] +sib[12][6][7] = [-0.0031454123, -0.0027184573] +sib[12][6][8] = [-0.0020657047, 0.0010730807] +sib[12][6][9] = [-0.031547464, -0.0020921042] +sib[12][6][10] = [-0.0027999387, 0.0] +sib[12][6][11] = [-0.038398787, -0.0020921042] +sib[12][6][12] = [-0.21977329, -0.14708066] +sib[12][7][7] = [-0.070287675, -0.10130751, -0.12471788, -0.11171554, -0.07886928, -0.10136128, -0.12544128, -0.09944325, -0.1007424, -0.12923843, -0.087187335] +sib[12][7][8] = [0.0, -0.006991262, 0.008516971, 0.011617387, 0.024243666, 0.00120843, 0.01756433, -0.020783573, -0.01429616, 0.0, -0.016713453] +sib[12][7][9] = [-0.0026487454, 1.9077612E-10, -0.020380361, 0.0, -0.030911159, 0.0026649372, -0.009129303, -0.026516961, -0.020761417, 0.0, -0.0399604] +sib[12][7][10] = [-0.03959608, -0.02138694, -0.065242134, -0.002217327, -0.014213109, -0.017715154, -0.04369135, -0.0109786745, 0.038983237, 4.7011906E-4, -0.028741756] +sib[12][7][11] = [-0.0022680296, 1.0014907E-10, -0.07734001, 0.0, -0.07001731, 0.002736577, -0.008661393, -0.030647058, -0.014143352, 0.0, -0.04481265] +sib[12][7][12] = [-0.070287675, -0.10130751, -0.12471788, -0.11171554, -0.07886928, -0.10136128, -0.12544128, -0.09944325, -0.1007424, -0.12923843, -0.087187335] +sib[12][8][8] = [-0.07740114, -0.08342379, -0.020840252, -0.16117935, -0.10326665, -0.152188] +sib[12][8][9] = [-0.021634724, -0.0023679952, 0.0034294096, 0.0026649372, -0.00571475, -0.0023434684] +sib[12][8][10] = [0.021962434, -0.015037, -0.03273655, -0.014496746, -0.014775982, -0.021082401] +sib[12][8][11] = [0.0036583208, 0.0, -0.004733991, 0.002736577, 0.007878454, -0.0025892365] +sib[12][8][12] = [-0.07740114, -0.08342379, -0.020840252, -0.16117935, -0.10326665, -0.152188] +sib[12][9][9] = [-0.066612326, -0.086792886, -0.18704298, -0.07563632, -0.2077319, -0.112558655, -0.124514036, -0.10903801, -0.10152752, -0.12703392, -0.05805475] +sib[12][9][10] = [-0.03663365, -0.0277887, -0.023582887, -0.028389614, -0.025193946, -0.014496746, -0.04119293, -0.01848028, 0.031277128, -0.001682732, -0.032713443] +sib[12][9][11] = [-0.0022680296, -0.0029060307, -0.017712247, 0.0, -0.078158826, 0.0032188026, -0.009429961, -0.013295274, -0.008958689, 0.0, -0.05821557] +sib[12][9][12] = [-0.066612326, -0.086792886, -0.18704298, -0.07563632, -0.2077319, -0.112558655, -0.124514036, -0.10903801, -0.10152752, -0.12703392, -0.05805475] +sib[12][10][10] = [-0.043696746, 0.017504156, -0.108026385, -0.097694285, -0.084334195, -0.13396113, -0.08974121] +sib[12][10][11] = [-0.046185188, 0.0040996876, 0.002736577, -0.021457953, 0.014619722, -0.044528395, -0.0011340148] +sib[12][10][12] = [-0.043696746, 0.017504156, -0.108026385, -0.097694285, -0.084334195, -0.13396113, -0.08974121] +sib[12][11][11] = [-0.05562356, -0.056120094, -0.066163555, -0.02676644, -0.22905226, -0.097308025, -0.078940906, -0.114429586, -0.084635064, -0.12053168, -0.0600905] +sib[12][11][12] = [-0.05562356, -0.056120094, -0.066163555, -0.02676644, -0.22905226, -0.097308025, -0.078940906, -0.114429586, -0.084635064, -0.12053168, -0.0600905] +sib[12][13][12] = [-0.0634601, 0.121503256, 0.0905497, 0.03245703, -0.10737981, -0.11269342, -0.08528571, -0.09541298, -0.025729481, -0.062081803, -0.118391044] +sib[12][13][13] = [-0.0634601, 0.121503256, 0.0905497, 0.03245703, -0.10737981, -0.11269342, -0.08528571, -0.09541298, -0.025729481, -0.062081803, -0.118391044] +sib[12][14][12] = [-0.2922967, 0.09841027, 0.05751633, 0.13540663, -0.19225334, -0.04868915, 0.03556701, 0.08739309] +sib[12][14][13] = [-0.048450273, 0.04265136, 0.018110206, -0.08852613, 0.007167372, -0.0075320313, 0.051161762, -0.011463221] +sib[12][14][14] = [-0.2922967, 0.09841027, 0.05751633, 0.13540663, -0.19225334, -0.04868915, 0.03556701, 0.08739309] +sib[13][0][0] = [-0.002577262] +sib[13][0][1] = [0.020385752] +sib[13][0][2] = [-0.003985493] +sib[13][0][3] = [0.01262584] +sib[13][0][4] = [0.010592394] +sib[13][0][5] = [0.009248944] +sib[13][0][6] = [-0.0020194987] +sib[13][0][7] = [0.01729148] +sib[13][0][8] = [0.0043466156] +sib[13][0][9] = [-0.015604364] +sib[13][0][10] = [0.002398637] +sib[13][0][11] = [-0.029153213] +sib[13][0][12] = [-0.019152384] +sib[13][0][13] = [-0.002577262] +sib[13][1][1] = [-0.0035322793, -0.056849692, -0.09389981, -0.17096713, -0.101472065, -0.19047466] +sib[13][1][2] = [0.05281534, -0.0010550767, -0.013799829, 0.002736577, -0.004425691, -0.0017134671] +sib[13][1][3] = [0.21471578, -0.0011986856, 0.018373724, -0.0010610658, -0.011354887, -0.0014217427] +sib[13][1][4] = [0.21713592, -0.0019344183, 0.012518062, -0.0033572963, -0.008851382, -0.0014217427] +sib[13][1][5] = [0.23996167, 0.0, 0.019819837, -0.0010610658, -0.0100392075, -0.0045994055] +sib[13][1][6] = [0.052056644, 0.003251902, -0.008108399, 0.0055411807, 0.015331525, -0.011876351] +sib[13][1][7] = [0.07482041, -0.0010550767, -0.026815884, -0.0010610658, -0.006077345, -0.0020284676] +sib[13][1][8] = [0.060928695, -0.003495631, 0.021835841, -0.008007782, 0.0, -0.020987764] +sib[13][1][9] = [0.026991613, -0.0051660147, -0.0010380638, -0.0010610658, -0.01014044, -0.001910735] +sib[13][1][10] = [0.07063134, -0.028143845, -0.024677392, -0.014496746, -0.02144141, -0.0075631905] +sib[13][1][11] = [0.08260161, 0.0, -0.014365587, 0.002736577, 0.005665609, -0.0026584687] +sib[13][1][12] = [0.14335619, 0.0, 0.01850898, -0.0010610658, -0.009589838, -0.0020284676] +sib[13][1][13] = [-0.0035322793, -0.056849692, -0.09389981, -0.17096713, -0.101472065, -0.19047466] +sib[13][2][2] = [-0.072285526, -0.042172294, -0.10663923, -0.10576053, -0.10048705, -0.09336635, -0.05242186, -0.061479766, -0.08743159, -0.1241359, -0.022830697] +sib[13][2][3] = [0.0, -0.0011986856, 0.044484794, 0.0, -0.0016183588, -0.0010610659, -0.006648346, -0.032485265, -0.008552926, -0.0035743571, -0.08656964] +sib[13][2][4] = [0.0, -0.0019344183, 0.034551185, -0.004602578, 0.0193729, -0.0010610659, -0.005755012, -0.02589345, -0.011145257, 0.0, -0.09432313] +sib[13][2][5] = [0.0, 6.7673783E-12, 0.043885276, 1.4115933E-10, 0.014738231, 2.4786548E-4, -0.0074910205, -0.019999389, -0.011145257, 0.0, -0.09268984] +sib[13][2][6] = [-0.0032348863, 8.3312625E-4, 0.020333562, 0.0091042705, -0.003436745, 0.0026807927, -3.935173E-12, -0.009389484, 6.4053755E-11, 0.0014698936, -0.036261305] +sib[13][2][7] = [-0.004088621, -0.0031338136, 0.06420857, 0.0019135604, 3.8760272E-4, -0.0014732409, -9.805523E-4, -0.0167017, -0.01168974, -0.005065879, -0.08211417] +sib[13][2][8] = [0.0, -0.003495631, 0.008985808, 0.017431367, 0.021536471, -0.001689041, 0.0021693285, -0.029445289, -0.01081989, 0.0, -0.017135741] +sib[13][2][9] = [-0.0014469671, 9.7394426E-11, -0.0056969193, -0.0018933251, -0.036109902, -0.0010610659, -0.019288724, -0.011951676, -0.0139819635, 0.00495839, -0.08346313] +sib[13][2][10] = [-0.033808216, -0.026206587, -0.035799783, 0.0036912595, -0.016909549, -0.017715154, -0.04581771, -0.010560656, 0.01765244, -0.0037438683, -0.042216007] +sib[13][2][11] = [-0.0022680296, 6.7673783E-12, -0.056587223, -0.0021093525, -0.058760542, 0.002736577, -0.016456243, -0.03425883, -0.008958689, 0.0, -0.09669206] +sib[13][2][12] = [-6.074951E-11, 6.7673783E-12, 0.027755236, 0.0, 0.0019314961, -2.0271495E-4, -0.019553484, -0.015146317, -0.016874405, -0.002893438, -0.10847643] +sib[13][2][13] = [-0.072285526, -0.042172294, -0.10663923, -0.10576053, -0.10048705, -0.09336635, -0.05242186, -0.061479766, -0.08743159, -0.1241359, -0.022830697] +sib[13][3][3] = [-0.06861018, -0.070185155, -0.05729734, -0.1245896, -0.15595144, -0.1091044, -0.11392195, -0.11304908, -0.094588086, -0.1309049, -0.013231826] +sib[13][3][4] = [1.9813108E-11, -0.0019344182, 0.05979453, 0.0, -0.019546898, 7.305343E-4, 0.0010844865, 0.00540699, -0.011145257, 0.0, -0.0702638] +sib[13][3][5] = [1.9813108E-11, 1.0014907E-10, 0.052455343, 1.4115933E-10, 0.002508262, 0.0020394656, 2.4181162E-4, 0.017892864, -0.013737589, -0.0035770652, -0.07525965] +sib[13][3][6] = [0.0013248676, -0.0013598264, 0.042172015, 0.008557672, -0.003436745, 0.0055411807, 0.0012310293, -0.006624028, -0.001245365, 0.0014698936, -0.050878808] +sib[13][3][7] = [-0.004088621, -0.0031338136, 0.040459488, 0.0019135604, -0.012858113, 3.1835935E-4, 0.0036544318, -0.009806709, -0.016874405, -0.002893438, -0.06396307] +sib[13][3][8] = [0.0, -0.005771008, -0.005067763, 0.014026441, 0.001163731, -0.001689041, 0.015866034, -0.035657857, -0.0049615186, -0.0051903967, -0.015640365] +sib[13][3][9] = [-0.001446967, 1.9077612E-10, -0.0052867793, -0.0018933251, -0.035505734, 0.0021770014, -0.015482147, -0.0036828225, -0.019166628, 0.00495839, -0.051627077] +sib[13][3][10] = [-0.042421516, -0.036849163, -0.04202736, -0.019587224, -0.020156486, -0.012877224, -0.053442363, -0.022531686, 0.028473942, -0.0018322013, -0.033143736] +sib[13][3][11] = [-0.0022680296, 1.0014907E-10, -0.054493945, -0.0021093525, -0.05714751, 0.0050104028, -0.01105269, -0.020512402, -0.014143352, -5.0404254E-11, -0.06539341] +sib[13][3][12] = [0.0, 1.0014907E-10, 0.003179974, 0.0, -0.013400121, 0.0030353526, -0.014149932, -0.006800373, -0.024651403, -0.0064705033, -0.06526662] +sib[13][3][13] = [-0.06861018, -0.070185155, -0.05729734, -0.1245896, -0.15595144, -0.1091044, -0.11392195, -0.11304908, -0.094588086, -0.1309049, -0.013231826] +sib[13][4][4] = [-0.06861018, -0.070185155, -0.053032152, -0.11429958, -0.16147934, -0.1091044, -0.11536192, -0.12300641, -0.094588086, -0.12304694, -0.044498492] +sib[13][4][5] = [1.9813108E-11, 1.0014907E-10, 0.070377015, 1.4115933E-10, -0.020200146, 0.0020394656, 0.0033390545, 0.011301048, -0.012824291, 0.0, -0.07228549] +sib[13][4][6] = [0.0013248676, 8.3312625E-4, 0.042172015, 0.008557672, -0.003436745, 0.0055411807, 0.0012310293, -0.006624028, -0.001245365, 0.0038110686, -0.050878808] +sib[13][4][7] = [-0.004088621, -0.0031338136, 0.044936035, 0.0019135604, -0.010340153, 3.1835935E-4, 0.0017899475, -0.009806709, -0.016874405, -0.002893438, -0.06130428] +sib[13][4][8] = [0.0, -0.005771008, 3.9528054E-4, 0.014026441, 0.001163731, 4.3012958E-4, 0.015866034, -0.035657857, -0.0049615186, -0.004375567, -0.015640365] +sib[13][4][9] = [-0.001446967, 1.9077612E-10, -8.1023434E-4, -0.0018933251, -0.035505734, 0.0021770014, -0.013885173, -0.0036828225, -0.019166628, 0.00495839, -0.051627077] +sib[13][4][10] = [-0.042421516, -0.030765804, -0.04202736, -0.019587224, -0.020156486, -0.012877224, -0.05530525, -0.022531686, 0.028422037, -0.0037438683, -0.03920917] +sib[13][4][11] = [-0.0022680296, 1.0014907E-10, -0.050017398, -0.0021093525, -0.05714751, 0.0050104028, -0.01105269, -0.020512402, -0.014143352, 0.0, -0.06539341] +sib[13][4][12] = [0.0, 1.0014907E-10, 0.0076565193, 0.0, -0.013400121, 0.0030353526, -0.014149932, -0.006800373, -0.024651403, -0.0064705033, -0.06671913] +sib[13][4][13] = [-0.06861018, -0.070185155, -0.053032152, -0.11429958, -0.16147934, -0.1091044, -0.11536192, -0.12300641, -0.094588086, -0.12304694, -0.044498492] +sib[13][5][5] = [-0.06861018, -0.06527991, -0.051541254, -0.1131485, -0.17607339, -0.1091044, -0.15336186, -0.12817547, -0.094588086, -0.1309049, -0.101575226] +sib[13][5][6] = [0.0013248676, 8.3312625E-4, 0.042049482, 0.0071675684, -0.003436745, 0.0055411807, 0.0012310293, -0.006624028, -0.0012453651, 0.0034072904, -0.046716478] +sib[13][5][7] = [-0.004088621, -0.002131835, 0.042631466, -2.0767644E-4, -0.01853042, 3.1835935E-4, 0.0036544318, -0.013822373, -0.016874405, -0.002893438, -0.060595863] +sib[13][5][8] = [-0.0018001135, -0.005771008, 0.0030045856, 0.016578797, 0.004475348, -0.001689041, 0.028451074, -0.026126793, -0.0066976147, -0.0064024087, -0.015640365] +sib[13][5][9] = [-0.001446967, 1.9077612E-10, 1.2083119E-4, -0.0018933251, -0.04117804, 0.0021770014, -0.013885173, -0.007698486, -0.019166628, 0.00495839, -0.04825986] +sib[13][5][10] = [-0.042421516, -0.036849163, -0.047924258, -0.021913122, -0.018052988, -0.012877224, -0.05035643, -0.022531686, 0.028422037, -0.005805984, -0.033143736] +sib[13][5][11] = [-0.0022680296, 1.0014907E-10, -0.062492248, -0.0021093525, -0.062819816, 0.0050104028, -0.01105269, -0.02452807, -0.014143352, 0.0, -0.06202619] +sib[13][5][12] = [0.0, 1.0014907E-10, 0.0055244016, 0.0, -0.024744734, 0.0030353526, -0.01105269, -0.012537207, -0.024651403, -0.0064705033, -0.058532193] +sib[13][5][13] = [-0.06861018, -0.06527991, -0.051541254, -0.1131485, -0.17607339, -0.1091044, -0.15336186, -0.12817547, -0.094588086, -0.1309049, -0.101575226] +sib[13][6][6] = [-0.14788091, -0.13914165] +sib[13][6][7] = [0.01402414, -0.0027184573] +sib[13][6][8] = [-0.0015967395, 0.0010730807] +sib[13][6][9] = [-0.023158282, -0.0028650467] +sib[13][6][10] = [-8.3432463E-4, -0.001063084] +sib[13][6][11] = [-0.024725007, -0.0020921042] +sib[13][6][12] = [-0.021378122, -0.004742817] +sib[13][6][13] = [-0.14788091, -0.13914165] +sib[13][7][7] = [-0.072285526, -0.057941165, -0.052825525, -0.113085255, -0.07884905, -0.095076025, -0.12380484, -0.091831304, -0.09687745, -0.1268474, -0.07008666] +sib[13][7][8] = [0.0, -0.003495631, 0.008985933, 0.014026441, 0.024243666, -6.325657E-4, 0.01756433, -0.02209006, -0.012423395, 0.0, -0.017973425] +sib[13][7][9] = [-0.0040957127, 1.9077612E-10, -0.01199118, -0.0018933251, -0.026554458, -0.0010610659, -0.013748444, -0.01949018, -0.019166628, 0.00495839, -0.03851343] +sib[13][7][10] = [-0.03959608, -0.03364022, -0.06327652, 0.0013653624, -0.014213109, -0.017715154, -0.04468811, -0.011822132, 0.035158057, -0.0037438683, -0.028238727] +sib[13][7][11] = [-0.005686443, 1.0014907E-10, -0.06616777, -0.0021093525, -0.07552003, 0.002736577, -0.010915961, -0.036541115, -0.014143352, 0.0, -0.046445943] +sib[13][7][12] = [0.0, 1.0014907E-10, -0.00955368, 0.0, -0.016105724, -2.0271495E-4, -0.010915961, -0.020442957, -0.024565026, -0.002893438, -0.048007853] +sib[13][7][13] = [-0.072285526, -0.057941165, -0.052825525, -0.113085255, -0.07884905, -0.095076025, -0.12380484, -0.091831304, -0.09687745, -0.1268474, -0.07008666] +sib[13][8][8] = [-0.005508784, -0.040057447, -0.022209981, -0.1548941, -0.10678887, -0.13508728] +sib[13][8][9] = [-0.013245542, -0.0023679952, 0.0015360848, -0.0010610658, -0.00571475, -8.9650124E-4] +sib[13][8][10] = [0.023928046, -0.02729028, -0.029153861, -0.014496746, -0.016115021, -0.020579375] +sib[13][8][11] = [0.032626066, 0.0, -0.020258695, 0.002736577, 0.007878454, -0.0025892365] +sib[13][8][12] = [0.039524592, 0.0, -0.0035681347, -0.0010610658, -0.0051641474, -0.0016442349] +sib[13][8][13] = [-0.005508784, -0.040057447, -0.022209981, -0.1548941, -0.10678887, -0.13508728] +sib[13][9][9] = [-0.06861018, -0.04342656, -0.115150586, -0.077006035, -0.20771168, -0.1062734, -0.12287759, -0.10142606, -0.09766257, -0.124642916, -0.04095405] +sib[13][9][10] = [-0.03663365, -0.040041983, -0.028703984, -0.027952358, -0.025193946, -0.014496746, -0.04218969, -0.019323738, 0.02745195, -0.005896719, -0.032210417] +sib[13][9][11] = [-0.0022680296, -0.0029060307, -0.0020718835, -0.0021093525, -0.0809479, 0.0032188026, -0.011684529, -0.021435667, -0.008958689, 0.0, -0.060782917] +sib[13][9][12] = [0.0, 1.0014907E-10, 0.055907477, -6.03846E-4, -0.03287065, 0.0012437524, -0.008434844, -0.0068599246, -0.016874405, -0.002893438, -0.06725843] +sib[13][9][13] = [-0.06861018, -0.04342656, -0.115150586, -0.077006035, -0.20771168, -0.1062734, -0.12287759, -0.10142606, -0.09766257, -0.124642916, -0.04095405] +sib[13][10][10] = [0.028195608, 0.0608705, -0.10174113, -0.09906401, -0.08908608, -0.11686043, -0.091739066] +sib[13][10][11] = [-0.04299295, 0.0040996876, 0.002736577, -0.023567306, 0.012840907, -0.044528395, -0.0011340148] +sib[13][10][12] = [-0.026183745, -0.0160307, -0.0010610658, -0.012499432, -0.03429284, -0.04231813, 0.0] +sib[13][10][13] = [0.028195608, 0.0608705, -0.10174113, -0.09906401, -0.08908608, -0.11686043, -0.091739066] +sib[13][11][11] = [-0.05762142, -0.055615727, -0.08320304, -0.04724413, -0.20891012, -0.100216396, -0.044462293, -0.09639623, -0.08077011, -0.12666674, -0.010189604] +sib[13][11][12] = [-6.074951E-11, 6.7673783E-12, 0.05310737, 0.0, -0.033819657, 0.0032234818, -0.014521137, -0.018921316, -0.014282072, -0.002893438, -0.0884412] +sib[13][11][13] = [-0.05762142, -0.055615727, -0.08320304, -0.04724413, -0.20891012, -0.100216396, -0.044462293, -0.09639623, -0.08077011, -0.12666674, -0.010189604] +sib[13][12][12] = [-0.07050711, -0.03828383, 0.069364466, -0.075059645, -0.17359406, -0.09716197, -0.16338599, -0.09590105, -0.10625561, -0.11810293, -0.06465854] +sib[13][12][13] = [-0.07050711, -0.03828383, 0.069364466, -0.075059645, -0.17359406, -0.09716197, -0.16338599, -0.09590105, -0.10625561, -0.11810293, -0.06465854] +sib[13][14][13] = [-0.1659211, 0.09340296, -0.03943733, 0.11446824, -0.14515284, -0.054249067, 0.0129298, 0.13796264] +sib[13][14][14] = [-0.1659211, 0.09340296, -0.03943733, 0.11446824, -0.14515284, -0.054249067, 0.0129298, 0.13796264] +sib[14][0][0] = [-0.26117626] +sib[14][0][1] = [-0.017622618] +sib[14][0][2] = [0.019042788] +sib[14][0][3] = [0.034817807] +sib[14][0][4] = [0.03715513] +sib[14][0][5] = [0.07564745] +sib[14][0][6] = [0.08416031] +sib[14][0][7] = [0.026421864] +sib[14][0][8] = [-0.017768983] +sib[14][0][9] = [0.014121643] +sib[14][0][10] = [0.01895562] +sib[14][0][11] = [0.0027374383] +sib[14][0][12] = [0.0014118538] +sib[14][0][13] = [-3.5631564E-4] +sib[14][0][14] = [-0.26117626] +sib[14][1][1] = [-0.17582023, -0.33003432] +sib[14][1][2] = [-0.07298219, 0.08017363] +sib[14][1][3] = [-0.044595454, 0.24184157] +sib[14][1][4] = [-0.044595454, 0.24863249] +sib[14][1][5] = [-0.041108444, 0.31129408] +sib[14][1][6] = [-0.055057786, 0.13690108] +sib[14][1][7] = [-0.06542454, 0.08888463] +sib[14][1][8] = [-0.084223025, 0.037911303] +sib[14][1][9] = [-0.05191639, 0.06165144] +sib[14][1][10] = [-0.0041375235, 0.085146636] +sib[14][1][11] = [-0.057649482, 0.11942609] +sib[14][1][12] = [-0.06268189, 0.19172941] +sib[14][1][13] = [-0.045791917, 0.1670861] +sib[14][1][14] = [-0.17582023, -0.33003432] +sib[14][2][2] = [-0.41633445, -0.3325971, -0.0025394333, -0.103917405, -0.06280382, -0.0606209, -0.06155448, -0.095411405] +sib[14][2][3] = [0.047140226, -0.17357776, -0.12736656, -0.004048791, 0.0013672397, 0.002382424, -0.003422699, -0.03606269] +sib[14][2][4] = [0.05560075, -0.17370752, -0.1452667, 0.014709412, -0.0032665338, 0.002382424, -0.008025277, -0.031911064] +sib[14][2][5] = [0.10477061, -0.19139603, -0.13696872, 0.010074741, -0.0019576023, 0.002382424, -0.0019034167, -0.022194244] +sib[14][2][6] = [0.10651337, 0.2530592, -0.0836741, 0.0, 0.005372986, -0.0024187758, 0.0035821022, -0.009184968] +sib[14][2][7] = [0.06782577, -0.059634767, -0.1532801, -8.1344135E-4, -3.3273446E-4, 0.002462812, 0.001316632, -0.024671111] +sib[14][2][8] = [-0.011346394, 0.013796195, -0.08232155, 0.021307971, -5.158714E-11, 0.0, 0.017145041, -0.02539291] +sib[14][2][9] = [0.018515907, -0.10642335, -0.14123863, -0.042538613, -0.0017092963, 0.002382424, -5.969284E-4, -0.025626231] +sib[14][2][10] = [-0.014229231, -0.088017225, -0.03879034, -0.016909549, -0.0055060163, -0.004306007, 0.0022200055, -0.008164193] +sib[14][2][11] = [-0.030209748, -0.103037186, -0.15945292, -0.05590263, -7.144998E-5, 0.0013483575, -0.0021162108, -0.03075184] +sib[14][2][12] = [0.038159836, -0.10674603, -0.17853299, 0.0066432473, -0.0038468728, 0.002382424, -0.0021162108, -0.02476873] +sib[14][2][13] = [0.041038126, -0.10771326, -0.15810171, -0.0029368624, 7.86901E-4, 0.00244402, 0.0050375573, -0.018874675] +sib[14][2][14] = [-0.41633445, -0.3325971, -0.0025394333, -0.103917405, -0.06280382, -0.0606209, -0.06155448, -0.095411405] +sib[14][3][3] = [-0.36699247, -0.2039112, 0.0070594307, -0.15938173, -0.07854187, -0.088633776, -0.08038355, -0.14698069] +sib[14][3][4] = [0.06682073, -0.23289232, -0.11106071, -0.02197733, 0.00315884, 0.002382424, -0.003422699, 0.001829566] +sib[14][3][5] = [0.11334067, -0.25166684, -0.11953853, -0.0021552278, -1.660022E-4, 0.002382424, -0.0019034167, 0.01569801] +sib[14][3][6] = [0.12835182, 0.31971252, -0.098291606, 0.0, 0.008233374, -0.0046117287, 0.0030355034, -0.0064195115] +sib[14][3][7] = [0.044076692, -9.520084E-4, -0.13512899, -0.014059158, 0.0014588658, 0.002462812, 0.001316632, -0.017776119] +sib[14][3][8] = [-0.02539996, 0.028047346, -0.08082617, 9.35231E-4, -5.158714E-11, -0.002275377, 0.013740117, -0.03160548] +sib[14][3][9] = [0.018926047, -0.11500114, -0.10940257, -0.041934446, 0.0015287712, 0.002382424, -5.969284E-4, -0.017357375] +sib[14][3][10] = [-0.020456813, -0.1725777, -0.02971807, -0.020156486, -6.6808646E-4, -0.014948583, -0.02105848, -0.020135224] +sib[14][3][11] = [-0.028116472, -0.08097203, -0.12815426, -0.054289598, 0.0022023758, 0.0013483576, -0.0021162108, -0.01700541] +sib[14][3][12] = [0.013584574, -0.11547441, -0.13625723, -0.008688369, -6.0880545E-4, 0.002382424, -0.0021162108, -0.016422788] +sib[14][3][13] = [0.016462866, -0.11570191, -0.11679992, -0.018268479, 0.0040249685, 0.00244402, 0.0050375573, -0.01052873] +sib[14][3][14] = [-0.36699247, -0.2039112, 0.0070594307, -0.15938173, -0.07854187, -0.088633776, -0.08038355, -0.14698069] +sib[14][4][4] = [-0.36272728, -0.2256955, -0.024207238, -0.16490962, -0.07854187, -0.088633776, -0.07009352, -0.156938] +sib[14][4][5] = [0.117238976, -0.24738343, -0.10641773, -0.022630576, 0.0044677714, 0.002382424, -0.0019034167, 0.011546385] +sib[14][4][6] = [0.12835182, 0.3320111, -0.098291606, 0.0, 0.008233374, -0.0024187758, 0.0030355034, -0.0064195115] +sib[14][4][7] = [0.04855324, -0.009776178, -0.1324702, -0.011541197, 0.0014588658, 0.002462812, 0.001316632, -0.017776119] +sib[14][4][8] = [-0.019936921, 0.019036163, -0.08082617, 9.35231E-4, 0.0021191705, -0.002275377, 0.013740117, -0.03160548] +sib[14][4][9] = [0.023402592, -0.123825304, -0.10940257, -0.041934446, 0.0015287712, 0.002382424, -5.969284E-4, -0.017357375] +sib[14][4][10] = [-0.020456813, -0.1725777, -0.035783507, -0.020156486, -6.6808646E-4, -0.008865225, -0.02105848, -0.020135224] +sib[14][4][11] = [-0.023639925, -0.08979619, -0.12815426, -0.054289598, 0.0022023758, 0.0013483576, -0.0021162108, -0.01700541] +sib[14][4][12] = [0.01806112, -0.12429859, -0.13770974, -0.008688369, -6.0880545E-4, 0.002382424, -0.0021162108, -0.016422788] +sib[14][4][13] = [0.020939412, -0.123445585, -0.11679992, -0.018268479, 0.0040249685, 0.00244402, 0.0050375573, -0.01052873] +sib[14][4][14] = [-0.36272728, -0.2256955, -0.024207238, -0.16490962, -0.07854187, -0.088633776, -0.07009352, -0.156938] +sib[14][5][5] = [-0.36123642, -0.24482392, -0.081283964, -0.17950368, -0.07854187, -0.08372852, -0.06894244, -0.16210708] +sib[14][5][6] = [0.11223895, 0.3020243, -0.09068653, 0.0, 0.008233374, -0.0024187758, 0.0016454, -0.0064195115] +sib[14][5][7] = [0.04624867, -0.008069332, -0.13176179, -0.019731464, 0.0014588658, 0.0034647905, -8.0460485E-4, -0.021791784] +sib[14][5][8] = [-0.017327616, -0.00891828, -0.08082617, 0.004246848, -5.158714E-11, -0.002275377, 0.016292471, -0.022074414] +sib[14][5][9] = [0.024333661, -0.122265466, -0.10603536, -0.04760675, 0.0015287712, 0.002382424, -5.969284E-4, -0.021373041] +sib[14][5][10] = [-0.026353706, -0.16696651, -0.02971807, -0.018052988, -6.6808646E-4, -0.014948583, -0.023384375, -0.020135224] +sib[14][5][11] = [-0.03611477, -0.10026051, -0.12478705, -0.0599619, 0.0022023758, 0.0013483576, -0.0021162108, -0.021021076] +sib[14][5][12] = [0.015929002, -0.13113727, -0.12952282, -0.02003298, -6.0880545E-4, 0.002382424, -0.0021162108, -0.022159623] +sib[14][5][13] = [0.018807292, -0.122472, -0.11006549, -0.029613093, 0.0040249685, 0.00244402, 0.0050375573, -0.016265566] +sib[14][5][14] = [-0.36123642, -0.24482392, -0.081283964, -0.17950368, -0.07854187, -0.08372852, -0.06894244, -0.16210708] +sib[14][6][6] = [-0.01986646, -0.4457749] +sib[14][6][7] = [0.04084371, 0.023154521] +sib[14][6][8] = [-0.06312829, -0.023712344] +sib[14][6][9] = [0.1304324, 0.006567724] +sib[14][6][10] = [0.056466203, 0.015722657] +sib[14][6][11] = [0.06034638, 0.0071656443] +sib[14][6][12] = [0.03023277, -0.005183216] +sib[14][6][13] = [0.044423435, -0.002582052] +sib[14][6][14] = [-0.01986646, -0.4457749] +sib[14][7][7] = [-0.36252066, -0.31642604, -0.049795393, -0.082279354, -0.0645135, -0.076389775, -0.068879195, -0.12576294] +sib[14][7][8] = [-0.009542683, 0.027514502, -0.07787864, 0.024015168, -5.158714E-11, 0.0, 0.013740117, -0.018037684] +sib[14][7][9] = [0.012221649, -0.108519375, -0.09628893, -0.03298317, -0.0017092963, 0.002382424, -5.969284E-4, -0.03316474] +sib[14][7][10] = [-0.041705973, -0.09222949, -0.024813062, -0.014213109, -0.0055060163, -0.011739643, -1.05890875E-4, -0.009425669] +sib[14][7][11] = [-0.039790306, -0.117010556, -0.1092068, -0.07266212, -7.144998E-5, 0.0013483576, -0.0021162108, -0.03303413] +sib[14][7][12] = [-0.0013734996, -0.15504168, -0.11806441, -0.014826199, -0.0038468728, 0.002382424, -0.0021162108, -0.030065373] +sib[14][7][13] = [0.0037292093, -0.14397092, -0.09954115, -0.020974083, 7.86901E-4, 0.00244402, 0.0050375573, -0.024171317] +sib[14][7][14] = [-0.36252066, -0.31642604, -0.049795393, -0.082279354, -0.0645135, -0.076389775, -0.068879195, -0.12576294] +sib[14][8][8] = [-0.12043289, -0.3320108] +sib[14][8][9] = [-0.049023703, 0.020810444] +sib[14][8][10] = [-0.017153706, 0.038443338] +sib[14][8][11] = [-0.05758025, 0.06945055] +sib[14][8][12] = [-0.062297665, 0.07594731] +sib[14][8][13] = [-0.045407683, 0.0632545] +sib[14][8][14] = [-0.12043289, -0.3320108] +sib[14][9][9] = [-0.42484578, -0.30829483, -0.020662794, -0.21114197, -0.07571086, -0.061875165, -0.03279999, -0.1353577] +sib[14][9][10] = [-0.0072616246, -0.10945691, -0.039056044, -0.025193946, -0.0022876072, -0.018141404, -0.023384375, -0.016927276] +sib[14][9][11] = [0.024305591, -0.067444876, -0.12354376, -0.07808998, 4.107759E-4, -0.0015576731, -0.0021162108, -0.017928675] +sib[14][9][12] = [0.068555795, -0.093527764, -0.13824904, -0.02887747, -0.0024004057, 0.002382424, -0.0027200566, -0.018728673] +sib[14][9][13] = [0.06919037, -0.082605064, -0.12528051, -0.034875646, 0.0022333683, 0.00244402, 0.0050375573, -0.010588281] +sib[14][9][14] = [-0.42484578, -0.30829483, -0.020662794, -0.21114197, -0.07571086, -0.061875165, -0.03279999, -0.1353577] +sib[14][10][10] = [-0.08593696, -0.30099216, -0.17435792, -0.05781908] +sib[14][10][11] = [-0.10663833, -9.831986E-4, -0.02013312, -7.1449904E-5] +sib[14][10][12] = [-0.104243465, -0.016535712, -0.06986312, -0.0047052237] +sib[14][10][13] = [-0.08735348, -0.008938649, -0.059024725, -7.1449904E-5] +sib[14][10][14] = [-0.08593696, -0.30099216, -0.17435792, -0.05781908] +sib[14][11][11] = [-0.39289823, -0.30791253, 0.010101652, -0.21234041, -0.06965387, -0.07406434, -0.0030380678, -0.13032787] +sib[14][11][12] = [0.04972389, -0.11358053, -0.14835113, -0.021637682, 0.004213098, 0.002382424, -0.0021162108, -0.028382119] +sib[14][11][13] = [0.058538865, -0.11691623, -0.15007612, -0.01597961, 0.004213098, -3.959747E-4, 0.0050375573, -0.019224772] +sib[14][11][14] = [-0.39289823, -0.30791253, 0.010101652, -0.21234041, -0.06965387, -0.07406434, -0.0030380678, -0.13032787] +sib[14][12][12] = [-0.32926255, -0.34232852, -0.011567077, -0.15690242, -0.07579308, -0.09959442, -0.049961574, -0.11941129] +sib[14][12][13] = [0.027948447, -0.13304974, -0.09411263, -0.03767293, 7.8690104E-4, 0.00244402, 0.0050375573, -0.019369822] +sib[14][12][14] = [-0.32926255, -0.34232852, -0.011567077, -0.15690242, -0.07579308, -0.09959442, -0.049961574, -0.11941129] +sib[14][13][13] = [-0.27716342, -0.29918027, 0.002273057, -0.17363767, -0.07579308, -0.09091581, -0.04491078, -0.12332719] +sib[14][13][14] = [-0.27716342, -0.29918027, 0.002273057, -0.17363767, -0.07579308, -0.09091581, -0.04491078, -0.12332719] +gra[0][1][0] = [-0.22818854] +gra[0][1][1] = [-0.22818854] +gra[0][1][2] = [-0.11684589] +gra[0][1][3] = [-0.07394948] +gra[0][1][4] = [-0.0680243] +gra[0][1][5] = [-0.05763626] +gra[0][1][6] = [0.041646246] +gra[0][1][7] = [-0.057812385] +gra[0][1][8] = [0.0034977961] +gra[0][1][9] = [-0.07727066] +gra[0][1][10] = [-0.055504914] +gra[0][1][11] = [-0.14296876] +gra[0][1][12] = [-0.12293938] +gra[0][1][13] = [-0.10813473] +gra[0][1][14] = [0.45705685] +gra[0][2][0] = [-0.15013406, -0.2426285] +gra[0][2][1] = [0.019528074, 0.0660074] +gra[0][2][2] = [-0.15013406, -0.2426285] +gra[0][2][3] = [-0.04805225, -0.10163534] +gra[0][2][4] = [-0.072765164, -0.11548856] +gra[0][2][5] = [-0.058554545, -0.11241687] +gra[0][2][6] = [0.019643955, -0.032943882] +gra[0][2][7] = [-0.06858881, -0.09112317] +gra[0][2][8] = [-0.04587385, -0.09906794] +gra[0][2][9] = [-0.08696036, -0.08442209] +gra[0][2][10] = [-0.06429993, -0.024919685] +gra[0][2][11] = [-0.12994505, -0.043445118] +gra[0][2][12] = [-0.14164223, -0.04568313] +gra[0][2][13] = [-0.099208415, -0.06146796] +gra[0][2][14] = [0.41737968, 0.14532717] +gra[0][3][0] = [-0.13910182, -0.2825055] +gra[0][3][1] = [0.028612794, 0.08540308] +gra[0][3][2] = [-0.046550658, -0.0182662] +gra[0][3][3] = [-0.13910182, -0.2825055] +gra[0][3][4] = [0.0108578075, -0.035993043] +gra[0][3][5] = [3.5551563E-4, -0.051619668] +gra[0][3][6] = [0.01169499, -0.048168648] +gra[0][3][7] = [-0.017285692, -0.09887939] +gra[0][3][8] = [-0.04997577, -0.14533053] +gra[0][3][9] = [-0.044813514, -0.06871706] +gra[0][3][10] = [-0.052825183, 0.04502643] +gra[0][3][11] = [-0.091644205, -0.039359495] +gra[0][3][12] = [-0.0813158, -0.079372145] +gra[0][3][13] = [-0.04325054, -0.08941097] +gra[0][3][14] = [0.43075097, 0.16887097] +gra[0][4][0] = [-0.13910182, -0.28454143] +gra[0][4][1] = [0.028612794, 0.08540308] +gra[0][4][2] = [-0.053501334, -0.022827461] +gra[0][4][3] = [0.01548511, 0.022885837] +gra[0][4][4] = [-0.13910182, -0.28454143] +gra[0][4][5] = [0.029627925, -0.03535446] +gra[0][4][6] = [0.01169499, -0.048168648] +gra[0][4][7] = [-0.017285692, -0.089105465] +gra[0][4][8] = [-0.04997577, -0.14246826] +gra[0][4][9] = [-0.044813514, -0.06973502] +gra[0][4][10] = [-0.052825183, 0.042236067] +gra[0][4][11] = [-0.091644205, -0.040377453] +gra[0][4][12] = [-0.0813158, -0.0803901] +gra[0][4][13] = [-0.04325054, -0.090428926] +gra[0][4][14] = [0.43075097, 0.16887097] +gra[0][5][0] = [-0.14515881, -0.29451418] +gra[0][5][1] = [0.028612794, 0.0703686] +gra[0][5][2] = [-0.055704843, -0.020307925] +gra[0][5][3] = [0.0072715217, 0.020844113] +gra[0][5][4] = [-5.109301E-4, 0.025405373] +gra[0][5][5] = [-0.14515881, -0.29451418] +gra[0][5][6] = [0.013943817, -0.036353186] +gra[0][5][7] = [-0.01461166, -0.08993692] +gra[0][5][8] = [-0.060220703, -0.10150701] +gra[0][5][9] = [-0.043248653, -0.05752173] +gra[0][5][10] = [-0.05493198, 0.042415746] +gra[0][5][11] = [-0.09857967, -0.030557191] +gra[0][5][12] = [-0.08693646, -0.07471453] +gra[0][5][13] = [-0.047174573, -0.076235354] +gra[0][5][14] = [0.44249806, 0.15094155] +gra[0][6][0] = [-0.20701182, -0.20022848, -0.104408376] +gra[0][6][1] = [0.14289244, 0.0283306, -0.029538298] +gra[0][6][2] = [-0.0082890075, 0.05742196, -0.011392591] +gra[0][6][3] = [0.0044608647, -0.029823117, -0.017902642] +gra[0][6][4] = [-0.020159526, -0.029823117, -0.017902642] +gra[0][6][5] = [0.029669786, -0.044923708, -0.017902642] +gra[0][6][6] = [-0.20701182, -0.20022848, -0.104408376] +gra[0][6][7] = [-0.10183145, -0.091028236, -0.04588911] +gra[0][6][8] = [0.032606296, 0.017808456, -0.008648319] +gra[0][6][9] = [-0.13632824, -0.07054741, -0.02793441] +gra[0][6][10] = [-0.059310794, -0.04506547, 0.009192239] +gra[0][6][11] = [-0.1909292, -0.092181034, -0.0437085] +gra[0][6][12] = [-0.16031356, -0.065739915, -0.03355049] +gra[0][6][13] = [-0.15541416, -0.027346965, -0.036728404] +gra[0][6][14] = [0.7396867, 0.27478725, 0.2738842] +gra[0][7][0] = [-0.1473084, -0.25213647] +gra[0][7][1] = [0.035285007, 0.058604628] +gra[0][7][2] = [-0.05160928, -0.0224412] +gra[0][7][3] = [0.020225829, -0.029645607] +gra[0][7][4] = [0.006433309, -0.029645607] +gra[0][7][5] = [0.034157895, -0.027836025] +gra[0][7][6] = [-0.02770169, 0.0031483166] +gra[0][7][7] = [-0.1473084, -0.25213647] +gra[0][7][8] = [-0.029250327, -0.083425164] +gra[0][7][9] = [-0.0536678, -0.10675399] +gra[0][7][10] = [-0.062462002, 0.027226757] +gra[0][7][11] = [-0.11521182, -0.06146239] +gra[0][7][12] = [-0.098107755, -0.08854464] +gra[0][7][13] = [-0.05266825, -0.092032686] +gra[0][7][14] = [0.4630408, 0.15594469] +gra[0][8][0] = [-0.2117028] +gra[0][8][1] = [0.017306514] +gra[0][8][2] = [-0.09911068] +gra[0][8][3] = [-0.020114591] +gra[0][8][4] = [-0.03958766] +gra[0][8][5] = [-0.0038710376] +gra[0][8][6] = [-0.06144519] +gra[0][8][7] = [-0.07898003] +gra[0][8][8] = [-0.2117028] +gra[0][8][9] = [-0.11180681] +gra[0][8][10] = [-0.05344535] +gra[0][8][11] = [-0.17514] +gra[0][8][12] = [-0.16525681] +gra[0][8][13] = [-0.15022904] +gra[0][8][14] = [0.5003734] +gra[0][9][0] = [-0.17324714, -0.21192437] +gra[0][9][1] = [0.026308253, 0.07592523] +gra[0][9][2] = [-0.062093064, -0.02629318] +gra[0][9][3] = [0.0027108872, -0.010167679] +gra[0][9][4] = [-0.011081627, -0.008946633] +gra[0][9][5] = [0.016642952, -0.004286417] +gra[0][9][6] = [-0.058611736, 0.0031483166] +gra[0][9][7] = [-0.07019833, -0.032258406] +gra[0][9][8] = [-0.020757651, 0.02516887] +gra[0][9][9] = [-0.17324714, -0.21192437] +gra[0][9][10] = [-0.03127932, 0.021869836] +gra[0][9][11] = [-0.14179832, -0.06737257] +gra[0][9][12] = [-0.12213887, -0.07869322] +gra[0][9][13] = [-0.08363266, -0.11601491] +gra[0][9][14] = [0.41314566, 0.14072108] +gra[0][10][0] = [-0.14749695] +gra[0][10][1] = [0.042411044] +gra[0][10][2] = [-0.0708016] +gra[0][10][3] = [0.012733186] +gra[0][10][4] = [-0.0067398907] +gra[0][10][5] = [0.0209847] +gra[0][10][6] = [-0.080536366] +gra[0][10][7] = [-0.06538718] +gra[0][10][8] = [-0.06640356] +gra[0][10][9] = [-0.029906988] +gra[0][10][10] = [-0.14749695] +gra[0][10][11] = [-0.11649244] +gra[0][10][12] = [-0.12730673] +gra[0][10][13] = [-0.11145951] +gra[0][10][14] = [0.3879149] +gra[0][11][0] = [-0.1370282, -0.23143397] +gra[0][11][1] = [0.0273618, 0.084600694] +gra[0][11][2] = [-0.063277826, -0.023195233] +gra[0][11][3] = [0.004298934, -0.032105718] +gra[0][11][4] = [-0.00949358, -0.032105718] +gra[0][11][5] = [0.018230999, -0.027445499] +gra[0][11][6] = [-0.06418139, 0.0031483166] +gra[0][11][7] = [-0.07162588, -0.03143182] +gra[0][11][8] = [-0.06400743, 0.048796967] +gra[0][11][9] = [-0.021573273, -0.020941049] +gra[0][11][10] = [0.020022688, -0.024484597] +gra[0][11][11] = [-0.1370282, -0.23143397] +gra[0][11][12] = [-0.13074017, -0.035075203] +gra[0][11][13] = [-0.11738783, -0.0598739] +gra[0][11][14] = [0.4557841, 0.12184289] +gra[0][12][0] = [-0.14078712, -0.28310618] +gra[0][12][1] = [0.02626732, 0.07668723] +gra[0][12][2] = [-0.05231997, -0.034314517] +gra[0][12][3] = [0.014959173, -0.0400435] +gra[0][12][4] = [0.0011666575, -0.0400435] +gra[0][12][5] = [0.028891241, -0.03924354] +gra[0][12][6] = [-0.06071323, 0.0031483166] +gra[0][12][7] = [-0.05261325, -0.0455008] +gra[0][12][8] = [-0.06375543, 0.04426416] +gra[0][12][9] = [-0.015454872, -0.03264485] +gra[0][12][10] = [0.026441302, -0.027270192] +gra[0][12][11] = [-0.111271694, -0.016094657] +gra[0][12][12] = [-0.14078712, -0.28310618] +gra[0][12][13] = [-0.045593165, -0.047326043] +gra[0][12][14] = [0.43311912, 0.15603168] +gra[0][13][0] = [-0.16068856, -0.27489665] +gra[0][13][1] = [0.007832401, 0.04545995] +gra[0][13][2] = [-0.056557372, -0.024525002] +gra[0][13][3] = [0.010721763, -0.034435283] +gra[0][13][4] = [-0.0030707559, -0.031209692] +gra[0][13][5] = [0.024653831, -0.02940011] +gra[0][13][6] = [-0.062085137, 0.0031483166] +gra[0][13][7] = [-0.054515734, -0.038377617] +gra[0][13][8] = [-0.085020155, 0.015137604] +gra[0][13][9] = [-0.024306918, -0.02129151] +gra[0][13][10] = [0.035358965, -0.00568016] +gra[0][13][11] = [-0.12777625, -0.004063463] +gra[0][13][12] = [-0.011886083, -0.022303093] +gra[0][13][13] = [-0.16068856, -0.27489665] +gra[0][13][14] = [0.45522755, 0.13709247] +gra[0][14][0] = [-0.17188504, -0.4140188, -0.21580803, -0.30272162] +gra[0][14][1] = [0.016842496, -0.017852116, -0.037359446, 0.08003807] +gra[0][14][2] = [-0.036550064, -0.054342628, -0.08685365, -0.065238416] +gra[0][14][3] = [0.12644783, -0.11217301, -0.1632629, -0.049610063] +gra[0][14][4] = [0.10285749, -0.11729095, -0.1632629, -0.049610063] +gra[0][14][5] = [0.13867706, -0.17571141, -0.17718932, -0.04432483] +gra[0][14][6] = [-0.09154768, 0.12986793, 0.07644551, -0.0072514024] +gra[0][14][7] = [-0.06673313, -0.07734997, -0.14175922, -0.070629224] +gra[0][14][8] = [-0.11277676, -0.023170393, -0.014400727, 0.097420625] +gra[0][14][9] = [5.980348E-4, -0.16348687, -0.13709308, -0.03563946] +gra[0][14][10] = [0.13337196, -0.08529888, -0.09218985, 0.08115862] +gra[0][14][11] = [-0.10826583, -0.099610835, -0.077772625, -0.056411043] +gra[0][14][12] = [0.038882237, -0.11401746, -0.1542461, -0.06652495] +gra[0][14][13] = [0.013515249, -0.12234244, -0.15172419, -0.04440602] +gra[0][14][14] = [-0.17188504, -0.4140188, -0.21580803, -0.30272162] +gra[1][0][0] = [-0.108077995] +gra[1][0][1] = [-0.108077995] +gra[1][2][1] = [0.03391336, -0.1725873, 0.0012959396, -0.060160123, -0.25640324, -0.07938032] +gra[1][2][2] = [0.03391336, -0.1725873, 0.0012959396, -0.060160123, -0.25640324, -0.07938032] +gra[1][2][3] = [-0.09120312, 0.014431813, 0.11346866, 0.08282627, -0.012589271, -0.035313837] +gra[1][2][4] = [-0.10589576, -0.0059166737, 0.045106955, 0.053036187, 0.014354843, -0.04964634] +gra[1][2][5] = [-0.09762943, -0.0027514172, 0.008785598, 0.025530735, 0.019964844, -0.053498782] +gra[1][2][6] = [0.05597324, 0.01847283, -0.033105604, 0.0642303, -0.0067018787, -0.034922447] +gra[1][2][7] = [-0.057329256, -0.013323549, 0.009656799, 0.125539, -0.0463543, -0.029764814] +gra[1][2][8] = [-0.09219575, 0.030391878, -0.16111393, -0.038332492, 0.031330578, 9.5252134E-4] +gra[1][2][9] = [0.026323536, -0.03530977, 0.2074039, 0.19392449, -0.03207425, -0.023239741] +gra[1][2][10] = [0.038964078, 0.0069643552, -0.10429216, 0.02605302, -0.04147891, -0.02538526] +gra[1][2][11] = [0.06267894, -0.034079902, 0.11534285, 0.21231613, -0.07042499, 0.02830124] +gra[1][2][12] = [0.022294577, -0.07818291, 0.06643256, 0.21217202, -0.059620876, 0.022926517] +gra[1][2][13] = [0.008492436, -0.08288318, 0.05925089, 0.1912733, -0.024221312, -1.7583044E-4] +gra[1][2][14] = [0.008239258, -0.0070896456, -0.002662993, 0.023809846, 0.032671068, -0.078601785] +gra[1][3][1] = [-0.20384672, -0.20074788, -0.15047659, -0.47667956, -0.32233158, -0.18277587] +gra[1][3][2] = [-0.04078209, -0.00964256, -0.007887523, -0.02920713, 0.048171755, -0.0064258603] +gra[1][3][3] = [-0.20384672, -0.20074788, -0.15047659, -0.47667956, -0.32233158, -0.18277587] +gra[1][3][4] = [-0.08607493, -0.011066449, 0.03337828, 0.017589318, 0.053817187, 0.026608063] +gra[1][3][5] = [-0.11435424, -0.028249675, -0.0713048, -0.041468374, 0.06554918, 0.0051536495] +gra[1][3][6] = [0.021533351, 0.014141606, -0.02189768, 0.0406683, 0.019845601, -0.050147213] +gra[1][3][7] = [-0.07811742, -0.015330459, -0.077608146, 0.025373504, -0.028645419, -0.044204023] +gra[1][3][8] = [-0.11033088, 0.014251199, -0.12801346, -0.030778375, 0.0073718023, -0.045310076] +gra[1][3][9] = [-0.021687271, -0.07072508, 0.07316658, 0.006834414, 0.018396648, -0.009679461] +gra[1][3][10] = [-0.043205068, -0.08140806, -0.080073446, 0.03171298, -0.05723045, 0.04153792] +gra[1][3][11] = [0.02166934, -0.07386948, -0.024203774, 0.03216322, 0.002841484, 0.03024212] +gra[1][3][12] = [-0.009991158, -0.072576635, -0.04701072, -0.0074484567, -0.019265298, -0.012907258] +gra[1][3][13] = [-0.015750494, -0.08129193, -0.054456256, -0.04274753, 0.015238559, -0.030263584] +gra[1][3][14] = [0.011959078, 0.0016981189, 0.002318908, 0.02490218, 0.03298948, -0.055057995] +gra[1][4][1] = [-0.19834158, -0.1913248, -0.14450346, -0.4738161, -0.33214733, -0.18481179] +gra[1][4][2] = [-0.037335068, -0.006893658, -0.007887523, -0.034267876, 0.0602602, -0.010987123] +gra[1][4][3] = [-0.017518334, 0.018093698, -0.016213104, -0.016341481, 0.07057031, 0.037748877] +gra[1][4][4] = [-0.19834158, -0.1913248, -0.14450346, -0.4738161, -0.33214733, -0.18481179] +gra[1][4][5] = [-0.08122997, -0.009616363, -0.010314366, -0.019207178, 0.040883962, 0.02032251] +gra[1][4][6] = [0.021533351, 0.014141606, -0.02189768, 0.0406683, 0.017986417, -0.050147213] +gra[1][4][7] = [-0.07007887, -0.015330459, -0.077608146, 0.02348224, -0.03466012, -0.034430098] +gra[1][4][8] = [-0.11033088, 0.017701223, -0.13087574, -0.030211292, 0.009520162, -0.0424478] +gra[1][4][9] = [-0.013648728, -0.07072508, 0.07316658, 0.004943151, 0.012381943, -0.010697419] +gra[1][4][10] = [-0.043205068, -0.08140806, -0.080073446, 0.03171298, -0.05618029, 0.038747557] +gra[1][4][11] = [0.029707883, -0.07386948, -0.024203774, 0.030271959, -0.0031732197, 0.029224155] +gra[1][4][12] = [-0.0019526065, -0.072576635, -0.04701072, -0.009339724, -0.025280003, -0.013925216] +gra[1][4][13] = [-0.0077119498, -0.08129193, -0.054456256, -0.044638794, 0.009223858, -0.031281546] +gra[1][4][14] = [0.011959078, 0.0016981189, 0.002318908, 0.02490218, 0.035166137, -0.055057995] +gra[1][5][1] = [-0.1474042, -0.12128653, -0.17734613, -0.43427634, -0.26872668, -0.207103] +gra[1][5][2] = [-0.018892953, -0.006893658, -0.010367418, -0.038954537, 0.058182646, -0.008467588] +gra[1][5][3] = [-0.0037282254, 0.018976383, -0.018693, -0.02608889, 0.07759199, 0.03570715] +gra[1][5][4] = [-8.831457E-4, 0.018093698, -0.018693, -0.021028142, 0.071870804, 0.039219104] +gra[1][5][5] = [-0.1474042, -0.12128653, -0.17734613, -0.43427634, -0.26872668, -0.207103] +gra[1][5][6] = [0.047771584, 0.015253589, -0.01949577, 0.044564478, 0.021003243, -0.03833175] +gra[1][5][7] = [-0.06801275, -0.010077919, -0.058173127, 0.021577448, -0.04160948, -0.035261553] +gra[1][5][8] = [-0.08263614, -0.0093364185, -0.09053127, -0.005192401, -0.008493237, -0.0014865557] +gra[1][5][9] = [-0.009302059, -0.06351237, 0.10116945, -0.007041836, -0.002656164, 0.0015158653] +gra[1][5][10] = [-0.059016325, -0.0888929, -0.080073446, 0.021833349, -0.034138784, 0.038927235] +gra[1][5][11] = [0.040282093, -0.06309896, 0.010262955, 0.018484885, -0.029200297, 0.039044417] +gra[1][5][12] = [-0.0014948205, -0.06035639, -0.008429811, -0.009474121, -0.060335815, -0.008249627] +gra[1][5][13] = [-0.009723224, -0.06937733, -0.02150535, -0.048633333, -0.0076052034, -0.01708798] +gra[1][5][14] = [0.017121516, 0.0016981189, 0.0018258324, 0.016744861, -0.007697665, -0.07298742] +gra[1][6][1] = [-0.37519073] +gra[1][6][2] = [-0.020675538] +gra[1][6][3] = [-0.007164038] +gra[1][6][4] = [-0.0037859974] +gra[1][6][5] = [0.0010387793] +gra[1][6][6] = [-0.37519073] +gra[1][6][7] = [0.0011221641] +gra[1][6][8] = [-0.07499262] +gra[1][6][9] = [-0.04147849] +gra[1][6][10] = [0.029040512] +gra[1][6][11] = [-0.031770144] +gra[1][6][12] = [0.001088425] +gra[1][6][13] = [0.023952274] +gra[1][6][14] = [-0.051569473] +gra[1][7][1] = [-0.1296072, -0.1442439, -0.11772594, -0.02452228, -0.22837678, -0.14893955] +gra[1][7][2] = [-0.03975167, -0.008707181, -0.010367418, -0.050558057, 0.060622584, -0.010600864] +gra[1][7][3] = [-0.021678163, 0.013831518, -0.021172896, -0.027095923, 0.07488371, -0.014782568] +gra[1][7][4] = [-0.023485089, 0.013831518, -0.021172896, -0.027095923, 0.07826175, -0.015831877] +gra[1][7][5] = [-0.0134816, 0.0073947697, -0.023892898, -0.023722092, 0.073896036, -0.012981238] +gra[1][7][6] = [-0.013946036, 0.0, -0.009565255, 0.0022181221, -0.013034178, 0.0] +gra[1][7][7] = [-0.1296072, -0.1442439, -0.11772594, -0.02452228, -0.22837678, -0.14893955] +gra[1][7][8] = [-0.09351474, -0.0084727695, -0.050743505, -0.068448156, 0.008918113, 0.005457081] +gra[1][7][9] = [-0.015679458, -0.0576052, 0.2337375, 0.12339698, -0.07801207, -0.04771639] +gra[1][7][10] = [-0.011989798, -0.018274585, -0.11092469, 0.03623878, -0.067991786, 0.023738246] +gra[1][7][11] = [0.04772278, -0.09258899, 0.11116379, 0.14959577, -0.087560154, 0.008139222] +gra[1][7][12] = [0.003004335, -0.08354779, 0.08987856, 0.12448278, -0.101327725, -0.022079729] +gra[1][7][13] = [-0.019510493, -0.093155615, 0.0728795, 0.07653391, -0.053730335, -0.032885306] +gra[1][7][14] = [-0.042104535, -0.009785821, -0.01755292, 2.008588E-4, 0.013726235, -0.06798428] +gra[1][8][1] = [-0.19699688] +gra[1][8][2] = [-0.0037809995] +gra[1][8][3] = [-0.0015772863] +gra[1][8][4] = [0.0018007546] +gra[1][8][5] = [0.0026140255] +gra[1][8][6] = [-2.4660824E-11] +gra[1][8][7] = [-0.0066752536] +gra[1][8][8] = [-0.19699688] +gra[1][8][9] = [-0.024493186] +gra[1][8][10] = [0.025926992] +gra[1][8][11] = [-0.0053957887] +gra[1][8][12] = [-0.07335845] +gra[1][8][13] = [-0.0414089] +gra[1][8][14] = [-0.03604288] +gra[1][9][1] = [-0.03215016, -0.13737147, -0.15802538, -0.31892398, -0.20624262, -0.078629926] +gra[1][9][2] = [-0.05952637, -0.010836507, -0.007887523, -0.041915026, 0.053469047, -0.014452843] +gra[1][9][3] = [-0.04573596, 0.013338042, -0.016213104, -0.024018865, 0.08665495, 0.004695354] +gra[1][9][4] = [-0.04754288, 0.010904258, -0.018618636, -0.024018865, 0.090032995, 0.0048670936] +gra[1][9][5] = [-0.037539396, 0.013338042, -0.021145605, -0.02233195, 0.085607246, 0.010568369] +gra[1][9][6] = [-0.01127401, 0.0, -0.012245407, -0.0012549662, -0.01517438, -0.0015686363] +gra[1][9][7] = [-0.05112793, -0.014006899, -0.013934363, -0.017197616, 0.026523141, -0.01844468] +gra[1][9][8] = [0.016177364, -0.012701306, 0.0, 0.046596747, -0.020700313, -0.012177394] +gra[1][9][9] = [-0.03215016, -0.13737147, -0.15802538, -0.31892398, -0.20624262, -0.078629926] +gra[1][9][10] = [-0.027691698, -0.032388207, -0.07824364, 0.059880435, 0.05596056, 0.018381324] +gra[1][9][11] = [0.103498794, -0.040216103, 0.062177118, 0.110756174, 0.059570715, 0.0022290398] +gra[1][9][12] = [0.10042124, -0.063853696, 0.026564376, 0.02724505, -8.004056E-4, -0.01222833] +gra[1][9][13] = [0.03640536, -0.070025615, 0.046619833, -0.0041939775, 0.06556506, -0.056867536] +gra[1][9][14] = [0.027506243, -0.009208607, 0.041899607, 0.030765705, -0.024402268, -0.083207875] +gra[1][10][1] = [-0.22700319, -0.1375201, -0.23030068, -0.18327193, -0.06355304] +gra[1][10][2] = [-0.004317823, -0.030189537, -0.016693661, -0.019362736, 0.0016988069] +gra[1][10][3] = [-0.006293524, -0.06463695, -0.02939278, -0.022921724, 0.0021310751] +gra[1][10][4] = [-0.006293524, -0.066443875, -0.02939278, -0.014431438, 0.002968254] +gra[1][10][5] = [-0.009013527, -0.056440387, -0.02939278, -0.010356696, 0.002968254] +gra[1][10][6] = [-0.010577854, -0.01692955, 0.0, 0.0, 0.0042515756] +gra[1][10][7] = [-0.006494678, -0.035746936, -0.014152209, -0.018789249, 0.0016988069] +gra[1][10][8] = [0.0, -0.034866028, 0.043909788, -0.01032755, 0.0020160119] +gra[1][10][9] = [-0.006293524, -0.03642938, -0.024016019, -0.021367721, 0.0040959795] +gra[1][10][10] = [-0.22700319, -0.1375201, -0.23030068, -0.18327193, -0.06355304] +gra[1][10][11] = [0.016493393, 0.023839124, -0.028824054, -0.03582031, -0.11322439] +gra[1][10][12] = [0.002408312, -0.02686254, -0.003199962, -0.043980688, -0.07248109] +gra[1][10][13] = [0.0023821716, -0.02852016, 0.022710027, 0.0024976633, -0.082591094] +gra[1][10][14] = [-0.006466228, 0.024950877, 0.0045046695, -0.007963004, 9.530978E-4] +gra[1][11][1] = [0.0115634315, -0.1754307, -0.04472863, -0.21108384, -0.09292723, -0.10085574] +gra[1][11][2] = [-0.056997687, -0.00916218, -0.007887523, -0.041793864, 0.08209353, -0.011354894] +gra[1][11][3] = [-0.03058076, 0.00954598, -0.016213104, -0.022438496, 0.0804837, -0.017242681] +gra[1][11][4] = [-0.032387692, 0.00954598, -0.016213104, -0.022438496, 0.083861746, -0.018291987] +gra[1][11][5] = [-0.021216994, 0.00954598, -0.018933106, -0.02075158, 0.08062985, -0.012590716] +gra[1][11][6] = [-0.013345296, 0.0, -0.010166409, 0.0022181221, -0.016150277, -0.0015686363] +gra[1][11][7] = [-0.058763314, -0.024813319, -0.013934363, -0.018591769, 0.045031175, -0.01761809] +gra[1][11][8] = [-0.010564283, -0.014879585, 0.0, 0.08221486, -0.020155832, 0.011569124] +gra[1][11][9] = [-0.03976113, -0.0266835, -0.018693, -0.0038433694, 0.108054, -0.007127323] +gra[1][11][10] = [0.17253473, -0.0051165284, -0.12898529, 0.05902472, 0.08841419, -0.020457178] +gra[1][11][11] = [0.0115634315, -0.1754307, -0.04472863, -0.21108384, -0.09292723, -0.10085574] +gra[1][11][12] = [0.09484108, -0.06539201, 0.11705991, 0.13666858, -0.03076404, 0.030293347] +gra[1][11][13] = [0.031199355, -0.09599421, 0.03979923, 0.07013954, 0.044424616, -7.2653266E-4] +gra[1][11][14] = [-0.025792057, -0.010647351, 0.0070905373, 0.006118256, -0.015851455, -0.10208605] +gra[1][12][1] = [-0.08658051, -0.22899988, -0.10656684, -0.27604854, -0.2197972, -0.18337652] +gra[1][12][2] = [-0.05547315, -0.012346701, -0.010367418, -0.029486053, 0.05935009, -0.022474179] +gra[1][12][3] = [-0.024841659, 0.012640656, -0.021172896, -0.013413144, 0.07662204, -0.025180463] +gra[1][12][4] = [-0.026648592, 0.012640656, -0.021172896, -0.013413144, 0.08000008, -0.026229769] +gra[1][12][5] = [-0.019367125, 0.012640656, -0.023892898, -0.010039311, 0.07158921, -0.024388755] +gra[1][12][6] = [-0.0037196823, 0.0, -0.010166409, 0.0016691058, -0.020588506, -0.0015686363] +gra[1][12][7] = [-0.02981784, -0.023581509, -0.016414259, -0.004626396, 0.03383301, -0.031687073] +gra[1][12][8] = [0.020993255, -0.010776988, 0.0, 0.05328337, -0.020634232, 0.0070363255] +gra[1][12][9] = [7.665232E-4, -0.023638166, -0.026132688, 0.0109071825, 0.08044333, -0.018831125] +gra[1][12][10] = [0.19114436, -0.0047755605, -0.10173453, 0.037046153, 0.09390959, -0.023118684] +gra[1][12][11] = [-0.038150895, -0.021824643, -0.015327208, -0.012188856, 0.059729155, -0.0058229556] +gra[1][12][12] = [-0.08658051, -0.22899988, -0.10656684, -0.27604854, -0.2197972, -0.18337652] +gra[1][12][13] = [0.048063084, -0.09772287, 0.07237538, 0.025829254, 0.03243908, 0.0107249785] +gra[1][12][14] = [-0.016044322, -0.0119469175, 0.015410181, 0.021360878, 0.016821869, -0.06789728] +gra[1][13][1] = [-0.06831044, -0.13932145, -0.17696062, -0.22257882, -0.1827164, -0.18075173] +gra[1][13][2] = [-0.033473175, -0.0138693685, -0.010367418, -0.038903426, 0.0750564, -0.012684662] +gra[1][13][3] = [-0.0028416929, 0.011117988, -0.021172896, -0.022830518, 0.09346217, -0.019572249] +gra[1][13][4] = [-0.004648617, 0.011117988, -0.021172896, -0.022830518, 0.09684021, -0.017395958] +gra[1][13][5] = [0.0014656368, 0.011117988, -0.023892898, -0.019456686, 0.087295525, -0.014545322] +gra[1][13][6] = [-0.005318578, 0.0, -0.010166409, 0.002189381, -0.023704607, -0.0015686363] +gra[1][13][7] = [-0.007817864, -0.025104176, -0.016414259, -0.0140437735, 0.045698013, -0.024563886] +gra[1][13][8] = [0.028921302, -0.011783888, 0.0, 0.080733284, -0.023255521, -0.022090228] +gra[1][13][9] = [0.025339656, -0.025160834, -0.026132688, 0.0014898069, 0.09561606, -0.0074777785] +gra[1][13][10] = [0.17559843, -0.0028885743, -0.10483483, 0.025597045, 0.049072396, -0.0015286552] +gra[1][13][11] = [-0.025382519, -0.02160719, -0.011038008, -0.0280119, 0.079709224, 0.006208241] +gra[1][13][12] = [0.00560419, -0.02116654, -0.021172896, 0.0062681693, 0.085999615, -0.009809807] +gra[1][13][13] = [-0.06831044, -0.13932145, -0.17696062, -0.22257882, -0.1827164, -0.18075173] +gra[1][13][14] = [-0.022765206, -0.008642238, -0.005545456, -0.0016253758, -0.04435316, -0.07088209] +gra[1][14][1] = [0.44408634, -0.12092721, -0.10570723] +gra[1][14][2] = [-0.05545547, -0.0048188735, -0.0054277224] +gra[1][14][3] = [-0.084608115, -0.026899593, -0.011874196] +gra[1][14][4] = [-0.084608115, -0.028706519, -0.006607729] +gra[1][14][5] = [-0.084608115, -0.020130698, -0.011874196] +gra[1][14][6] = [-0.05576598, -0.017983004, 0.0] +gra[1][14][7] = [-0.062699944, -0.023920042, -0.008650959] +gra[1][14][8] = [-0.008844429, 0.09213399, 0.0071458695] +gra[1][14][9] = [-0.05575606, 0.035382736, -0.009415978] +gra[1][14][10] = [-0.013564611, 0.10450437, 0.0020520482] +gra[1][14][11] = [-0.06009103, 0.02992522, -0.0086509595] +gra[1][14][12] = [-0.07773001, 0.0020310916, -0.015097434] +gra[1][14][13] = [-0.076971106, -0.002655573, -0.015097434] +gra[1][14][14] = [0.44408634, -0.12092721, -0.10570723] +gra[2][0][0] = [-0.15201631] +gra[2][0][1] = [0.031203702] +gra[2][0][2] = [-0.15201631] +gra[2][1][0] = [0.0022879262, -0.004365769, 6.20738E-4, 4.4457944E-11, -0.0021720084, 9.538275E-4] +gra[2][1][1] = [-0.03861488, -0.12361071, -0.14622326, -0.16391519, -0.1494383, -0.26891392] +gra[2][1][2] = [-0.03861488, -0.12361071, -0.14622326, -0.16391519, -0.1494383, -0.26891392] +gra[2][3][2] = [-0.008076604, -0.07046831, -0.098895, -0.2321586, -0.36291665, -0.13428082, -0.25642043, -0.34169278, -0.11429488, -0.11130111, -0.1070063] +gra[2][3][3] = [-0.008076604, -0.07046831, -0.098895, -0.2321586, -0.36291665, -0.13428082, -0.25642043, -0.34169278, -0.11429488, -0.11130111, -0.1070063] +gra[2][3][4] = [0.0805982, -0.034465823, 0.07598917, -0.090299815, -0.020566557, -0.10127958, -0.07510182, 0.005006507, -6.042392E-4, 0.0012229868, 0.018206563] +gra[2][3][5] = [0.09489558, -0.06572845, 0.08711138, -0.16550836, -0.070603445, -0.14942205, -0.07379869, 0.0029941553, -6.0423923E-4, 0.0012229868, 0.001831753] +gra[2][3][6] = [-0.058871817, -0.006554798, 0.017428236, -4.6842685E-4, 0.025027804, -0.05349827, 5.9889373E-4, 0.04711724, 0.0, 0.005120207, -0.05144971] +gra[2][3][7] = [0.0048280074, -0.023354564, 0.044204026, -0.16188264, -0.020953348, -0.084573716, -0.008120204, -0.115129516, -0.0016438008, -4.6656062E-4, -0.036058363] +gra[2][3][8] = [-0.051234446, -0.051544387, 0.030227043, -0.011092558, -0.06453305, -0.062376987, -0.055727348, 0.08190204, 0.0, -0.0053235646, -0.04001494] +gra[2][3][9] = [0.036982387, -0.024936493, 0.13808824, 0.04746171, -0.024963146, -0.10614685, -0.04950322, -0.0445091, -6.042392E-4, 0.0020519749, -0.009407277] +gra[2][3][10] = [-0.018327229, 0.07086502, 0.044119813, -0.064103216, 0.03483749, -0.028801778, 0.0042893966, -0.0107006235, 0.0, 0.018656848, 0.029459191] +gra[2][3][11] = [-0.10527698, -0.015317527, 0.038830582, 0.050922435, -0.007117017, -0.102952145, 0.022075849, -0.06960322, -0.0021797004, 0.0012229867, 0.019433094] +gra[2][3][12] = [-0.02985796, -0.01805034, 0.07844547, 0.018029366, -0.07116665, -0.11370507, 0.00879039, -0.062679075, -0.0032192618, 0.0012229867, -0.003486286] +gra[2][3][13] = [0.027791135, 0.019933566, 0.13612899, 0.008909401, -0.09267632, -0.10002251, 0.005974208, -0.08863636, -0.0016438005, -0.0028344705, -0.03491522] +gra[2][3][14] = [0.030786296, -0.0064091478, -0.071676165, 0.038735196, 0.023161378, 0.022532098, 0.113017544, 0.03788906, -1.8203591E-10, 7.318466E-11, -0.051266756] +gra[2][4][2] = [-0.1294062, -0.20639215, -0.23590136, -0.37099618, -0.48548454, -0.20018376, -0.26166877, -0.41468206, -0.1289629, -0.13497436, -0.21379423] +gra[2][4][3] = [0.0302227, -0.0062450683, 0.123370245, -0.020649582, -0.01604276, -0.03070876, 0.01188374, 0.023794215, -0.002079915, -0.0077277506, 0.03669957] +gra[2][4][4] = [-0.1294062, -0.20639215, -0.23590136, -0.37099618, -0.48548454, -0.20018376, -0.26166877, -0.41468206, -0.1289629, -0.13497436, -0.21379423] +gra[2][4][5] = [0.15102442, -0.008147711, 0.0514243, -0.12282804, -0.043201454, -0.1278645, -0.07646969, -0.014425374, -6.042392E-4, 0.0012229868, 0.02046664] +gra[2][4][6] = [-0.06091963, -0.011449458, 0.019421639, -0.0049448065, 0.03811474, -0.05349827, 0.0015795783, 0.07086545, 0.0, 0.005120207, -0.050147213] +gra[2][4][7] = [0.041366346, -0.008510563, 0.010099679, -0.13262556, -9.927137E-4, -0.10384308, -0.005782647, -0.1192376, -0.0016438008, 0.0022671828, -0.020606475] +gra[2][4][8] = [-0.049276114, -0.058174442, 0.008468347, -0.0711803, -0.05036522, -0.065239266, -0.047402292, 0.10297411, 0.0, -0.0053235646, -0.0424478] +gra[2][4][9] = [0.09200959, -0.021697182, 0.122298524, 0.07767116, -0.02727232, -0.12138869, -0.049602136, -0.044220224, -6.042392E-4, 0.0020519749, -0.0068372646] +gra[2][4][10] = [-0.018110096, 0.05372959, 0.0151335355, -0.081490815, 0.033452507, -0.028801778, 0.002071476, -0.0021489211, 0.0, 0.018656848, 0.023107262] +gra[2][4][11] = [-0.04821482, -0.0013517933, 0.034565553, 0.09703982, -0.0135421455, -0.12116421, 0.027648013, -0.07703965, -0.0021797004, 0.0012229867, 0.032362547] +gra[2][4][12] = [0.026633851, 0.0017764987, 0.07997461, 0.066489205, -0.064625874, -0.12656163, 0.014263283, -0.052713, -0.0032192618, 0.0012229867, 0.003290647] +gra[2][4][13] = [0.078414686, 0.020772994, 0.14588076, 0.060945626, -0.09091907, -0.11564237, 0.0066668717, -0.08774518, -0.0016438005, 0.0012229867, -0.02239227] +gra[2][4][14] = [0.05219944, -0.008933335, 0.0011658408, 0.04304128, 0.02515228, 0.022532098, 0.113017544, 0.022577101, -1.8203591E-10, 0.0, -0.051266756] +gra[2][5][2] = [-0.109083325, -0.13635391, -0.1724807, -0.32005876, -0.44594473, -0.23302643, -0.24689698, -0.41167107, -0.12679145, -0.13053392, -0.23608541] +gra[2][5][3] = [0.028576976, -0.01202011, 0.14082508, 0.019831568, -0.025790168, -0.033188656, 0.010665469, 0.025290381, 0.0, -0.0077277506, 0.034657843] +gra[2][5][4] = [0.043157984, -0.011062228, 0.031184498, -0.0352323, -0.023394702, -0.033188656, 0.013148798, 0.025290381, 0.0, -0.0077277506, 0.039219104] +gra[2][5][5] = [-0.109083325, -0.13635391, -0.1724807, -0.32005876, -0.44594473, -0.23302643, -0.24689698, -0.41167107, -0.12679145, -0.13053392, -0.23608541] +gra[2][5][6] = [-0.08106713, -0.009225492, 0.02121906, 0.01605932, 0.04201092, -0.04117418, 0.0030047887, 0.038180098, 0.0, 0.0048741507, -0.03833175] +gra[2][5][7] = [0.055404905, -0.0032580243, 0.003150314, -0.13055943, -0.002897503, -0.084408045, -0.0074517485, -0.120952904, -0.0016438005, -4.6656062E-4, -0.021437926] +gra[2][5][8] = [-0.060963377, -0.085212074, -0.009545051, -0.04348558, -0.025346331, -0.024894798, -0.044431817, 0.06334871, 0.0, -0.0053235646, -0.0014865557] +gra[2][5][9] = [0.100335434, -0.014484472, 0.10726041, 0.08201783, -0.039257314, -0.093385816, -0.038351398, -0.04593553, -6.042392E-4, -1.4442275E-4, 0.0053760214] +gra[2][5][10] = [-0.018110096, 0.04624476, 0.03717503, -0.09730208, 0.02357287, -0.028801778, 0.002071476, -0.012438461, 0.0, 0.020372767, 0.02328694] +gra[2][5][11] = [-0.0465424, 0.009418742, 0.0085384855, 0.107614025, -0.025329215, -0.08669748, 0.036276024, -0.07935116, -6.042392E-4, 0.0012229867, 0.0421828] +gra[2][5][12] = [0.041238375, 0.013996747, 0.04491879, 0.06694699, -0.064760275, -0.08798072, 0.01705242, -0.056739807, 0.0023156772, 0.0012229867, 0.008966238] +gra[2][5][13] = [0.09660875, 0.032687586, 0.1290517, 0.058934357, -0.09491361, -0.08269146, 0.008766838, -0.08773481, -0.0016438005, 0.0012229867, -0.008198705] +gra[2][5][14] = [0.02811451, -0.008933335, -0.041697957, 0.04820372, 0.01699496, 0.022039022, 0.09601593, 0.016229236, -1.8203591E-10, 0.0, -0.06919619] +gra[2][6][2] = [-0.33506277, -0.18281105] +gra[2][6][3] = [0.050459035, -0.0480888] +gra[2][6][4] = [-0.058334365, -0.04194749] +gra[2][6][5] = [-0.050963223, -0.02262903] +gra[2][6][6] = [-0.33506277, -0.18281105] +gra[2][6][7] = [0.09761742, -0.01634203] +gra[2][6][8] = [-0.10002497, 0.04321725] +gra[2][6][9] = [0.117864504, 0.009139456] +gra[2][6][10] = [0.11780313, -0.04472417] +gra[2][6][11] = [0.055395056, -0.035537593] +gra[2][6][12] = [0.15576944, -0.0030296352] +gra[2][6][13] = [0.21003558, -0.042242486] +gra[2][6][14] = [-0.11417418, -0.017581403] +gra[2][7][2] = [-0.12298199, -0.15931123, -0.13213076, -0.3022618, -0.036190674, -0.17340623, -0.33445278, -0.1409332, -0.0928228, -0.13858096, -0.17792198] +gra[2][7][3] = [0.035498135, -0.014716316, 0.12900968, 0.0018816409, -0.026797201, -0.035668552, 0.0035608534, 0.005567723, -0.0015440702, -0.0077277506, -0.015831877] +gra[2][7][4] = [0.0473681, -0.020070724, 0.03502908, -0.039943375, -0.029462483, -0.035668552, 0.0024413813, 0.005567723, 0.0, -0.009627088, -0.015831877] +gra[2][7][5] = [0.05841018, -0.021761157, 0.033209726, -0.046052434, -0.027980871, -0.036883388, 0.0038042043, 0.005567723, 0.0, 0.0013718933, -0.012981238] +gra[2][7][6] = [-0.009183083, -0.022087386, -0.06500266, -0.003913735, -0.017434899, -0.015544581, -4.731787E-11, 0.012018705, -9.038228E-4, -0.0016083805, 0.0] +gra[2][7][7] = [-0.12298199, -0.15931123, -0.13213076, -0.3022618, -0.036190674, -0.17340623, -0.33445278, -0.1409332, -0.0928228, -0.13858096, -0.17792198] +gra[2][7][8] = [-0.071148, -0.09141699, 0.045326322, -0.02822847, -0.09423955, -0.012837715, -0.034597382, 0.05246252, 0.0, -0.0053235646, 0.005457081] +gra[2][7][9] = [0.015466833, -0.008577296, 0.03190451, 0.07564043, 0.09118151, 0.039182235, -0.025927924, 0.004676326, -6.042392E-4, -0.0069806715, -0.04385624] +gra[2][7][10] = [0.034649882, 0.116863064, 0.0033220518, -0.050275527, 0.037978306, -0.059653025, 0.023348592, -0.064188465, 0.0, 0.018263478, 0.008097947] +gra[2][7][11] = [-0.09295004, -0.020071309, -0.04982135, 0.1150547, 0.10578166, 0.014203327, 0.0359425, -0.011216718, -6.042392E-4, -0.0018316435, 0.011277605] +gra[2][7][12] = [-0.017506499, -0.009194653, 0.0039268765, 0.071446136, 0.06919665, 0.010327638, 0.0055351285, 0.07338563, -0.0016438005, -0.0018316435, -0.0048638657] +gra[2][7][13] = [0.023693724, 0.0089093065, 0.082926564, 0.04914708, 0.03025364, 0.011693382, 0.0027329288, 0.04278699, -0.0016438005, -0.0018316435, -0.023996033] +gra[2][7][14] = [0.030249318, -0.020417277, -0.020274054, -0.011022337, 4.5096013E-4, 0.0026602726, 0.10006753, 0.02086204, -0.0019475454, -0.0010469037, -0.06419305] +gra[2][8][2] = [-0.098765604, -0.21473517, -0.15407726, -0.2138582, -0.29589483, -0.20712286] +gra[2][8][3] = [0.045760147, -0.004769299, -0.038730323, -0.023269074, -0.0036128643, -0.0053470596] +gra[2][8][4] = [-0.059532464, -0.007675047, -0.080555335, -0.023269074, -0.0050796065, -0.0053470596] +gra[2][8][5] = [-0.056172833, -0.0029287338, -0.07756553, -0.02448391, -0.0017491262, -0.0053470596] +gra[2][8][6] = [-0.053191774, -0.01284402, -0.0022998422, -0.015544581, -0.005061429, -0.005767472] +gra[2][8][7] = [-0.024624372, -0.016473431, -0.038519755, -0.0142682865, -0.0017491262, -0.005605762] +gra[2][8][8] = [-0.098765604, -0.21473517, -0.15407726, -0.2138582, -0.29589483, -0.20712286] +gra[2][8][9] = [0.14998935, 0.03556885, 0.16636685, -0.07407579, -0.042286556, -0.03358767] +gra[2][8][10] = [0.10997251, 0.121142365, -0.06810031, -0.012015331, -0.004103984, -0.013681764] +gra[2][8][11] = [0.09455238, 0.08597852, 0.12715638, -0.044376574, -0.05856059, -0.002812602] +gra[2][8][12] = [0.09410553, 0.112332866, 0.1220707, -0.021252448, -0.06676871, 0.008941967] +gra[2][8][13] = [0.15745735, 0.12265156, 0.19168386, -0.016919304, -0.07282984, 0.0030826405] +gra[2][8][14] = [-0.08871041, -0.015491295, 0.076912574, 0.021117939, 0.020992978, -0.030493984] +gra[2][9][2] = [-0.105878875, -0.1524388, -0.1099966, -0.20480473, -0.3305924, -0.21370567, -0.33320028, -0.24001853, -0.10375746, -0.11412878, -0.10761234] +gra[2][9][3] = [0.03317759, -0.016845642, 0.1503404, -0.021122754, -0.023720142, -0.03070876, 0.010665469, 0.02652775, 0.0, -0.0077277506, 0.0036460478] +gra[2][9][4] = [0.042134404, -0.022997983, 0.046800338, -0.06400117, -0.026385423, -0.03311429, 0.011930525, 0.02652775, -0.002650973, -0.0077277506, 0.0048670936] +gra[2][9][5] = [0.04673974, -0.015817884, 0.044920944, -0.07011023, -0.02659073, -0.03413609, 0.013293348, 0.02652775, 0.0, -0.006354918, 0.010568369] +gra[2][9][6] = [-0.012488609, -0.022087386, -0.071482256, -0.0012417086, -0.020907987, -0.018224735, 0.0, 0.012018705, -9.038228E-4, -0.0016083805, -0.0027130097] +gra[2][9][7] = [0.0716151, -0.03751232, 1.3603596E-4, -0.04638823, -0.023721159, -0.019228077, 0.0046084328, 0.035835125, 0.0047529186, -0.006096343, -0.01602985] +gra[2][9][8] = [-0.015797166, -0.024351576, -0.0215403, 0.034865953, 0.046004623, 0.034118768, -0.023652218, 0.019558845, 0.0, 0.012150579, -0.007978012] +gra[2][9][9] = [-0.105878875, -0.1524388, -0.1099966, -0.20480473, -0.3305924, -0.21370567, -0.33320028, -0.24001853, -0.10375746, -0.11412878, -0.10761234] +gra[2][9][10] = [-0.01967794, 0.10183758, 0.15366054, -0.06979019, 0.05891821, -0.022391455, 0.018301774, 0.021346226, 0.0, 0.020372767, 0.003545857] +gra[2][9][11] = [-0.06909444, 0.032301586, 0.097309515, 0.1708307, 0.066942066, -0.03478332, 0.08301894, -0.048377972, -0.004067228, 0.002650639, 0.005367422] +gra[2][9][12] = [-0.01954465, 0.0104994485, 0.104454204, 0.16886304, -0.028041093, -0.052986544, 0.042617302, -0.023035575, -0.0051067895, 0.002650639, 0.004987537] +gra[2][9][13] = [0.030839257, 0.03203931, 0.20222194, 0.10506295, -0.050474267, -0.014566283, 0.040826432, -0.034744743, -0.0051067895, 0.002650639, -0.047978267] +gra[2][9][14] = [0.010195935, -0.019840062, -0.05840256, 0.058588445, 0.031015806, 0.062112793, 0.09405385, 0.017498635, 0.0, 0.0, -0.07941664] +gra[2][10][2] = [-0.077617064, -0.24597266, -0.30084527, -0.33237344, -0.18720393, -0.09771022, -0.20302433] +gra[2][10][3] = [0.026043031, -0.0037977588, -0.023269074, -0.028983576, -0.0015887114, 0.0010817688, 0.037429087] +gra[2][10][4] = [-0.07763809, -0.006703506, -0.023269074, -0.07080858, -0.0015887114, 0.002968254, 0.05529735] +gra[2][10][5] = [-0.071017, -0.0019571928, -0.02448391, -0.076917656, -0.0015887114, 0.002968254, 0.057679832] +gra[2][10][6] = [-0.053191774, -0.022087386, -0.0177017, -0.0068972483, -0.0022654566, 0.003107202, -0.009080095] +gra[2][10][7] = [-0.06515035, -0.021679426, -0.0142682865, -0.018913662, -0.0033213743, 0.004113634, 0.07422953] +gra[2][10][8] = [1.4555454E-4, -0.0073065395, 0.040923893, -0.037498906, 0.0028213095, 0.0035354842, -0.008792204] +gra[2][10][9] = [0.037463915, 0.030624442, -0.01446133, 0.025323104, 0.0, 0.0040959795, 0.03213553] +gra[2][10][10] = [-0.077617064, -0.24597266, -0.30084527, -0.33237344, -0.18720393, -0.09771022, -0.20302433] +gra[2][10][11] = [0.079399094, 0.15027712, -0.07128487, 0.0870506, -0.006525742, -0.108242765, 0.08370259] +gra[2][10][12] = [0.07473828, 0.1260693, -0.039055545, 0.058323834, 4.2641436E-4, -0.05526523, 0.06886024] +gra[2][10][13] = [0.1526189, 0.14199956, -0.020716881, 0.056881983, 0.0029196735, -0.073701814, 0.08012534] +gra[2][10][14] = [-0.07117805, -0.040356413, 0.016607894, 0.07246468, -0.021312775, 0.0047443355, 0.0738589] +gra[2][11][2] = [-0.17702022, -0.19049807, 0.0033187612, -0.1610911, -0.22275227, -0.1004089, -0.4127527, -0.27582508, -0.097562976, -0.09680039, -0.12983814] +gra[2][11][3] = [0.03317759, -0.021450516, 0.14371678, -0.007020961, -0.022139775, -0.03070876, 0.0059119724, 0.0074535403, 0.0, -0.0077277506, -0.018291987] +gra[2][11][4] = [0.043792337, -0.024356263, 0.04062908, -0.048845977, -0.024805054, -0.03070876, 0.007177029, 0.0074535403, 0.0, -0.0077277506, -0.018291987] +gra[2][11][5] = [0.04839767, -0.019609947, 0.039943546, -0.053787827, -0.02501036, -0.031923596, 0.008539852, 0.008833618, 0.0, -0.0077277506, -0.012590716] +gra[2][11][6] = [-0.01400961, -0.022087386, -0.072458155, -0.0033129938, -0.017434899, -0.016145736, 0.0, 0.012018705, -9.038228E-4, -0.0016083805, -0.0027130097] +gra[2][11][7] = [0.071528405, -0.04831874, 0.018644067, -0.054023616, -0.025115307, -0.019228077, 0.0033746741, 0.011975225, 0.0039619114, -0.008320883, -0.015203262] +gra[2][11][8] = [-0.022458976, -0.026009362, -0.011533938, -0.001877947, 0.08073837, 0.040923893, -0.026807453, 0.042773336, -0.0017965699, 0.018487457, 0.015768506] +gra[2][11][9] = [0.030610166, 0.0044976464, 0.19679622, 0.019722905, -0.01275599, -0.024380911, 0.0107252635, 0.016309183, 0.0, -0.005151834, -0.007127323] +gra[2][11][10] = [0.025785115, 0.037166946, 0.014565164, 0.006083017, 0.08089537, -0.09699656, -0.0730818, 0.07966486, 0.0024555703, 0.022535702, -0.0056969775] +gra[2][11][11] = [-0.17702022, -0.19049807, 0.0033187612, -0.1610911, -0.22275227, -0.1004089, -0.4127527, -0.27582508, -0.097562976, -0.09680039, -0.12983814] +gra[2][11][12] = [-0.06441311, 0.026440911, 0.12037103, 0.13888726, 0.08138243, 0.010932655, 0.020394541, 0.008380487, -0.0016438005, 0.005044714, 0.04750921] +gra[2][11][13] = [-0.02790359, 0.0060707172, 0.1810815, 0.09985693, 0.023859262, -0.021386884, 0.0015091486, -0.009860844, -0.0016438005, 0.002642244, 0.008162747] +gra[2][11][14] = [0.070758194, -0.021278806, -0.049851753, 0.005290147, 0.0063683577, 0.027303727, 0.13471515, 0.040411703, 0.0, 0.0, -0.09829482] +gra[2][12][2] = [-0.19875024, -0.2440672, -0.123551175, -0.2592351, -0.28771695, -0.16224714, -0.36199668, -0.30089164, -0.11223101, -0.13092594, -0.21235895] +gra[2][12][3] = [0.03317759, -0.018355839, 0.14098895, -0.0012818617, -0.013114419, -0.035668552, 0.0035608534, 0.011555983, -0.0010550276, -0.005276286, -0.026229769] +gra[2][12][4] = [0.043792337, -0.021261584, 0.036767416, -0.043106876, -0.0157797, -0.035668552, 0.0048259096, 0.011555983, 5.769341E-4, -0.005476473, -0.026229769] +gra[2][12][5] = [0.04839767, -0.016515272, 0.030902896, -0.051937968, -0.014298091, -0.036883388, 0.0061887326, 0.010669847, 0.0, -0.005476473, -0.024388755] +gra[2][12][6] = [-0.014100589, -0.022087386, -0.07689638, 0.006312619, -0.017983915, -0.016145736, 0.0, 0.012018705, -0.0046197325, -0.0016083805, -0.0027130097] +gra[2][12][7] = [0.071528405, -0.047086928, 0.0074459035, -0.02507813, -0.011149936, -0.02170797, -1.1943467E-4, 0.010529782, 0.0047529186, -0.0060696052, -0.029272247] +gra[2][12][8] = [-0.025169602, -0.021906763, -0.012012333, 0.029679593, 0.051806875, 0.040923893, -0.041877814, 0.05035637, 0.0, 0.010175859, 0.011235707] +gra[2][12][9] = [0.033317532, 0.007542981, 0.16918556, 0.060250558, 0.0019945612, -0.0318206, 0.008374144, 0.024137018, 0.0, -0.002900556, -0.018831125] +gra[2][12][10] = [0.037359554, 0.03554336, 0.010199685, 0.02761072, 0.05891679, -0.0697458, -0.02648961, 0.10116728, 0.002381391, 0.010580534, -0.0068383366] +gra[2][12][11] = [0.018431593, 0.0055147577, 0.13500987, 0.0076680183, -0.01452204, -0.027323436, 0.0052284813, 0.023991466, 7.6891546E-4, -0.002900556, -4.2205094E-4] +gra[2][12][12] = [-0.19875024, -0.2440672, -0.123551175, -0.2592351, -0.28771695, -0.16224714, -0.36199668, -0.30089164, -0.11223101, -0.13092594, -0.21235895] +gra[2][12][13] = [0.086594634, 0.021821834, 0.21497643, 0.09232503, -0.020451026, -0.015387063, -0.013508427, 0.029255526, -0.0016438005, 0.0012229867, 0.019614253] +gra[2][12][14] = [0.07045497, -0.022578374, -0.017178424, 0.015037881, 0.021610979, 0.035623375, 0.12032417, 0.020360775, 0.0, -2.2505768E-11, -0.06410605] +gra[2][13][2] = [-0.19951446, -0.15438879, -0.086470366, -0.240965, -0.23424724, -0.2326409, -0.32325682, -0.25252593, -0.12048934, -0.13127431, -0.20973417] +gra[2][13][3] = [0.034109738, -0.019878507, 0.15669526, 0.020718105, -0.022531796, -0.035668552, 0.007155873, 0.016494725, 0.0, -0.0077277506, -0.020621555] +gra[2][13][4] = [0.044724483, -0.022784252, 0.053607546, -0.021106908, -0.025197076, -0.035668552, 0.008420929, 0.016494725, 0.0, -0.0077277506, -0.017395958] +gra[2][13][5] = [0.049483325, -0.018037941, 0.046609215, -0.031105205, -0.023715466, -0.036883388, 0.009783752, 0.015608587, 0.0, -0.0077277506, -0.014545322] +gra[2][13][6] = [-0.011615532, -0.022087386, -0.08001248, 0.0047137234, -0.01746364, -0.016145736, 0.0, 0.012018705, -9.038228E-4, -0.0016083805, -0.0027130097] +gra[2][13][7] = [0.07384895, -0.048609596, 0.019310912, -0.0030781596, -0.020567313, -0.02170797, 0.0034755857, 0.018190926, 0.0047529186, -0.006096343, -0.02214906] +gra[2][13][8] = [-0.022202594, -0.022913663, -0.014633628, 0.03760764, 0.07925679, 0.040923893, -0.046354357, 0.046572696, 0.0019757631, 0.012150579, -0.017890848] +gra[2][13][9] = [0.037301484, 0.006020313, 0.18435828, 0.08482369, -0.007422815, -0.0318206, 0.011969165, 0.026871076, 0.0, -0.005151834, -0.0074777785] +gra[2][13][10] = [0.03558677, 0.037430346, -0.034637507, 0.012064794, 0.0474677, -0.07284611, 0.012233781, 0.09341223, 0.002381391, 0.014459286, 0.014751689] +gra[2][13][11] = [0.01767755, 9.858967E-4, 0.15244359, 0.03832726, -0.030345086, -0.023034235, 0.0076052295, 0.030979762, 7.6891546E-4, -0.005151834, 0.0116091445] +gra[2][13][12] = [0.054678664, -0.022402693, 0.1139498, 0.065429255, -0.0024198703, -0.029360235, 0.008978962, 0.038531862, -1.4217425E-4, -0.004681904, -0.008489365] +gra[2][13][13] = [-0.19951446, -0.15438879, -0.086470366, -0.240965, -0.23424724, -0.2326409, -0.32325682, -0.25252593, -0.12048934, -0.13127431, -0.20973417] +gra[2][13][14] = [0.014282126, -0.014524782, -0.13251245, 0.02636649, -0.0041411947, 0.015749522, 0.08567208, 0.011856999, 0.0, -0.0013691243, -0.067090854] +gra[2][14][2] = [0.4343303, -0.37244362, -0.28004685, -0.12789774, -0.21803154, -0.12783362, -0.21811707, -0.14185552] +gra[2][14][3] = [-0.050213013, 0.088265896, 0.0025411625, 0.008415423, -0.030471062, -0.0032232369, 0.046410937, -0.052638464] +gra[2][14][4] = [-0.05870517, -0.014300982, -0.042183742, 0.0055096745, -0.030471062, 4.3161202E-4, 0.0642792, -0.052638464] +gra[2][14][5] = [-0.05870517, -0.0060108323, -0.04972046, 0.010255989, -0.030471062, -0.0048348554, 0.06765758, -0.0538533] +gra[2][14][6] = [-0.054352902, -0.0631387, -0.007950703, -0.022087386, 0.036315702, -9.038228E-4, -0.031075135, -0.015544581] +gra[2][14][7] = [-0.037878644, -0.019238206, -0.01619927, -0.009466247, -0.03137149, 6.023841E-5, 0.08327374, -0.035573896] +gra[2][14][8] = [-0.0027976157, 0.047380313, 0.09339658, -0.011650267, -0.008736845, 0.008354038, -0.008792204, 0.037216727] +gra[2][14][9] = [-0.03965546, 0.12285828, 0.09784784, 0.045220323, -0.016584467, -0.0048348554, 0.04369542, -0.035722323] +gra[2][14][10] = [-0.017961588, 0.061617773, -0.0027846463, 0.041740574, -0.012447634, 0.0, 0.019691546, -0.011759965] +gra[2][14][11] = [-0.043990437, 0.08404583, 0.09661607, 0.036632266, -0.022157721, -0.0040659397, 0.033597667, -0.04387355] +gra[2][14][12] = [-0.043106366, 0.037694193, 0.08272809, 0.01872339, -0.032401294, -0.008058093, 0.07131885, -0.03826637] +gra[2][14][13] = [-0.03528687, 0.057534255, 0.057536703, 0.023469703, -0.029970387, -0.008058093, 0.071832515, -0.03826637] +gra[2][14][14] = [0.4343303, -0.37244362, -0.28004685, -0.12789774, -0.21803154, -0.12783362, -0.21811707, -0.14185552] +gra[3][0][0] = [-0.038961984] +gra[3][0][1] = [0.11764526] +gra[3][0][2] = [-0.0029783393] +gra[3][0][3] = [-0.038961984] +gra[3][1][0] = [0.0022879262, 0.0031182556, 6.20738E-4, 4.4457944E-11, -0.0021720084, 9.538275E-4] +gra[3][1][1] = [-0.012393069, -0.15868439, -0.21871509, -0.18274719, -0.15518439, -0.21593317] +gra[3][1][2] = [0.10560748, -0.042098567, 0.043105654, -0.026443, -0.007685846, -0.035907257] +gra[3][1][3] = [-0.012393069, -0.15868439, -0.21871509, -0.18274719, -0.15518439, -0.21593317] +gra[3][2][0] = [-0.0023283148, 0.0050770696, 6.4378075E-4, 0.0042653317, -0.00452922, 7.4807646E-11, -5.665981E-4, -3.050395E-11, 0.0012653338, 0.0024696218, -0.008016303] +gra[3][2][1] = [-5.13921E-4, -3.7906157E-11, -0.045772243, -0.0041412255, -0.018871907, -0.0028272104, -0.012859132, 0.035186574, -7.720956E-4, 0.0035228117, -0.042637575] +gra[3][2][2] = [-0.1527792, -0.113233194, -0.054301165, -0.15919417, -0.20111087, -0.16079815, -0.25796932, -0.241832, -0.18616161, -0.13430928, -0.21455298] +gra[3][2][3] = [-0.1527792, -0.113233194, -0.054301165, -0.15919417, -0.20111087, -0.16079815, -0.25796932, -0.241832, -0.18616161, -0.13430928, -0.21455298] +gra[3][4][3] = [0.080264926, 0.02579656, -0.16407087, -0.2805622, -0.3278504, -0.15959191, -0.2234307, -0.34202027, -0.100388475, -0.11454372, -0.15381846] +gra[3][4][4] = [0.080264926, 0.02579656, -0.16407087, -0.2805622, -0.3278504, -0.15959191, -0.2234307, -0.34202027, -0.100388475, -0.11454372, -0.15381846] +gra[3][4][5] = [0.19779329, 0.004704324, 0.0028100526, -0.19220777, -0.046565086, -0.12838551, -0.07412594, -0.0021814913, -6.042392E-4, 0.0012229872, 0.0031403098] +gra[3][4][6] = [-0.081183486, -0.028070848, 0.030555831, -0.022723744, 0.025027804, -0.04813345, 0.003595072, 0.047705334, 0.0016591108, 0.002712621, -0.05144971] +gra[3][4][7] = [0.0039748983, 9.6383225E-4, -0.04841364, -0.22035895, -0.03633671, -0.14051624, -0.0058753714, -0.10428843, -0.0016438008, 0.0022671833, -0.03286426] +gra[3][4][8] = [-0.040510423, -0.061654296, 0.030528117, 0.02659813, -0.07196968, -0.081996635, -0.055243164, 0.08190204, 0.0, -0.004978219, -0.037152667] +gra[3][4][9] = [0.11776427, -0.058918525, 0.12595578, -0.11178863, -0.029508589, -0.1381523, -0.047258385, -0.02285704, -6.042392E-4, 0.002051975, -0.022911087] +gra[3][4][10] = [-0.008554228, 0.0412348, -0.12479799, -0.051410124, 0.030709445, -0.042462237, 0.0072704786, -0.006176661, 0.0, 0.008652416, 0.022637697] +gra[3][4][11] = [-0.11572003, -0.04492593, -0.009004474, -0.042554148, -0.010522034, -0.16364421, 0.022561576, -0.048643857, -4.865427E-5, -0.0039698915, -0.0014345944] +gra[3][4][12] = [-0.0069528553, -0.057728425, -0.005433593, -0.06658935, -0.07646103, -0.15282395, 0.011035223, -0.039221756, -0.0032192618, -0.0039698915, -0.010328554] +gra[3][4][13] = [0.04217954, -0.036901977, 0.05292665, -0.092318825, -0.100017145, -0.15756387, 0.008219042, -0.06517905, -0.0016438005, 0.0012229871, -0.04239282] +gra[3][4][14] = [-0.00299038, 0.03920348, -0.042208888, 0.05008921, 0.023527399, 0.020578144, 0.1248354, 0.032437425, -1.8203591E-10, 0.0, -0.051266756] +gra[3][5][3] = [-0.024207622, -0.04951211, -0.22784083, -0.37396744, -0.41374195, -0.26431063, -0.2183969, -0.40905178, -0.11288505, -0.13377653, -0.28086165] +gra[3][5][4] = [-0.057146087, -0.039673835, 0.17305376, -0.01683017, -0.022667397, -0.02753507, 0.01188374, 0.025290381, 9.0512355E-12, -0.012879585, 0.04504322] +gra[3][5][5] = [-0.024207622, -0.04951211, -0.22784083, -0.37396744, -0.41374195, -0.26431063, -0.2183969, -0.40905178, -0.11288505, -0.13377653, -0.28086165] +gra[3][5][6] = [-0.09216936, -0.030741546, 0.03069731, 0.001978191, 0.04201092, -0.037597638, 0.007732113, 0.03876819, 0.0016591108, 0.0048741507, -0.03833175] +gra[3][5][7] = [0.04825837, 0.021060362, -0.08345264, -0.1970743, -0.016389595, -0.1403506, -0.0074517485, -0.1133868, -0.0016438005, -4.6656025E-4, -0.028017744] +gra[3][5][8] = [-0.053781927, -0.098772004, -0.011392334, -0.005794887, -0.033350054, -0.041652158, -0.043947633, 0.06334871, 0.0, -0.004978219, -0.0014865557] +gra[3][5][9] = [0.17482388, -0.048466492, 0.10114264, -0.08527103, -0.041911483, -0.12539127, -0.038351398, -0.027558457, -6.042392E-4, -1.444224E-4, -0.007109831] +gra[3][5][10] = [-0.008337104, 0.016614538, -0.13279286, -0.08460896, 0.019444827, -0.042462237, 0.0050525577, -0.007914498, 0.0, 0.010368334, 0.019255804] +gra[3][5][11] = [-0.06327887, -0.020189673, -0.033281863, 0.0060988883, -0.02684297, -0.14738953, 0.034516916, -0.061666783, 0.0015268069, -0.0039698915, 0.022333067] +gra[3][5][12] = [0.05785005, -0.02568133, -0.03294557, -0.025710281, -0.06816338, -0.12709959, 0.01705242, -0.03655747, 0.0023156772, -0.0039698915, 0.0031419299] +gra[3][5][13] = [0.10470373, -0.024147956, 0.051864047, -0.050332405, -0.100363165, -0.1402328, 0.008766838, -0.067552485, -0.0016438005, 0.0012229871, -0.0146583365] +gra[3][5][14] = [-0.0038765296, 0.036679298, -0.014407332, 0.05955772, 0.017360983, 0.020085067, 0.10783379, 0.016229236, -1.8203591E-10, 0.0, -0.06919619] +gra[3][6][3] = [-0.39042288, -0.20252663] +gra[3][6][4] = [0.11618018, -0.036191344] +gra[3][6][5] = [0.013443776, -0.027157694] +gra[3][6][6] = [-0.39042288, -0.20252663] +gra[3][6][7] = [0.011014465, -0.016218057] +gra[3][6][8] = [-0.10187224, 0.029533952] +gra[3][6][9] = [0.11174672, -0.0030878466] +gra[3][6][10] = [-0.05216477, -0.034098495] +gra[3][6][11] = [0.013574712, -0.042492915] +gra[3][6][12] = [0.07790509, 0.003786453] +gra[3][6][13] = [0.13284796, -0.02833015] +gra[3][6][14] = [-0.086883545, -0.032392908] +gra[3][7][3] = [-0.03810625, -0.07246947, -0.18749088, -0.35617045, -0.0039878795, -0.20469043, -0.30595267, -0.13831393, -0.07891641, -0.14182357, -0.22269824] +gra[3][7][4] = [-0.054191194, -0.04623367, 0.19473083, -0.019242423, -0.028735178, -0.030014966, 0.0035608534, 0.005567723, 9.0512355E-12, -0.012879585, -0.010007761] +gra[3][7][5] = [-0.027313534, -0.049789086, 0.0976167, -0.04305214, -0.02725357, -0.030014966, 0.0036596532, 0.005567723, 9.0512355E-12, -0.0037799405, -0.007157123] +gra[3][7][6] = [-0.022742484, -0.006928928, -0.04051508, -0.003913735, -0.025036301, -0.018571196, -4.731787E-11, 0.0, -0.0045685717, -0.0016083805, 0.0] +gra[3][7][7] = [-0.03810625, -0.07246947, -0.18749088, -0.35617045, -0.0039878795, -0.20469043, -0.30595267, -0.13831393, -0.07891641, -0.14182357, -0.22269824] +gra[3][7][8] = [-0.06396654, -0.10820116, 0.026846237, -0.013104029, -0.099735364, -0.02959507, -0.0341132, 0.05246252, 0.0, -0.0033622796, 0.005457081] +gra[3][7][9] = [0.08995527, -0.042559315, 0.02578675, -0.091648445, 0.08852732, 0.0071767634, -0.025927924, 0.0230534, -6.042392E-4, -0.006980671, -0.056342095] +gra[3][7][10] = [0.04442288, 0.08723284, -0.16664585, -0.037582442, 0.03385026, -0.07331349, 0.026329678, -0.059664503, 0.0, 0.008259046, 0.0040668105] +gra[3][7][11] = [-0.10968651, -0.049679715, -0.091641724, 0.0135395825, 0.10426791, -0.04648871, 0.03418339, 0.00646766, 0.0015268069, -0.007024522, -0.00857213] +gra[3][7][12] = [-8.94831E-4, -0.048872735, -0.07393748, -0.021211132, 0.06579353, -0.028791236, 0.0055351285, 0.09356796, -0.0016438005, -0.007024522, -0.010688173] +gra[3][7][13] = [0.031788692, -0.047926236, 0.005738914, -0.06011968, 0.024804078, -0.045847956, 0.0027329288, 0.06296933, -0.0016438005, -0.0018316432, -0.030455668] +gra[3][7][14] = [-0.0017417222, 0.025195358, 0.0070165694, 3.3167237E-4, 8.169799E-4, 7.0631783E-4, 0.11188539, 0.02086204, -0.0019475454, -0.0010469037, -0.06419305] +gra[3][8][3] = [-0.15412576, -0.12789336, -0.20798595, -0.24514237, -0.30613858, -0.2518991] +gra[3][8][4] = [0.111481294, -0.036286652, -0.05985439, -0.017615488, -0.005918055, 4.770551E-4] +gra[3][8][5] = [0.008234154, -0.030956661, -0.07456523, -0.017615488, -0.0025875743, 4.770551E-4] +gra[3][8][6] = [-0.028704194, 0.002314438, -0.0022998422, -0.018571196, -0.003225636, -0.0043171197] +gra[3][8][7] = [-0.011244033, -0.016609045, -0.057324897, -0.01446133, -6.4382935E-4, -0.008020589] +gra[3][8][8] = [-0.15412576, -0.12789336, -0.20798595, -0.24514237, -0.30613858, -0.2518991] +gra[3][8][9] = [0.14387159, 0.0015868242, -9.2201936E-4, -0.10608127, -0.04583137, -0.046073522] +gra[3][8][10] = [-0.059995398, 0.09151214, -0.05540722, -0.025675789, -0.004103984, -0.017712904] +gra[3][8][11] = [0.052732036, 0.056370113, 0.025641251, -0.10506861, -0.06615821, -0.022662342] +gra[3][8][12] = [0.01624117, 0.07265478, 0.029413441, -0.06037133, -0.069066934, 0.0031176568] +gra[3][8][13] = [0.08026971, 0.06581602, 0.08241708, -0.07446065, -0.09312223, -0.0033769957] +gra[3][8][14] = [-0.061419778, 0.030121334, 0.088266574, 0.019163983, 0.020992978, -0.030493984] +gra[3][9][3] = [-0.021003172, -0.065597035, -0.16535676, -0.25871342, -0.29838958, -0.24498987, -0.3047002, -0.23739927, -0.08985106, -0.117371395, -0.15238857] +gra[3][9][4] = [-0.056511734, -0.050796784, 0.21606155, -0.04224682, -0.02565812, -0.027460705, 0.010665469, 0.02652775, -0.002650973, -0.012879585, 0.010691209] +gra[3][9][5] = [-0.03898397, -0.04384581, 0.10932791, -0.067109935, -0.025863424, -0.027267672, 0.013148798, 0.02652775, 9.0512355E-12, -0.011506752, 0.016392484] +gra[3][9][6] = [-0.026048012, -0.006928928, -0.04699468, -0.0012417085, -0.02850939, -0.02125135, 0.0, 0.0, -0.0045685717, -0.0016083805, -0.0012626576] +gra[3][9][7] = [-0.0125679895, -0.037647933, 0.01847256, -0.069894865, -0.022533493, -0.01942112, 0.007643792, 0.031788614, -1.4217442E-4, -0.007257821, -0.01844468] +gra[3][9][8] = [-0.011030057, -0.027001118, -0.016916927, 0.054259032, 0.046004623, 0.027047869, -0.027326334, 0.019558845, 0.0, 0.005164899, -0.010124459] +gra[3][9][9] = [-0.021003172, -0.065597035, -0.16535676, -0.25871342, -0.29838958, -0.24498987, -0.3047002, -0.23739927, -0.08985106, -0.117371395, -0.15238857] +gra[3][9][10] = [-0.009904943, 0.08271649, -6.605489E-4, -0.05324988, 0.059516188, -0.03834217, 0.021282855, 0.025870191, 0.0, 0.010368334, -0.0012901137] +gra[3][9][11] = [-0.08583092, 0.0026931786, 0.055489168, 0.069315575, 0.06542832, -0.09547536, 0.08125984, -0.030693594, -0.001936182, -0.0025422391, -0.014482316] +gra[3][9][12] = [-0.002932982, -0.029178634, 0.02658984, 0.0762058, -0.03144419, -0.09210541, 0.042617302, -0.0028532404, -0.0051067895, -0.0025422391, -8.367696E-4] +gra[3][9][13] = [0.03893423, -0.02479623, 0.12503432, -0.0042038285, -0.05592381, -0.072107635, 0.040826432, -0.014562405, -0.0051067895, 0.0026506395, -0.054437894] +gra[3][9][14] = [-0.021795094, 0.02577257, -0.031111931, 0.06994245, 0.031381827, 0.060158834, 0.10587171, 0.017498635, 0.0, 0.0, -0.07941664] +gra[3][10][3] = [-0.1329772, -0.15913084, -0.33212945, -0.38628212, -0.17085952, -0.14248645, -0.11814857] +gra[3][10][4] = [0.09687643, -0.03531511, -0.017615488, -0.050107636, 0.0, 0.008792369, -0.04500673] +gra[3][10][5] = [-0.0066100135, -0.02998512, -0.017615488, -0.07391735, 0.0, 0.008792369, -0.028043877] +gra[3][10][6] = [-0.028704194, -0.006928928, -0.020728316, -0.0068972483, -0.0061344863, 0.004557554, -0.022639498] +gra[3][10][7] = [-0.046813827, -0.02181504, -0.01446133, -0.042420294, -0.0033213743, 0.0016988069, -0.00995356] +gra[3][10][8] = [-0.003417932, -0.009956081, 0.033852994, -0.012161942, 0.0017278524, 0.0013890374, -0.0040250965] +gra[3][10][9] = [0.07826676, 0.0033093924, -0.0119619025, -0.03593995, 0.0, 0.009920094, -0.034691177] +gra[3][10][10] = [-0.1329772, -0.15913084, -0.33212945, -0.38628212, -0.17085952, -0.14248645, -0.11814857] +gra[3][10][11] = [0.015245715, 0.13007498, -0.116307035, -0.009605885, -0.006525742, -0.1280925, 0.07482027] +gra[3][10][12] = [-0.0031260774, 0.08639123, -0.07817442, -0.034333423, -0.008802207, -0.061089545, 0.08547191] +gra[3][10][13] = [0.07543126, 0.08516402, -0.07825824, -0.05238478, -0.005011603, -0.08016144, 0.08822032] +gra[3][10][14] = [-0.043887418, 0.005256214, 0.014653939, 0.08381868, -0.021312775, 0.0047443355, 0.041867867] +gra[3][11][3] = [-0.09214447, -0.10365626, -0.052041374, -0.2149998, -0.19054943, -0.13169308, -0.3842526, -0.27320582, -0.08365657, -0.100043, -0.17461441] +gra[3][11][4] = [-0.056511734, -0.05296787, 0.20943795, -0.028145026, -0.02407775, -0.025055174, 0.0059119724, 0.0074535403, 9.0512355E-12, -0.012879585, -0.012467872] +gra[3][11][5] = [-0.037326038, -0.04763788, 0.10435052, -0.05078754, -0.024283057, -0.025055174, 0.008395301, 0.008833618, 9.0512355E-12, -0.012879585, -0.006766601] +gra[3][11][6] = [-0.027569015, -0.006928928, -0.047970586, -0.0033129938, -0.025036301, -0.019172352, 0.0, 0.0, -0.0045685717, -0.0016083805, -0.0012626576] +gra[3][11][7] = [-0.012654685, -0.048454355, 0.0369806, -0.07753024, -0.023927642, -0.01942112, 0.0064100344, 0.007928713, -9.331818E-4, -0.00948236, -0.01761809] +gra[3][11][8] = [-0.017691867, -0.028658904, -0.015097424, 0.023459015, 0.08073837, 0.033852994, -0.03048157, 0.042773336, -0.0017965699, 0.011501777, 0.013622059] +gra[3][11][9] = [-0.036216546, -0.02235225, 0.23496085, -0.04552784, -0.011887079, -0.021881483, 0.008733615, 0.016309183, 9.0512355E-12, -0.0077277506, -0.0013032085] +gra[3][11][10] = [-2.7178368E-4, -0.06855495, 0.027399302, -0.008799138, 0.102962606, -0.09111658, -0.05898697, 0.083916046, 0.0024555703, 0.023591425, -0.0036736613] +gra[3][11][11] = [-0.09214447, -0.10365626, -0.052041374, -0.2149998, -0.19054943, -0.13169308, -0.3842526, -0.27320582, -0.08365657, -0.100043, -0.17461441] +gra[3][11][12] = [-0.04195919, -0.011814356, 0.034449045, 0.049225464, 0.07797931, -0.022044744, 0.020394541, 0.028562825, -0.0016438005, -1.4816411E-4, 0.0416849] +gra[3][11][13] = [-0.019808618, -0.05076483, 0.10389386, -0.009409836, 0.018409714, -0.07892824, 0.0015091486, 0.010321492, -0.0016438005, 0.0026422446, 0.0017031142] +gra[3][11][14] = [0.03876716, 0.024333825, -0.022561122, 0.016644152, 0.006734378, 0.025349773, 0.14653301, 0.040411703, 0.0, 0.0, -0.09829482] +gra[3][12][3] = [-0.11387451, -0.15722544, -0.17891133, -0.31314385, -0.25551414, -0.19353133, -0.33349663, -0.29827237, -0.098324604, -0.13416855, -0.2571352] +gra[3][12][4] = [-0.056511734, -0.04987319, 0.20671012, -0.022405924, -0.015052397, -0.030014966, 0.0035608534, 0.011555983, 5.769341E-4, -0.010628307, -0.020405654] +gra[3][12][5] = [-0.037326038, -0.0445432, 0.09530988, -0.04893767, -0.0135707855, -0.030014966, 0.006044182, 0.010669847, 9.0512355E-12, -0.010628307, -0.01856464] +gra[3][12][6] = [-0.027659994, -0.006928928, -0.0524088, 0.006312619, -0.025585316, -0.019172352, 0.0, 0.0, -0.008284481, -0.0016083805, -0.0012626576] +gra[3][12][7] = [-0.012654685, -0.047222544, 0.025782429, -0.048584756, -0.009962272, -0.021901015, 0.002915925, 0.0064832703, -1.4217442E-4, -0.007231083, -0.031687073] +gra[3][12][8] = [-0.020402493, -0.024556305, -0.015575819, 0.055016555, 0.051806875, 0.033852994, -0.04555193, 0.05035637, 0.0, 0.0031901782, 0.0090892585] +gra[3][12][9] = [-0.033509176, -0.019306917, 0.20735021, -0.005000181, 0.0028634723, -0.029321171, 0.0063824966, 0.024137018, 9.0512355E-12, -0.005476473, -0.013007009] +gra[3][12][10] = [0.011302657, -0.07017854, 0.023033805, 0.015241189, 0.08098403, -0.06386582, -0.012394784, 0.10541846, 0.002381391, 0.011636256, -0.0048150206] +gra[3][12][11] = [-0.044727597, -0.0034954008, 0.13743237, -0.05609268, -0.01628504, -0.02166985, 0.0032368335, 0.023991466, 7.6891546E-4, -0.005476473, -0.0042543197] +gra[3][12][12] = [-0.11387451, -0.15722544, -0.17891133, -0.31314385, -0.25551414, -0.19353133, -0.33349663, -0.29827237, -0.098324604, -0.13416855, -0.2571352] +gra[3][12][13] = [0.10053188, -0.03359089, 0.12973118, -0.013946263, -0.025900569, -0.06678694, -0.013508427, 0.049437862, -0.0016438005, 0.0012229871, 0.013154621] +gra[3][12][14] = [0.038463943, 0.023034256, 0.0101122, 0.026391888, 0.021977, 0.03366942, 0.13214202, 0.020360775, 0.0, -2.2505768E-11, -0.06410605] +gra[3][13][3] = [-0.11463873, -0.06754701, -0.14183052, -0.2948737, -0.20204443, -0.2639251, -0.29475674, -0.24990667, -0.10658293, -0.13451692, -0.2545104] +gra[3][13][4] = [-0.055579588, -0.051395856, 0.22241642, -4.059528E-4, -0.024469772, -0.030014966, 0.007155873, 0.016494725, 9.0512355E-12, -0.012879585, -0.011571843] +gra[3][13][5] = [-0.036240384, -0.046065867, 0.111016184, -0.028104905, -0.022988161, -0.030014966, 0.009639202, 0.015608587, 9.0512355E-12, -0.012879585, -0.008721208] +gra[3][13][6] = [-0.025174934, -0.006928928, -0.0555249, 0.0047137234, -0.025065042, -0.019172352, 0.0, 0.0, -0.0045685717, -0.0016083805, -0.0012626576] +gra[3][13][7] = [-0.010334147, -0.04874521, 0.037647445, -0.026584785, -0.01937965, -0.021901015, 0.006510945, 0.014144414, -1.4217442E-4, -0.007257821, -0.024563886] +gra[3][13][8] = [-0.017435485, -0.025563205, -0.018197112, 0.0629446, 0.07925679, 0.033852994, -0.050028473, 0.046572696, 0.0019757631, 0.005164899, -0.020037295] +gra[3][13][9] = [-0.029525224, -0.020829584, 0.22252294, 0.019572949, -0.006553903, -0.029321171, 0.009977517, 0.026871076, 9.0512355E-12, -0.0077277506, -0.0016536638] +gra[3][13][10] = [0.009529866, -0.06829155, -0.021803388, -3.047292E-4, 0.06953493, -0.066966124, 0.026328605, 0.09766341, 0.002381391, 0.015515008, 0.016775005] +gra[3][13][11] = [-0.045481637, -0.009793117, 0.1632958, -0.023134613, -0.032108083, -0.01738065, 0.0056135817, 0.030979762, 7.6891546E-4, -0.0077277506, 0.007776879] +gra[3][13][12] = [-0.019675596, -0.026981357, 0.1308571, 0.017473653, -0.0012450293, -0.026860807, 0.009749667, 0.03448535, -1.4217423E-4, -0.007257821, -0.008489365] +gra[3][13][13] = [-0.11463873, -0.06754701, -0.14183052, -0.2948737, -0.20204443, -0.2639251, -0.29475674, -0.24990667, -0.10658293, -0.13451692, -0.2545104] +gra[3][13][14] = [-0.01722709, 0.032380998, -0.09424367, 0.027259992, -0.0021256413, 0.0184861, 0.09748994, 0.011856999, 0.0, -0.0013691243, -0.067090854] +gra[3][14][3] = [0.44593877, -0.42780378, -0.3339555, -0.041055933, -0.23774712, -0.11392724, -0.13324136, -0.17313966] +gra[3][14][4] = [-0.050213013, 0.15398705, -0.018582903, -0.023101933, -0.03499973, 0.0020432305, -0.036024883, -0.046984877] +gra[3][14][5] = [-0.057042483, 0.058396146, -0.04672017, -0.01777194, -0.03499973, -0.0048348554, -0.01806613, -0.046984877] +gra[3][14][6] = [-0.055422466, -0.038651124, -0.007950703, -0.006928928, 0.03158737, -0.0045685717, -0.04463454, -0.018571196] +gra[3][14][7] = [-0.046599343, -9.01673E-4, -0.039705895, -0.009601859, -0.027448343, -0.004834855, -9.093541E-4, -0.03576694] +gra[3][14][8] = [-0.0027976157, 0.04381682, 0.11873355, -0.014299808, -0.011449244, 0.008354038, -0.0040250965, 0.030145828] +gra[3][14][9] = [-0.03965546, 0.16102295, 0.032597095, 0.018370427, -0.01859632, -0.0048348554, -0.023131285, -0.033222895] +gra[3][14][10] = [-0.017961588, 0.074451886, -0.015154174, -0.06398133, -0.012447634, 0.0, -0.006365354, -0.005879982] +gra[3][14][11] = [-0.043990437, 0.09489804, 0.035154194, 0.025853252, -0.019943671, -0.0040659397, -0.029561525, -0.038219962] +gra[3][14][12] = [-0.05016438, 0.06303118, 0.037071317, 0.012375867, -0.028478147, -0.008058093, -0.0030354094, -0.03576694] +gra[3][14][13] = [-0.042344883, 0.07444154, 0.0095811095, 0.018891037, -0.026047245, -0.008058093, -0.002521744, -0.03576694] +gra[3][14][14] = [0.44593877, -0.42780378, -0.3339555, -0.041055933, -0.23774712, -0.11392724, -0.13324136, -0.17313966] +gra[4][0][0] = [-0.068558656] +gra[4][0][1] = [0.11764526] +gra[4][0][2] = [-0.041710425] +gra[4][0][3] = [0.0015610885] +gra[4][0][4] = [-0.068558656] +gra[4][1][0] = [0.0022879262, -0.001958814, 6.20738E-4, 4.4457944E-11, -0.0021720084, -9.267408E-4] +gra[4][1][1] = [-0.04198974, -0.15868439, -0.21871509, -0.18274719, -0.15518439, -0.21593317] +gra[4][1][2] = [0.049908973, -0.060012273, 0.0132662775, -0.026443, -0.0023895265, -0.048535112] +gra[4][1][3] = [0.046850376, -0.0399934, 0.0010957995, -0.019397447, -0.00574457, -0.047918677] +gra[4][1][4] = [-0.04198974, -0.15868439, -0.21871509, -0.18274719, -0.15518439, -0.21593317] +gra[4][2][0] = [-0.0023283148, 0.0, 6.4378075E-4, 0.0042653317, -0.008087347, 0.0031306578, 2.969677E-4, -3.050395E-11, 0.0012653338, 0.0024696218, -0.009896872] +gra[4][2][1] = [-5.13921E-4, -3.7906157E-11, -0.045836035, -0.0041412255, -0.02294093, -0.0028272104, -0.014439816, 0.035186574, -7.720956E-4, 0.0035228117, -0.034932088] +gra[4][2][2] = [-0.1527792, -0.16105321, -0.11441286, -0.18570481, -0.263671, -0.16376895, -0.27147496, -0.28773913, -0.20254132, -0.14136088, -0.26420903] +gra[4][2][3] = [-0.004744318, -0.028696006, -0.047554154, -0.029328587, -0.0108278785, 0.0, 0.012152899, -0.009935487, -0.011329165, -0.0052225264, -0.12551941] +gra[4][2][4] = [-0.1527792, -0.16105321, -0.11441286, -0.18570481, -0.263671, -0.16376895, -0.27147496, -0.28773913, -0.20254132, -0.14136088, -0.26420903] +gra[4][3][0] = [-0.0023283148, 0.0, -2.546209E-4, 6.20738E-4, 0.0, 7.4807646E-11, 2.969678E-4, -6.10079E-11, 0.0012653338, 2.1146203E-5, -0.007859215] +gra[4][3][1] = [-5.13921E-4, 0.0, -0.06842534, -0.010353064, -0.035776734, -0.004779683, -0.043350175, 0.079702035, -7.720956E-4, 0.0, -0.09211975] +gra[4][3][2] = [-0.0050252816, -0.021862686, -0.05439042, 0.0, -0.0197254, -0.011747527, -0.010851742, 0.0045674103, -0.008396367, 0.016079204, -0.045323726] +gra[4][3][3] = [-0.15722692, -0.15284958, -0.1687409, -0.21507952, -0.29694274, -0.18014798, -0.21342382, -0.375148, -0.18912332, -0.1695773, -0.22369294] +gra[4][3][4] = [-0.15722692, -0.15284958, -0.1687409, -0.21507952, -0.29694274, -0.18014798, -0.21342382, -0.375148, -0.18912332, -0.1695773, -0.22369294] +gra[4][5][4] = [0.014722959, 0.18275993, -0.0636386, -0.22962478, -0.28831062, -0.19243455, -0.20865887, -0.33900928, -0.098217, -0.11010328, -0.17192467] +gra[4][5][5] = [0.014722959, 0.18275993, -0.0636386, -0.22962478, -0.28831062, -0.19243455, -0.20865887, -0.33900928, -0.098217, -0.11010328, -0.17192467] +gra[4][5][6] = [-0.09911031, -0.02584689, 0.026706154, 0.0064545716, 0.030568566, -0.037597638, 0.0030047887, 0.024394596, 0.0, 0.0048741507, -0.039634243] +gra[4][5][7] = [0.010370938, 0.0097888755, -0.04665061, -0.21829283, -0.03931838, -0.12108123, -0.007544473, -0.10600374, -0.0016438005, -4.6656025E-4, -0.03369571] +gra[4][5][8] = [-0.04795964, -0.08748845, 0.012514722, 0.054292858, -0.046950795, -0.041652158, -0.05227269, 0.042276658, 0.0, -0.004978219, 0.0038085831] +gra[4][5][9] = [0.118447594, -0.048133302, 0.116975956, -0.10744196, -0.042570457, -0.110149436, -0.036007646, -0.02457235, -6.042392E-4, -1.444224E-4, -0.010697803] +gra[4][5][10] = [-0.008554228, 0.041264854, -0.11523878, -0.06722138, 0.020829812, -0.042462237, 0.0072704786, -0.017995058, 0.0, 0.012700643, 0.022817375] +gra[4][5][11] = [-0.12169014, -0.030582886, -0.02897325, -0.031979937, -0.023385987, -0.12917747, 0.031189587, -0.050955363, -6.042392E-4, -0.0039698915, 0.008385656] +gra[4][5][12] = [9.146053E-6, -0.04193567, -0.034431104, -0.06613156, -0.078815356, -0.11424304, 0.013824362, -0.043248564, 0.0023156772, -0.0039698915, -0.0046529626] +gra[4][5][13] = [0.05273106, -0.021414878, 0.04215588, -0.09433008, -0.10508856, -0.124612965, 0.010319007, -0.06516868, -0.0016438005, 0.0055478574, -0.02379297] +gra[4][5][14] = [-0.0270753, 0.041652158, -0.08693187, 0.055251643, 0.015370078, 0.020085067, 0.103559524, 0.026089558, -1.8203591E-10, 0.0, -0.06919619] +gra[4][6][4] = [-0.35341132, -0.20252663] +gra[4][6][5] = [0.092977405, -0.02442189] +gra[4][6][6] = [-0.35341132, -0.20252663] +gra[4][6][7] = [0.019726846, -0.012724133] +gra[4][6][8] = [-0.10187224, 0.029533952] +gra[4][6][9] = [0.11780503, -0.0030878466] +gra[4][6][10] = [-0.064647116, -0.034098495] +gra[4][6][11] = [0.019633012, -0.035545427] +gra[4][6][12] = [0.083963394, 0.003786453] +gra[4][6][13] = [0.13890627, -0.02833015] +gra[4][6][14] = [-0.08874273, -0.031247089] +gra[4][7][4] = [-0.12397108, 0.014455657, -0.15047927, -0.35617045, -0.0039878795, -0.20469043, -0.30595267, -0.13831393, -0.07891641, -0.14182357, -0.21851322] +gra[4][7][5] = [-0.043149117, -0.0449026, 0.16233759, -0.02765031, -0.02725357, -0.030014966, 0.0047791246, 0.005567723, 9.0512355E-12, -0.0018806041, -0.007157123] +gra[4][7][6] = [-0.022742484, -0.006928928, -0.04051508, -0.003913735, -0.025036301, -0.018571196, -4.731787E-11, 0.0, -9.038228E-4, -0.0016083805, 0.0] +gra[4][7][7] = [-0.12397108, 0.014455657, -0.15047927, -0.35617045, -0.0039878795, -0.20469043, -0.30595267, -0.13831393, -0.07891641, -0.14182357, -0.21851322] +gra[4][7][8] = [-0.059728492, -0.106997676, 0.026846237, -0.013104029, -0.099735364, -0.02959507, -0.0341132, 0.05246252, 0.0, -0.0033622796, 0.005457081] +gra[4][7][9] = [0.08231275, -0.038986813, 0.031845048, -0.091648445, 0.087450445, 0.0071767634, -0.025927924, 0.0230534, -6.042392E-4, -0.006980671, -0.056342095] +gra[4][7][10] = [0.04442288, 0.094747745, -0.1791282, -0.037582442, 0.03385026, -0.07331349, 0.026329678, -0.061193362, 0.0, 0.010591356, 0.0040668105] +gra[4][7][11] = [-0.117329046, -0.046107206, -0.08558342, 0.0135395825, 0.10319102, -0.04648871, 0.03418339, 0.00646766, -6.042392E-4, -0.007024522, -0.00857213] +gra[4][7][12] = [-0.008537363, -0.045300227, -0.06787919, -0.021211132, 0.063573614, -0.028791236, 0.0055351285, 0.09356796, -0.0016438005, -0.007024522, -0.010688173] +gra[4][7][13] = [0.024146158, -0.044353727, 0.011797216, -0.06011968, 0.023727208, -0.045847956, 0.0027329288, 0.06296933, -0.0016438005, 0.0024932271, -0.026049387] +gra[4][7][14] = [-0.0017417222, 0.027644029, 0.005157385, 3.3167237E-4, 8.169799E-4, 7.0631783E-4, 0.10761113, 0.02086204, -0.0019475454, -0.0010469037, -0.06419305] +gra[4][8][4] = [-0.11711414, -0.040968277, -0.20798595, -0.24514237, -0.30613858, -0.24771409] +gra[4][8][5] = [0.08426701, -0.028518835, -0.059163406, -0.017615488, -0.0025875743, 4.770551E-4] +gra[4][8][6] = [-0.028704194, 0.002314438, -0.0022998422, -0.018571196, -0.003225636, -0.0043171197] +gra[4][8][7] = [-0.016012147, -0.013587542, -0.057324897, -0.01446133, -6.4382935E-4, -0.008020589] +gra[4][8][8] = [-0.11711414, -0.040968277, -0.20798595, -0.24514237, -0.30613858, -0.24771409] +gra[4][8][9] = [0.1499299, 0.005159328, -9.2201936E-4, -0.10608127, -0.04583137, -0.046073522] +gra[4][8][10] = [-0.07247772, 0.099027045, -0.05540722, -0.025675789, -0.004103984, -0.017712904] +gra[4][8][11] = [0.05879034, 0.059942614, 0.025641251, -0.10506861, -0.058699712, -0.022662342] +gra[4][8][12] = [0.022299469, 0.076227285, 0.029413441, -0.06037133, -0.07426226, 0.0031176568] +gra[4][8][13] = [0.086328015, 0.069388516, 0.08241708, -0.07446065, -0.09312223, 0.0010292889] +gra[4][8][14] = [-0.063278966, 0.032570012, 0.088266574, 0.019163983, 0.020992978, -0.030493984] +gra[4][9][4] = [-0.10686798, 0.02132809, -0.12834515, -0.25871342, -0.29838958, -0.24498987, -0.3047002, -0.23739927, -0.08985106, -0.117371395, -0.14820358] +gra[4][9][5] = [-0.051906407, -0.04059518, 0.18360823, -0.050654702, -0.025863424, -0.027267672, 0.01188374, 0.02652775, 9.0512355E-12, -0.011506752, 0.016392484] +gra[4][9][6] = [-0.026048012, -0.006928928, -0.04699468, -0.0012417085, -0.02850939, -0.02125135, 0.0, 0.0, -9.038228E-4, -0.0016083805, -0.0012626576] +gra[4][9][7] = [-0.0060619293, -0.03462643, 0.013704447, -0.069894865, -0.022533493, -0.01942112, 0.007643792, 0.031788614, -1.4217423E-4, -0.007257821, -0.01844468] +gra[4][9][8] = [-0.012241036, -0.027001118, -0.008912949, 0.059138477, 0.046004623, 0.027047869, -0.027326334, 0.019558845, 0.0, 0.005164899, -0.010124459] +gra[4][9][9] = [-0.10686798, 0.02132809, -0.12834515, -0.25871342, -0.29838958, -0.24498987, -0.3047002, -0.23739927, -0.08985106, -0.117371395, -0.14820358] +gra[4][9][10] = [-0.009904943, 0.09023139, -0.013142893, -0.05324988, 0.059516188, -0.03834217, 0.021282855, 0.024341332, 0.0, 0.012700643, -0.0012901137] +gra[4][9][11] = [-0.093473464, 0.0062656836, 0.061547473, 0.069315575, 0.064351425, -0.09547536, 0.08125984, -0.030693594, -0.004067228, -0.0025422391, -0.014482316] +gra[4][9][12] = [-0.010575512, -0.025606124, 0.03264815, 0.0762058, -0.03366411, -0.09210541, 0.042617302, -0.0028532404, -0.0051067895, -0.0025422391, -8.367696E-4] +gra[4][9][13] = [0.0312917, -0.02122373, 0.13109264, -0.0042038285, -0.057000685, -0.072107635, 0.040826432, -0.014562405, -0.0051067895, 0.0069755097, -0.05003162] +gra[4][9][14] = [-0.021795094, 0.028221246, -0.032971114, 0.06994245, 0.031381827, 0.060158834, 0.10159744, 0.017498635, 0.0, 0.0, -0.07941664] +gra[4][10][4] = [-0.095965564, -0.07220575, -0.33212945, -0.38628212, -0.17085952, -0.13830143, -0.2040134] +gra[4][10][5] = [0.072923616, -0.027547294, -0.017615488, -0.058515526, 0.0, 0.008792369, -0.042624243] +gra[4][10][6] = [-0.028704194, -0.006928928, -0.020728316, -0.0068972483, -0.0022654566, 0.004557554, -0.022639498] +gra[4][10][7] = [-0.051581945, -0.018793536, -0.01446133, -0.042420294, -0.0033213743, 0.0016988069, -0.003447506] +gra[4][10][8] = [0.0045860405, -0.009956081, 0.033852994, -0.0072824936, 0.0028213095, 0.0013890374, -0.0052360767] +gra[4][10][9] = [0.073498644, 0.007381615, -0.0119619025, -0.03593995, 0.0, 0.009920094, -0.034691177] +gra[4][10][10] = [-0.095965564, -0.07220575, -0.33212945, -0.38628212, -0.17085952, -0.13830143, -0.2040134] +gra[4][10][11] = [0.02130402, 0.13364749, -0.116307035, -0.009605885, -0.006525742, -0.1280925, 0.06717774] +gra[4][10][12] = [0.0029322281, 0.08996374, -0.07817442, -0.034333423, -0.008802207, -0.061089545, 0.077829376] +gra[4][10][13] = [0.08148956, 0.08873653, -0.07825824, -0.05238478, -0.005011603, -0.075755164, 0.08057779] +gra[4][10][14] = [-0.045746606, 0.0077048903, 0.014653939, 0.08381868, -0.021312775, 0.0047443355, 0.041867867] +gra[4][11][4] = [-0.17800932, -0.016731167, -0.015029761, -0.2149998, -0.19054943, -0.13169308, -0.3842526, -0.27320582, -0.08365657, -0.100043, -0.17042941] +gra[4][11][5] = [-0.051906407, -0.04520005, 0.1781785, -0.035385706, -0.024283057, -0.025055174, 0.007130244, 0.008833618, 9.0512355E-12, -0.012879585, -0.006766601] +gra[4][11][6] = [-0.027569015, -0.006928928, -0.047970586, -0.0033129938, -0.025036301, -0.019172352, 0.0, 0.0, -9.038228E-4, -0.0016083805, -0.0012626576] +gra[4][11][7] = [-0.006148626, -0.04543285, 0.032212485, -0.07753024, -0.023927642, -0.01942112, 0.0064100344, 0.007928713, -9.331816E-4, -0.00948236, -0.01761809] +gra[4][11][8] = [-0.018902846, -0.028658904, -0.007093447, 0.028338464, 0.08073837, 0.033852994, -0.03048157, 0.042773336, -0.0017965699, 0.011501777, 0.013622059] +gra[4][11][9] = [-0.036216546, -0.018280027, 0.23019274, -0.04552784, -0.011887079, -0.021881483, 0.008733615, 0.016309183, 9.0512355E-12, -0.0077277506, -0.0013032085] +gra[4][11][10] = [0.0011478947, -0.06855495, 0.029414356, -0.005431766, 0.102962606, -0.09111658, -0.05898697, 0.083916046, 0.0024555703, 0.023591425, -0.0036736613] +gra[4][11][11] = [-0.17800932, -0.016731167, -0.015029761, -0.2149998, -0.19054943, -0.13169308, -0.3842526, -0.27320582, -0.08365657, -0.100043, -0.17042941] +gra[4][11][12] = [-0.04960172, -0.008241851, 0.04050735, 0.049225464, 0.075759396, -0.022044744, 0.020394541, 0.028562825, -0.0016438005, -1.4816411E-4, 0.0416849] +gra[4][11][13] = [-0.027451143, -0.047192324, 0.10995217, -0.009409836, 0.017332839, -0.07892824, 0.0015091486, 0.010321492, -0.0016438005, 0.0069671148, 0.006109395] +gra[4][11][14] = [0.03876716, 0.0267825, -0.024420308, 0.016644152, 0.006734378, 0.025349773, 0.14225875, 0.040411703, 0.0, 0.0, -0.09829482] +gra[4][12][4] = [-0.19973935, -0.070300326, -0.14189972, -0.31314385, -0.25551414, -0.19353133, -0.33349663, -0.29827237, -0.098324604, -0.13416855, -0.2529502] +gra[4][12][5] = [-0.051906407, -0.042105377, 0.17027168, -0.033535838, -0.0135707855, -0.030014966, 0.0047791246, 0.010669847, 9.0512355E-12, -0.010628307, -0.01856464] +gra[4][12][6] = [-0.027659994, -0.006928928, -0.0524088, 0.006312619, -0.025585316, -0.019172352, 0.0, 0.0, -0.0046197325, -0.0016083805, -0.0012626576] +gra[4][12][7] = [-0.006148626, -0.04420104, 0.021014318, -0.048584756, -0.009962272, -0.021901015, 0.002915925, 0.0064832703, -1.4217423E-4, -0.007231083, -0.031687073] +gra[4][12][8] = [-0.021613473, -0.024556305, -0.007571841, 0.059896007, 0.051806875, 0.033852994, -0.04555193, 0.05035637, 0.0, 0.0031901782, 0.0090892585] +gra[4][12][9] = [-0.033509176, -0.015234692, 0.20258209, -0.005000181, 0.0028634723, -0.029321171, 0.0063824966, 0.024137018, 9.0512355E-12, -0.005476473, -0.013007009] +gra[4][12][10] = [0.012722332, -0.07017854, 0.025048874, 0.01860856, 0.08098403, -0.06386582, -0.012394784, 0.10541846, 0.002381391, 0.011636256, -0.0048150206] +gra[4][12][11] = [-0.044727597, -4.738964E-4, 0.13266425, -0.0487614, -0.01628504, -0.02166985, 0.0032368335, 0.023991466, 7.6891546E-4, -0.005476473, -0.0064276056] +gra[4][12][12] = [-0.19973935, -0.070300326, -0.14189972, -0.31314385, -0.25551414, -0.19353133, -0.33349663, -0.29827237, -0.098324604, -0.13416855, -0.2529502] +gra[4][12][13] = [0.09288935, -0.03001839, 0.13578948, -0.013946263, -0.02697745, -0.06678694, -0.013508427, 0.049437862, -0.0016438005, 0.0055478574, 0.017560903] +gra[4][12][14] = [0.038463943, 0.025482932, 0.008253016, 0.026391888, 0.021977, 0.03366942, 0.12786776, 0.020360775, 0.0, -2.2505768E-11, -0.06410605] +gra[4][13][4] = [-0.20050356, 0.019378092, -0.10481889, -0.2948737, -0.20204443, -0.2639251, -0.29475674, -0.24990667, -0.10658293, -0.13451692, -0.2503254] +gra[4][13][5] = [-0.05082075, -0.043628044, 0.18484417, -0.012703076, -0.022988161, -0.030014966, 0.008374145, 0.015608587, 9.0512355E-12, -0.012879585, -0.008721208] +gra[4][13][6] = [-0.025174934, -0.006928928, -0.0555249, 0.0047137234, -0.025065042, -0.019172352, 0.0, 0.0, -9.038228E-4, -0.0016083805, -0.0012626576] +gra[4][13][7] = [-0.0038280855, -0.045723706, 0.032879326, -0.026584785, -0.01937965, -0.021901015, 0.006510945, 0.014144414, -1.4217423E-4, -0.007257821, -0.024563886] +gra[4][13][8] = [-0.018646464, -0.025563205, -0.010193134, 0.06782404, 0.07925679, 0.033852994, -0.050028473, 0.046572696, 0.0019757631, 0.005164899, -0.020037295] +gra[4][13][9] = [-0.029525224, -0.01675736, 0.21775483, 0.019572949, -0.006553903, -0.029321171, 0.009977517, 0.026871076, 9.0512355E-12, -0.0077277506, -0.0016536638] +gra[4][13][10] = [0.010949548, -0.06829155, -0.019788323, 0.0030626338, 0.06953493, -0.066966124, 0.026328605, 0.09766341, 0.002381391, 0.015515008, 0.016775005] +gra[4][13][11] = [-0.045481637, -0.006771613, 0.15852769, -0.015803333, -0.032108083, -0.01738065, 0.0056135817, 0.030979762, 7.6891546E-4, -0.0077277506, 0.005603589] +gra[4][13][12] = [-0.019675596, -0.023959853, 0.12608898, 0.017473653, -0.002820584, -0.026860807, 0.009749667, 0.03448535, -1.4217423E-4, -0.007257821, -0.008489365] +gra[4][13][13] = [-0.20050356, 0.019378092, -0.10481889, -0.2948737, -0.20204443, -0.2639251, -0.29475674, -0.24990667, -0.10658293, -0.13451692, -0.2503254] +gra[4][13][14] = [-0.01722709, 0.034829676, -0.096102856, 0.027259992, -0.0021256413, 0.0184861, 0.093215674, 0.011856999, 0.0, -0.0013691243, -0.067090854] +gra[4][14][4] = [0.45614722, -0.39079216, -0.3339555, 0.04586918, -0.23774712, -0.11392724, -0.21910615, -0.17313966] +gra[4][14][5] = [-0.050213013, 0.1317033, -0.028418455, -0.015334114, -0.03740633, -0.0032232369, -0.032646503, -0.046984877] +gra[4][14][6] = [-0.055422466, -0.038651124, -0.007950703, -0.006928928, 0.03158737, -9.038228E-4, -0.04463454, -0.018571196] +gra[4][14][7] = [-0.046599343, -0.005669792, -0.039705895, -0.006580356, -0.028630001, -0.0048348545, 0.0055967015, -0.03576694] +gra[4][14][8] = [-0.005233598, 0.0518208, 0.12361299, -0.014299808, -0.011449244, 0.008354038, -0.0052360767, 0.030145828] +gra[4][14][9] = [-0.03965546, 0.15625483, 0.032597095, 0.02244265, -0.019777976, -0.0048348554, -0.023131285, -0.033222895] +gra[4][14][10] = [-0.017961588, 0.076466955, -0.011786802, -0.06398133, -0.012447634, 0.0, -0.004945674, -0.005879982] +gra[4][14][11] = [-0.043990437, 0.09012992, 0.042485476, 0.028874757, -0.021125326, -0.0040659397, -0.029561525, -0.038219962] +gra[4][14][12] = [-0.05016438, 0.058263067, 0.037071317, 0.015397372, -0.029659806, -0.008058093, -0.0030354094, -0.03576694] +gra[4][14][13] = [-0.042344883, 0.06967342, 0.0095811095, 0.021912538, -0.027228897, -0.008058093, -0.002521744, -0.03576694] +gra[4][14][14] = [0.45614722, -0.39079216, -0.3339555, 0.04586918, -0.23774712, -0.11392724, -0.21910615, -0.17313966] +gra[5][0][0] = [-0.041981116] +gra[5][0][1] = [0.11165683] +gra[5][0][2] = [-0.034699466] +gra[5][0][3] = [-0.02278647] +gra[5][0][4] = [0.008478554] +gra[5][0][5] = [-0.041981116] +gra[5][1][0] = [0.0022879262, -0.011053883, -0.0029869583, 4.4457944E-11, -0.0021720084, 0.0016348341] +gra[5][1][1] = [-0.0048823073, -0.17523552, -0.21583569, -0.18218835, -0.15518439, -0.17397918] +gra[5][1][2] = [0.06058336, -0.05580195, 0.016498303, -0.026443, -0.0023895265, -0.05305188] +gra[5][1][3] = [0.027758041, -0.051798172, -0.024388602, -0.019397447, -0.00574457, -0.07174558] +gra[5][1][4] = [0.06279293, -0.035783082, 0.011646223, -0.019397447, -0.00574457, -0.047943484] +gra[5][1][5] = [-0.0048823073, -0.17523552, -0.21583569, -0.18218835, -0.15518439, -0.17397918] +gra[5][2][0] = [-0.003264381, -0.009095069, 6.4378075E-4, 6.57636E-4, -0.008087347, 0.0031306578, 2.969677E-4, -3.050395E-11, 0.006577885, 0.0016814994, -0.0073352964] +gra[5][2][1] = [-5.13921E-4, -3.7906157E-11, -0.034460317, -0.0041412255, -0.02294093, -0.0028272104, -0.014439816, 0.035186574, -7.720956E-4, 0.0035228117, -0.03578559] +gra[5][2][2] = [-0.1457395, -0.17760435, -0.07730542, -0.1828254, -0.2647875, -0.16321008, -0.27147496, -0.27251524, -0.22298351, -0.12651624, -0.22225499] +gra[5][2][3] = [-0.0016788694, -0.038602162, -0.05481774, -0.024850672, -0.02118981, 0.0, 0.0043394, -0.00686435, -0.009372383, -0.0052225264, -0.14019503] +gra[5][2][4] = [-0.004744318, -0.028696006, -0.04212549, -0.023079613, 0.008764084, -0.0016386209, 0.008595209, -0.014020145, -0.011329165, 0.01450398, -0.14975825] +gra[5][2][5] = [-0.1457395, -0.17760435, -0.07730542, -0.1828254, -0.2647875, -0.16321008, -0.27147496, -0.27251524, -0.22298351, -0.12651624, -0.22225499] +gra[5][3][0] = [-0.003264381, -0.009095069, -2.546209E-4, -0.0029869583, -0.003558128, 0.0031306578, 2.969677E-4, -6.10079E-11, 0.006577885, -7.669762E-4, -0.00529764] +gra[5][3][1] = [-5.13921E-4, 0.0, -0.055911075, -0.010353064, -0.043891303, -0.004779683, -0.048092224, 0.07863838, -7.720956E-4, 0.0, -0.081802025] +gra[5][3][2] = [-0.0050252816, -0.018022431, -0.0586132, 0.0, -0.025096912, -0.010560441, -0.010851742, 0.003503757, -0.008396367, 0.016079204, -0.051743556] +gra[5][3][3] = [-0.15018721, -0.21722075, -0.16214848, -0.23871076, -0.3606194, -0.1825599, -0.2269295, -0.40583122, -0.22281976, -0.16284533, -0.23139495] +gra[5][3][4] = [-0.004744318, -0.026590846, 0.0044537648, -0.016619466, -0.014093055, -0.0016386209, -0.014388094, -0.010515601, -0.014348841, 0.0076769954, 0.06554818] +gra[5][3][5] = [-0.15018721, -0.21722075, -0.16214848, -0.23871076, -0.3606194, -0.1825599, -0.2269295, -0.40583122, -0.22281976, -0.16284533, -0.23139495] +gra[5][4][0] = [-0.003264381, -0.009095069, 0.002269707, -0.0029869583, 0.0, 7.4807646E-11, 2.969678E-4, -6.10079E-11, 0.006577885, 0.0016814994, -0.00529764] +gra[5][4][1] = [-5.13921E-4, 0.0, -0.055783495, -0.010353064, -0.035753258, -0.004779683, -0.043350175, 0.07863838, -7.720956E-4, 0.0, -0.09297326] +gra[5][4][2] = [-0.005025282, -0.015917271, -0.072601005, 0.0, -0.022037786, -0.008486157, -0.010851742, 0.0037559327, -0.008396367, 0.01512564, -0.04806168] +gra[5][4][3] = [-0.007702251, -0.01236854, -0.09266366, 0.0, -0.013876671, -0.0062228492, -0.0065214084, -2.5217576E-4, -0.017297493, 0.014535915, -0.03168124] +gra[5][4][4] = [-0.14797053, -0.17172992, -0.13163346, -0.21220012, -0.2980593, -0.17958912, -0.20716432, -0.35681802, -0.2095655, -0.15473267, -0.22386813] +gra[5][4][5] = [-0.14797053, -0.17172992, -0.13163346, -0.21220012, -0.2980593, -0.17958912, -0.20716432, -0.35681802, -0.2095655, -0.15473267, -0.22386813] +gra[5][6][5] = [-0.273783, -0.19260272] +gra[5][6][6] = [-0.273783, -0.19260272] +gra[5][6][7] = [0.026080359, -0.05859648] +gra[5][6][8] = [-0.055209685, 0.026170224] +gra[5][6][9] = [0.10992134, -0.022323119] +gra[5][6][10] = [-0.050101317, -0.028544003] +gra[5][6][11] = [0.005098313, -0.056581404] +gra[5][6][12] = [0.07325858, -0.028917471] +gra[5][6][13] = [0.12126222, -0.052550822] +gra[5][6][14] = [-0.18744022, -0.021810113] +gra[5][7][5] = [-0.088803455, 0.012399701, -0.18343398, -0.33039725, 0.0035305163, -0.20047185, -0.29768315, -0.13658378, -0.07891641, -0.12767604, -0.21282771] +gra[5][7][6] = [-0.009979254, -0.012053755, -0.037562795, -0.0026720262, -0.029374257, -0.011606998, 0.0022069581, 0.0, -9.038228E-4, -0.0016083805, 0.0] +gra[5][7][7] = [-0.088803455, 0.012399701, -0.18343398, -0.33039725, 0.0035305163, -0.20047185, -0.29768315, -0.13658378, -0.07891641, -0.12767604, -0.21282771] +gra[5][7][8] = [-0.03904423, -0.104260705, 0.029854566, 0.018256059, -0.099735364, -0.02959507, -0.0341132, 0.05730655, 3.9559263E-12, -0.0033622796, 0.005457081] +gra[5][7][9] = [0.056280468, -0.04836492, 0.024749145, -0.11790468, 0.080051094, 0.009676195, -0.023595946, 0.02369406, 4.957353E-4, -0.006980671, -0.056342095] +gra[5][7][10] = [0.042196833, 0.10275036, -0.16647932, -0.029836236, 0.03385026, -0.07331349, 0.025126554, -0.061193362, 0.0, 0.010591356, 0.0040668105] +gra[5][7][11] = [-0.14350367, -0.06622134, -0.09880382, -0.029879933, 0.09920868, -0.043989282, 0.03849998, 0.00678799, -6.042392E-4, -0.008943624, -0.00857213] +gra[5][7][12] = [-0.034875587, -0.068832435, -0.078401625, -0.072721116, 0.059591286, -0.026291808, 0.007867106, 0.09388829, -0.0016438005, -0.007024522, -0.010688173] +gra[5][7][13] = [0.014372572, -0.05017042, 0.0039873943, -0.12054504, 0.013673367, -0.0408491, 0.007396889, 0.06328966, -0.0016438005, -0.0025402955, -0.030455668] +gra[5][7][14] = [-0.01984039, 0.02907966, -0.0645227, 0.006852205, 8.169799E-4, 7.0631783E-4, 0.10761113, 0.02086204, -0.0019475454, -0.0010469037, -0.06419305] +gra[5][8][5] = [-0.15006886, -0.043024227, -0.18221274, -0.24092379, -0.30613858, -0.2420286] +gra[5][8][6] = [-0.027445583, -0.0028103888, -9.990334E-6, -0.011606998, -0.0011211394, -0.0043171197] +gra[5][8][7] = [0.02187673, -0.011981823, -0.044713516, -0.01446133, -6.4382935E-4, -0.008020589] +gra[5][8][8] = [-0.15006886, -0.043024227, -0.18221274, -0.24092379, -0.30613858, -0.2420286] +gra[5][8][9] = [0.14283398, -0.004218774, -0.02915368, -0.10358184, -0.04583137, -0.046073522] +gra[5][8][10] = [-0.059828877, 0.10702966, -0.047661014, -0.025675789, -0.004103984, -0.017712904] +gra[5][8][11] = [0.04556992, 0.039828476, -0.01777824, -0.10256919, -0.05208561, -0.022662342] +gra[5][8][12] = [0.011777036, 0.052695084, -0.022096545, -0.0578719, -0.07426226, 0.0031176568] +gra[5][8][13] = [0.0785182, 0.06357183, 0.021991728, -0.0694618, -0.09312223, -0.0033769957] +gra[5][8][14] = [-0.13295905, 0.034005634, 0.0947871, 0.019163983, 0.020992978, -0.030493984] +gra[5][9][5] = [-0.07170036, 0.019272119, -0.16129984, -0.2329402, -0.2908712, -0.2407713, -0.29643065, -0.23566912, -0.08985106, -0.10322386, -0.14251806] +gra[5][9][6] = [-0.01328478, -0.012053755, -0.045736067, 2.3667912E-10, -0.030533638, -0.014287151, 0.0022069581, 0.0, -9.038228E-4, -0.0016083805, -0.0012626576] +gra[5][9][7] = [-0.019936927, -0.030214485, 0.05159333, -0.057283472, -0.017923662, -0.01942112, 0.007643792, 0.031788614, -1.4217423E-4, -0.008607306, -0.01844468] +gra[5][9][8] = [-0.011030057, -0.027001118, 0.0011033802, 0.06461177, 0.046004623, 0.027047869, -0.027326334, 0.019558845, 0.0, 0.005164899, -0.010124459] +gra[5][9][9] = [-0.07170036, 0.019272119, -0.16129984, -0.2329402, -0.2908712, -0.2407713, -0.29643065, -0.23566912, -0.08985106, -0.10322386, -0.14251806] +gra[5][9][10] = [-0.012130983, 0.09650746, -5.0354283E-4, -0.045503683, 0.059516188, -0.03834217, 0.020079736, 0.024341332, 0.0, 0.012700643, -0.0012901137] +gra[5][9][11] = [-0.119648054, -0.01384846, 0.04832706, 0.025896091, 0.060369093, -0.09297593, 0.08557644, -0.030373264, -0.004067228, -0.004461341, -0.014482316] +gra[5][9][12] = [-0.036913738, -0.049138326, 0.022125714, 0.024695782, -0.037646454, -0.089605995, 0.044949282, -0.00253291, -0.0051067895, -0.0025422391, -8.367696E-4] +gra[5][9][13] = [0.021518111, -0.027040415, 0.12328279, -0.064629175, -0.067054525, -0.06710879, 0.04549039, -0.014242074, -0.0051067895, 0.0019419871, -0.054437894] +gra[5][9][14] = [-0.03989376, 0.029656876, -0.10265121, 0.076463, 0.031381827, 0.060158834, 0.10159744, 0.017498635, 0.0, 0.0, -0.07941664] +gra[5][10][5] = [-0.12892027, -0.07426171, -0.32791087, -0.3605089, -0.16736083, -0.13261594, -0.1688458] +gra[5][10][6] = [-0.027445583, -0.012053756, -0.013764117, -0.0056555397, 0.0011308042, 0.001230255, -0.009876266] +gra[5][10][7] = [-0.013693058, -0.014381591, -0.01446133, -0.029808905, -0.0033213743, 0.0016988069, -0.0173225] +gra[5][10][8] = [0.023623126, -0.009956081, 0.033852994, -2.0788843E-4, 0.0, 0.0013890374, -0.0040250965] +gra[5][10][9] = [0.1047408, 0.008987334, -0.0119619025, -0.02332857, 0.0, 0.009920094, -0.04130316] +gra[5][10][10] = [-0.12892027, -0.07426171, -0.32791087, -0.3605089, -0.16736083, -0.13261594, -0.1688458] +gra[5][10][11] = [-0.01158366, 0.10779621, -0.1138076, -0.04182522, -0.006525742, -0.1280925, 0.042965613] +gra[5][10][12] = [-0.0075902045, 0.066431545, -0.075674996, -0.08584342, -0.008802207, -0.061089545, 0.05149115] +gra[5][10][13] = [0.073679745, 0.08291984, -0.073259376, -0.11281013, -0.005011603, -0.08016144, 0.07080418] +gra[5][10][14] = [-0.11542668, 0.009140518, 0.014653939, 0.090339206, -0.020985536, 0.0047443355, 0.023769205] +gra[5][11][5] = [-0.14284168, -0.018787133, -0.047984466, -0.18922658, -0.18303105, -0.1274745, -0.3759831, -0.27147567, -0.08365657, -0.08589547, -0.1647439] +gra[5][11][6] = [-0.014805781, -0.012053755, -0.046711966, -0.002071285, -0.029374257, -0.0122081535, 0.0022069581, 0.0, -9.038228E-4, -0.0016083805, -0.0012626576] +gra[5][11][7] = [-0.020023625, -0.041020907, 0.07010135, -0.06491886, -0.01931781, -0.01942112, 0.0064100344, 0.007928713, -9.331816E-4, -0.010831846, -0.01761809] +gra[5][11][8] = [-0.017691867, -0.028658904, 0.011943636, 0.03541307, 0.08073837, 0.033852994, -0.03048157, 0.042773336, -0.0017965699, 0.011501777, 0.013622059] +gra[5][11][9] = [-0.04666806, -0.016674306, 0.25624982, -0.030828482, -0.0072772484, -0.021881483, 0.008733615, 0.017590906, 9.0512355E-12, -0.0077277506, -0.0013032085] +gra[5][11][10] = [-0.0011052168, -0.06855495, 0.05807885, 0.00960215, 0.10751539, -0.09111658, -0.056654997, 0.088760085, 0.0024555703, 0.023591425, -0.0036736613] +gra[5][11][11] = [-0.14284168, -0.018787133, -0.047984466, -0.18922658, -0.18303105, -0.1274745, -0.3759831, -0.27147567, -0.08365657, -0.08589547, -0.1647439] +gra[5][11][12] = [-0.073813826, -0.034093127, 0.007619664, 0.017006135, 0.07177706, -0.019545313, 0.022726525, 0.028883155, -0.0016438005, -1.4816411E-4, 0.0416849] +gra[5][11][13] = [-0.037224732, -0.05300902, 0.10214235, -0.069835186, 0.0072789937, -0.073929384, 0.006173106, 0.010641823, -0.0016438005, 0.0019335924, 0.0017031142] +gra[5][11][14] = [0.02066849, 0.028218132, -0.09410041, 0.023164688, 0.006734378, 0.025349773, 0.14225875, 0.040411703, 0.0, 0.0, -0.09829482] +gra[5][12][5] = [-0.16457172, -0.07235628, -0.17485441, -0.2873706, -0.24799576, -0.18931276, -0.32522708, -0.29654223, -0.098324604, -0.12002101, -0.2472647] +gra[5][12][6] = [-0.01489676, -0.012053755, -0.043595865, 2.3667912E-10, -0.029923273, -0.0122081535, 0.0022069581, 0.0, -0.0046197325, -0.0016083805, -0.0012626576] +gra[5][12][7] = [-0.020023625, -0.03978909, 0.05890319, -0.035973374, -0.0053524417, -0.021901015, 0.002915925, 0.0064832703, -1.4217423E-4, -0.008580568, -0.031687073] +gra[5][12][8] = [-0.020402493, -0.024556305, 0.011465237, 0.06697061, 0.051806875, 0.033852994, -0.04555193, 0.05035637, 0.0, 0.0031901782, 0.0090892585] +gra[5][12][9] = [-0.043960694, -0.013628973, 0.22863914, 0.009699177, 0.007473303, -0.029321171, 0.0063824966, 0.02541874, 9.0512355E-12, -0.005476473, -0.013007009] +gra[5][12][10] = [0.010469224, -0.07017854, 0.05371337, 0.033642486, 0.085536815, -0.06386582, -0.0100628035, 0.1102625, 0.002381391, 0.011636256, -0.0048150206] +gra[5][12][11] = [-0.05133958, 0.0011318253, 0.16840415, -0.03615002, -0.011675207, -0.02166985, 0.0032368335, 0.023991466, -0.001044167, -0.005476473, -0.0042543197] +gra[5][12][12] = [-0.16457172, -0.07235628, -0.17485441, -0.2873706, -0.24799576, -0.18931276, -0.32522708, -0.29654223, -0.098324604, -0.12002101, -0.2472647] +gra[5][12][13] = [0.085241884, -0.03815415, 0.105614424, -0.055080954, -0.037031293, -0.061788075, -0.008844467, 0.049758192, -0.0016438005, 5.143347E-4, 0.013154621] +gra[5][12][14] = [0.020365266, 0.026918562, -0.06142708, 0.032912422, 0.021977, 0.03366942, 0.12786776, 0.020360775, 0.0, -2.2505768E-11, -0.06410605] +gra[5][13][5] = [-0.16533595, 0.017322127, -0.1377736, -0.26910052, -0.19452605, -0.25970653, -0.28648722, -0.24817653, -0.10658293, -0.12036938, -0.2446399] +gra[5][13][6] = [-0.012411703, -0.012053755, -0.046711966, 2.3667912E-10, -0.029374257, -0.0122081535, 0.0022069581, 0.0, -9.038228E-4, -0.0016083805, -0.0012626576] +gra[5][13][7] = [-0.017703082, -0.041311763, 0.0707682, -0.013973404, -0.014769816, -0.021901015, 0.006510945, 0.014144414, -1.4217423E-4, -0.008607306, -0.024563886] +gra[5][13][8] = [-0.017435485, -0.025563205, 0.008843945, 0.07489865, 0.07925679, 0.033852994, -0.050028473, 0.046572696, 0.0019757631, 0.005164899, -0.020037295] +gra[5][13][9] = [-0.039976742, -0.015151639, 0.24381188, 0.034272306, -0.0019440728, -0.029321171, 0.009977517, 0.028152797, 9.0512355E-12, -0.0077277506, -0.0016536638] +gra[5][13][10] = [0.008696433, -0.06829155, 0.008876181, 0.018096564, 0.07408771, -0.066966124, 0.028660584, 0.10250744, 0.002381391, 0.015515008, 0.016775005] +gra[5][13][11] = [-0.052093625, -0.0051658917, 0.1951475, -0.0031919498, -0.027498253, -0.01738065, 0.0056135817, 0.030979762, -0.001044167, -0.0077277506, 0.007776879] +gra[5][13][12] = [-0.033426333, -0.02074841, 0.17519033, 0.03881295, 0.0033648005, -0.026860807, 0.009749667, 0.03448535, -1.4217423E-4, -0.007257821, -0.008489365] +gra[5][13][13] = [-0.16533595, 0.017322127, -0.1377736, -0.26910052, -0.19452605, -0.25970653, -0.28648722, -0.24817653, -0.10658293, -0.12036938, -0.2446399] +gra[5][13][14] = [-0.019099027, 0.036265306, -0.13302729, 0.02993108, -0.0021256413, 0.0184861, 0.093215674, 0.011856999, 0.0, -0.0013691243, -0.067090854] +gra[5][14][5] = [0.33870053, -0.42374685, -0.3081823, 0.04381322, -0.23774712, -0.11392724, -0.18393855, -0.16892108] +gra[5][14][6] = [-0.056123417, -0.037392512, -0.004025396, -0.012053755, 0.022590073, -9.038228E-4, -0.031871308, -0.011606998] +gra[5][14][7] = [-0.046599343, 0.032219093, -0.027094513, -0.0021684086, -0.03156339, -0.0048348545, -0.00827829, -0.03576694] +gra[5][14][8] = [-0.0027976157, 0.07085788, 0.1306876, -0.014299808, -0.011449244, 0.008354038, -0.0040250965, 0.030145828] +gra[5][14][9] = [-0.03965546, 0.18231188, 0.047296464, 0.024048371, -0.01859632, -0.0048348554, -0.033582807, -0.033222895] +gra[5][14][10] = [-0.017961588, 0.10513146, 0.0032471213, -0.06398133, -0.012447634, 0.0, -0.0071987854, -0.005879982] +gra[5][14][11] = [-0.043990437, 0.12674975, 0.055096857, 0.030480476, -0.02856384, -0.005879022, -0.036173504, -0.038219962] +gra[5][14][12] = [-0.05016438, 0.108244374, 0.058410615, 0.018608809, -0.027041396, -0.008058093, -0.01678615, -0.03576694] +gra[5][14][13] = [-0.042344883, 0.11877477, 0.030920394, 0.02512398, -0.026047245, -0.008058093, -0.0131179225, -0.02687248] +gra[5][14][14] = [0.33870053, -0.42374685, -0.3081823, 0.04381322, -0.23774712, -0.11392724, -0.18393855, -0.16892108] +gra[6][0][0] = [-0.0520868] +gra[6][0][1] = [0.020259421] +gra[6][0][2] = [0.061750766] +gra[6][0][3] = [-0.049322076] +gra[6][0][4] = [-0.047721907] +gra[6][0][5] = [-0.02267837] +gra[6][0][6] = [-0.0520868] +gra[6][1][0] = [0.0031002467, 0.0, -0.002491934, 0.0] +gra[6][1][1] = [0.049295496, -0.096181266, -0.3106086, -0.1417824] +gra[6][1][2] = [0.1821127, 0.016802724, -0.02820033, -0.035232577] +gra[6][1][3] = [0.029964954, -0.06578781, -0.049592726, -0.023792237] +gra[6][1][4] = [0.04059021, -0.05346136, -0.05182021, -0.021564748] +gra[6][1][5] = [0.062091388, 0.0072983084, -0.04054499, -0.023792237] +gra[6][1][6] = [0.049295496, -0.096181266, -0.3106086, -0.1417824] +gra[6][2][0] = [0.0048480295, -0.00452922, 0.0, 0.0014561015, -0.0013292956, 0.0027307644] +gra[6][2][1] = [-0.13200061, -0.03380664, 0.054160275, 0.049062416, 7.308892E-4, -0.0031911298] +gra[6][2][2] = [-0.35208467, -0.16831768, -0.22614019, -0.12026106, -0.290771, -0.13263008] +gra[6][2][3] = [0.120697245, -0.035563417, -0.021171255, -0.08613308, -0.022132695, 0.012480451] +gra[6][2][4] = [0.16963743, -0.002057733, -0.026586981, -0.09008388, -0.027917873, 0.029292444] +gra[6][2][5] = [0.23159663, 7.6528685E-4, -0.022216301, -0.07861159, -0.0074495035, 0.020050207] +gra[6][2][6] = [-0.35208467, -0.16831768, -0.22614019, -0.12026106, -0.290771, -0.13263008] +gra[6][3][0] = [-0.0012814738, 0.0, -3.050395E-11, 5.5769994E-4, -0.0013292956, 2.8228876E-4] +gra[6][3][1] = [-0.1598347, -0.05478049, 0.10485771, 0.037768897, -0.026972052, -0.009370182] +gra[6][3][2] = [-0.023424674, -0.027183225, 0.041496, 0.06436883, -0.009571605, 0.040809743] +gra[6][3][3] = [0.0011476716, -0.26414952, -0.35945618, -0.20510413, -0.24622552, -0.16895914] +gra[6][3][4] = [0.23088562, -0.036115717, -0.023082443, -0.042083472, -0.052124094, 0.017406179] +gra[6][3][5] = [0.31934902, 3.0982628E-4, -0.020309359, -0.035055503, -0.033990495, 0.018293062] +gra[6][3][6] = [0.0011476716, -0.26414952, -0.35945618, -0.20510413, -0.24622552, -0.16895914] +gra[6][4][0] = [0.0012428539, 0.0, -3.050395E-11, 0.0030820277, -0.0013292956, 0.0027307644] +gra[6][4][1] = [-0.1598347, -0.05478049, 0.10485771, 0.037768897, -0.026972052, -0.009370182] +gra[6][4][2] = [-0.043183934, -0.02951909, 0.044765297, 0.046928365, -0.009571605, 0.03985618] +gra[6][4][3] = [0.0027969033, -0.023397336, 0.03161981, -0.034741208, -0.0065214084, 0.076208204] +gra[6][4][4] = [-0.012960361, -0.26414952, -0.35635012, -0.20510413, -0.23996602, -0.16895914] +gra[6][4][5] = [0.26218465, -0.026485048, -0.018711757, -0.03359469, -0.03442338, 0.013655335] +gra[6][4][6] = [-0.012960361, -0.26414952, -0.35635012, -0.20510413, -0.23996602, -0.16895914] +gra[6][5][0] = [-0.0017187535, 0.0, -3.050395E-11, 0.0030820277, -0.0013292956, 0.0027307644] +gra[6][5][1] = [-0.10557446, -0.04316245, 0.10485771, 0.029551987, -0.022230003, -0.009370182] +gra[6][5][2] = [-0.054362144, -0.024124099, 0.034623988, 0.03486527, -0.009571605, 0.040809743] +gra[6][5][3] = [-0.02192422, -0.02033821, 0.024495622, -0.034176692, -0.0065214084, 0.077751495] +gra[6][5][4] = [-7.854495E-5, -0.018002346, 0.024495622, -0.03897927, -0.0065214084, 0.077751495] +gra[6][5][5] = [0.080813274, -0.19254147, -0.32115835, -0.19457859, -0.2488755, -0.1573673] +gra[6][5][6] = [0.080813274, -0.19254147, -0.32115835, -0.19457859, -0.2488755, -0.1573673] +gra[6][7][6] = [-0.27941313, 0.13089189, -0.022864778, -0.1894565, -0.24034312, -0.14318681] +gra[6][7][7] = [-0.27941313, 0.13089189, -0.022864778, -0.1894565, -0.24034312, -0.14318681] +gra[6][7][8] = [0.13626447, -0.010419474, 0.11848972, -0.0025080154, -0.054712977, -0.015601757] +gra[6][7][9] = [0.05903992, 0.10894001, 0.07556343, -0.13363816, 0.010766433, 0.02050259] +gra[6][7][10] = [-0.060981005, 0.036591463, -0.052527767, -0.09514893, 0.08080975, 0.015361834] +gra[6][7][11] = [0.081102386, 0.14399157, 0.0072408943, -0.10286424, 0.11418423, 0.03336997] +gra[6][7][12] = [0.0667256, 0.11857207, 0.15086734, -0.070225924, 0.08513642, 0.0020601233] +gra[6][7][13] = [0.043629616, 0.08298377, 0.14208359, -0.058361705, 0.09083914, 4.4306018E-4] +gra[6][7][14] = [0.042588964, 0.014345749, 0.010220808, -0.027615786, 0.028633617, 0.092909016] +gra[6][8][6] = [-0.06964812, -0.019270714, -0.29129454, -0.1736677] +gra[6][8][7] = [6.975997E-4, -0.07367525, 0.03137342, 0.0] +gra[6][8][8] = [-0.06964812, -0.019270714, -0.29129454, -0.1736677] +gra[6][8][9] = [0.0038991189, 0.2681948, 0.018138103, -0.046538807] +gra[6][8][10] = [0.014519747, -0.070914745, 0.060340714, -0.020789059] +gra[6][8][11] = [-4.2284792E-4, 0.23502588, 0.05704205, -0.039293878] +gra[6][8][12] = [-0.0044890544, 0.32156876, 0.055704113, -0.03788216] +gra[6][8][13] = [0.010043448, 0.362284, 0.05945589, -0.05903426] +gra[6][8][14] = [-0.057631012, 0.086892076, -0.053914443, -0.0020066085] +gra[6][9][6] = [-0.23794961, -0.17617488, -0.119824715, -0.13024254, -0.25661156, -0.121382065] +gra[6][9][7] = [-0.08579465, 0.037450098, 0.015798284, 0.025958829, 0.0491146, -0.0017362321] +gra[6][9][8] = [-0.07514248, 0.080687106, 0.023700405, -0.053454973, -0.02913708, 0.0046982104] +gra[6][9][9] = [-0.23794961, -0.17617488, -0.119824715, -0.13024254, -0.25661156, -0.121382065] +gra[6][9][10] = [-0.032659143, 0.065354556, 0.035408407, 0.034957655, 0.073601834, 0.017471122] +gra[6][9][11] = [0.16451277, 0.1343211, -0.028546996, 0.022039177, 0.1550293, 0.03785225] +gra[6][9][12] = [0.1499453, 0.042843826, 0.050664313, 0.025564509, 0.121892266, 0.0065424056] +gra[6][9][13] = [0.116907224, 0.0015404057, 0.07024962, 0.07451293, 0.1282733, 0.0049253437] +gra[6][9][14] = [-0.027205631, 0.034512695, 0.0068574054, -0.052349146, 0.022619942, 0.09395592] +gra[6][10][6] = [-0.15888286, -0.3138391, -0.20539969, -0.090248756, -0.13080679, -0.21882577] +gra[6][10][7] = [0.039945565, 0.020518731, -0.045851756, -0.016429346, -0.019353565, -0.058723222] +gra[6][10][8] = [0.02214892, 0.031443782, -0.05955004, -0.0027019721, -0.019615663, 0.084891655] +gra[6][10][9] = [0.015036379, 0.024928685, -0.058278434, -0.050845973, -0.022102375, -0.06784104] +gra[6][10][10] = [-0.15888286, -0.3138391, -0.20539969, -0.090248756, -0.13080679, -0.21882577] +gra[6][10][11] = [0.013768813, 0.01700349, 0.062490392, -0.028850764, -0.014016453, 0.2212303] +gra[6][10][12] = [0.036062263, 0.08016446, 0.077293545, 0.04093059, -0.0024978905, 0.21134187] +gra[6][10][13] = [0.016277056, 0.100216605, 0.06005934, 0.06515343, 0.026563412, 0.18100214] +gra[6][10][14] = [0.008751316, -0.048622817, -0.042715497, -0.01140897, -0.02455731, 0.062376864] +gra[6][11][6] = [-0.2685444, -0.0683347, -0.15563123, -0.016927153, -0.336164, -0.104053676] +gra[6][11][7] = [-0.078098536, 0.036055945, -0.008061613, 0.04446686, 0.047880843, -0.0017362321] +gra[6][11][8] = [-0.10716042, 0.12169289, 0.056964055, -0.02944395, -0.037702125, 0.011035088] +gra[6][11][9] = [-0.042997826, 0.043761387, -0.040120546, 0.10305196, 0.06304089, 0.002002405] +gra[6][11][10] = [0.053359248, 0.15490454, 0.15116541, 0.13195065, -0.109551705, 0.041787107] +gra[6][11][11] = [-0.2685444, -0.0683347, -0.15563123, -0.016927153, -0.336164, -0.104053676] +gra[6][11][12] = [0.066963956, 0.15725373, 0.06591427, -0.006932204, 0.09140407, 0.008936482] +gra[6][11][13] = [0.13743879, 0.07587393, 0.09513351, 0.053372484, 0.088956, 0.0049169487] +gra[6][11][14] = [0.008520744, 0.009865254, 0.029770477, -0.043798335, 0.06328126, 0.09395592] +gra[6][12][6] = [-0.27087486, -0.13329938, -0.18069777, -0.14379713, -0.28540802, -0.13817921] +gra[6][12][7] = [-0.091557376, 0.050021313, -0.009507055, 0.033268698, 0.044386722, 5.1504583E-4] +gra[6][12][8] = [-0.1065508, 0.0927614, 0.0645471, -0.029922348, -0.052772477, 0.0027234897] +gra[6][12][9] = [-0.06354022, 0.058511935, -0.03229271, 0.07544131, 0.060689773, 0.0042536827] +gra[6][12][10] = [0.070965834, 0.124543056, 0.1796476, 0.14080608, -0.06596581, 0.029831933] +gra[6][12][11] = [-0.05151954, 0.032910287, 0.03701201, 0.07359792, 0.054370165, 0.002251278] +gra[6][12][12] = [-0.27087486, -0.13329938, -0.18069777, -0.14379713, -0.28540802, -0.13817921] +gra[6][12][13] = [-0.0059878826, 0.036550015, 0.11808377, 0.038853873, 0.06567299, 0.0034976904] +gra[6][12][14] = [0.0017822781, 0.025107872, 0.009719546, -0.011125006, 0.04889026, 0.09395592] +gra[6][13][6] = [-0.22575764, -0.07982966, -0.13233209, -0.10671632, -0.24666817, -0.13852759] +gra[6][13][7] = [-0.09758964, 0.040603936, -0.0018459143, 0.045133702, 0.047981754, -0.0017362321] +gra[6][13][8] = [-0.09510926, 0.1202113, 0.060763415, -0.032543637, -0.05724903, 0.0046982104] +gra[6][13][9] = [-0.0669956, 0.049094565, -0.029558651, 0.090614036, 0.064284794, 0.002002405] +gra[6][13][10] = [0.07920076, 0.11309396, 0.17189252, 0.09596887, -0.027242426, 0.033710685] +gra[6][13][11] = [-0.058955528, 0.018443067, 0.027779505, 0.08748881, 0.06905725, 8.713861E-11] +gra[6][13][12] = [-0.101597026, 0.01910264, 0.020095045, 0.07021575, 0.054787323, 4.699302E-4] +gra[6][13][13] = [-0.22575764, -0.07982966, -0.13233209, -0.10671632, -0.24666817, -0.13852759] +gra[6][13][14] = [-0.006698521, -0.012949264, -0.010005177, -0.06663247, 0.011589371, 0.08487903] +gra[6][14][6] = [0.45508236, -0.21231659, -0.25286, -0.33567595, -0.13115937, -0.14486317, -0.18183614, -0.22559977, -0.24659869, -0.08959103, -0.100985184] +gra[6][14][7] = [-0.04559906, 0.06038591, 0.027435044, 0.004346365, 0.014812058, 0.0385217, -0.06002618, -0.038745835, 0.20625146, -0.011164435, 0.0065670083] +gra[6][14][8] = [-0.0015442646, -0.0227673, -0.08524036, 0.063609034, 0.0050346516, 0.0035762223, 0.23346017, -0.0061080162, 0.021447917, 0.005901302, -0.0037276738] +gra[6][14][9] = [-0.038655173, 0.08559073, 0.011954381, 0.026875805, -0.010552221, 0.011435814, -0.00301829, -0.01681796, 0.1082497, -0.011164436, 0.0051845433] +gra[6][14][10] = [-0.024287913, 0.027374256, 0.0133876195, 0.12225391, -0.0051552514, 0.041741583, -0.03067777, 0.014676357, 0.04385982, 0.0, 0.013415361] +gra[6][14][11] = [-0.04299015, 0.08978732, 0.060956437, 0.01685282, 0.020332731, 0.07663676, -0.0086626075, -0.025221316, 0.09362389, -0.011164436, 0.006370598] +gra[6][14][12] = [-0.049164087, 0.08459338, 0.0136726005, -0.011820925, 0.010157926, 0.03883238, -0.01981043, -0.039680198, 0.103250325, -0.014387673, 0.006370598] +gra[6][14][13] = [-0.041344598, 0.07045057, -0.026481139, 0.0137648545, 0.008764668, 0.033259735, -0.0365325, -0.03504498, 0.0953349, -0.014387673, 0.006370598] +gra[6][14][14] = [0.45508236, -0.21231659, -0.25286, -0.33567595, -0.13115937, -0.14486317, -0.18183614, -0.22559977, -0.24659869, -0.08959103, -0.100985184] +gra[7][0][0] = [-0.09400473] +gra[7][0][1] = [0.063014895] +gra[7][0][2] = [0.008203407] +gra[7][0][3] = [0.04336482] +gra[7][0][4] = [0.04336482] +gra[7][0][5] = [0.045217585] +gra[7][0][6] = [-0.012236582] +gra[7][0][7] = [-0.09400473] +gra[7][1][0] = [0.0022879262, -0.001958814, 0.002719991, 4.4457944E-11, -0.0021720084, 9.538276E-4] +gra[7][1][1] = [-0.080664985, -0.1498559, -0.1748334, -0.16505879, -0.15219411, -0.13811535] +gra[7][1][2] = [0.09982281, -0.042137515, 0.039627425, -0.020901661, -0.008630434, -0.04557295] +gra[7][1][3] = [0.09390932, -0.037475146, -0.0055839457, -0.019397447, -0.009961956, -0.06605266] +gra[7][1][4] = [0.10293442, -0.037475146, 0.0012364213, -0.019397447, -0.009961956, -0.06607746] +gra[7][1][5] = [0.08429182, -0.027172701, 0.036659725, -0.019397447, -0.009961956, -0.05051318] +gra[7][1][6] = [-0.012236582, 8.6579437E-4, 0.0038837004, -0.016195, 0.002059937, -0.003209465] +gra[7][1][7] = [-0.080664985, -0.1498559, -0.1748334, -0.16505879, -0.15219411, -0.13811535] +gra[7][2][0] = [-3.8481143E-5, 0.0, 6.4378075E-4, 0.006364585, -0.00452922, 0.0031306578, 3.69985E-4, 0.0, 0.0012653338, 0.0015309223, -0.008016303] +gra[7][2][1] = [4.5733654E-4, -3.7906157E-11, -0.0498366, -0.0041412255, -0.02294093, -0.0067321556, -0.014439816, 0.034137405, 0.0019214812, 0.0035228117, -0.034932088] +gra[7][2][2] = [-0.16109464, -0.1522247, -0.15308808, -0.14182311, -0.24778378, -0.14608057, -0.2882911, -0.2643619, -0.17109688, -0.10580697, -0.18639117] +gra[7][2][3] = [-0.0130428625, -0.0263843, 0.008692514, -0.008148272, -0.02118981, 0.0, 0.0043394, -0.009604603, -0.0094120335, -0.0052225264, -0.1345021] +gra[7][2][4] = [-0.01706918, -0.02848946, 0.0072037163, -0.0035270967, -0.0015978473, -0.0016386209, 7.817097E-4, -0.0126001, -0.0094120335, 0.003701211, -0.16767177] +gra[7][2][5] = [-0.010582655, -0.024485687, -0.010048743, -0.0019876226, 0.008764084, 0.0, 0.01246951, -0.01570706, -0.010316748, -0.0013686286, -0.14882436] +gra[7][2][6] = [0.019011011, -0.0020981468, -0.043214638, -0.003755305, 0.019529367, -0.015389417, -0.012197308, -0.015615815, 0.0, 0.0, -0.08651045] +gra[7][2][7] = [-0.16109464, -0.1522247, -0.15308808, -0.14182311, -0.24778378, -0.14608057, -0.2882911, -0.2643619, -0.17109688, -0.10580697, -0.18639117] +gra[7][3][0] = [-3.8481143E-5, 0.0, -2.546209E-4, 0.002719991, 0.0, 0.0031306578, 3.69985E-4, -3.050395E-11, 0.0012653338, -9.175534E-4, -0.0059786467] +gra[7][3][1] = [4.5733654E-4, 0.0, -0.06010697, -0.010353064, -0.04391478, -0.012589575, -0.048092224, 0.078652866, 0.0019214812, 0.0, -0.08094852] +gra[7][3][2] = [-0.00847032, -0.013719019, -0.057563722, 0.0, -0.028270295, -0.0064118747, -0.009571605, 0.0045674103, 0.0011093304, 0.00255187, -0.045079764] +gra[7][3][3] = [-0.16554235, -0.19184113, -0.23793115, -0.19770847, -0.34361568, -0.16543038, -0.24374564, -0.39767784, -0.17093313, -0.14213605, -0.19553113] +gra[7][3][4] = [-0.016108312, -0.0263843, 0.05114194, 8.307928E-4, -0.030055411, -0.0016386209, -0.023424516, -0.009095556, -0.01243171, -0.0031257737, 0.04524743] +gra[7][3][5] = [-0.010582655, -0.024485687, 0.03350733, 0.0044725235, 0.008308632, 0.0, -0.014071485, -0.013800123, -0.014241234, -0.0031257737, 0.048553314] +gra[7][3][6] = [0.0072282003, 0.0, -0.03128368, 0.0, 0.014126777, -0.01838149, -0.006137472, -0.010240156, 0.0017409262, 3.0340515E-11, -0.06437046] +gra[7][3][7] = [-0.16554235, -0.19184113, -0.23793115, -0.19770847, -0.34361568, -0.16543038, -0.24374564, -0.39767784, -0.17093313, -0.14213605, -0.19553113] +gra[7][4][0] = [-3.8481143E-5, 0.0, 0.002269707, 0.002719991, 0.0, 0.0031306578, 3.69985E-4, -3.050395E-11, 0.0012653338, 0.0015309223, -0.0059786467] +gra[7][4][1] = [4.5733654E-4, 0.0, -0.06010697, -0.010353064, -0.04391478, -0.012589575, -0.048092224, 0.078652866, 0.0019214812, 0.0, -0.08094852] +gra[7][4][2] = [-0.008470321, -0.013719019, -0.07689501, 0.0, -0.03060616, -0.0108750155, -0.009571605, 0.007836706, 0.001859782, 0.0015983053, -0.049368795] +gra[7][4][3] = [-0.012485486, -0.012182354, -0.09273422, 0.0, -0.022421567, -0.004148566, -0.0065214084, -2.5217576E-4, -0.0036188248, 0.0010085813, -0.038101066] +gra[7][4][4] = [-0.16332567, -0.19417033, -0.23793115, -0.19770847, -0.34361568, -0.16543038, -0.23748614, -0.39457178, -0.17093313, -0.14213605, -0.23766032] +gra[7][4][5] = [-0.010582655, -0.022380527, 0.03301778, 0.0023702672, -0.012885826, -0.0030399878, -0.014504371, -0.012202517, -0.012083008, -0.004008526, 0.06235572] +gra[7][4][6] = [0.008184545, -0.0015748128, -0.03128368, -0.0013104129, 0.014126777, -0.01838149, -0.006137472, -0.010240156, 0.0, -0.0012154061, -0.066418] +gra[7][4][7] = [-0.16332567, -0.19417033, -0.23793115, -0.19770847, -0.34361568, -0.16543038, -0.23748614, -0.39457178, -0.17093313, -0.14213605, -0.23766032] +gra[7][5][0] = [-3.8481143E-5, -0.0019296022, 0.002269707, 0.0013423589, 0.0, -0.0023391629, 3.6998512E-4, -3.050395E-11, 0.0012653338, 0.0015309223, -0.0059786467] +gra[7][5][1] = [4.5733654E-4, 0.0, -0.06681095, -0.010353064, -0.035776734, -0.012589575, -0.043350175, 0.078652866, 0.0019214812, 0.0, -0.09211975] +gra[7][5][2] = [-0.00847032, -0.013719019, -0.07761786, 0.0, -0.02521117, -0.0108750155, -0.009571605, 0.004819586, 0.0011093304, 0.00255187, -0.04139789] +gra[7][5][3] = [-0.012507373, -0.011716097, -0.08894238, 0.0, -0.019362442, -0.008611707, -0.0065214084, -2.5217576E-4, -0.0036188248, 0.00255187, -0.034885447] +gra[7][5][4] = [-0.010043007, -0.013198066, -0.094590135, 0.0, -0.017026579, -0.0027493846, -0.0065214084, 0.0022252216, -0.0036188248, 0.00255187, -0.03168124] +gra[7][5][5] = [-0.16332567, -0.18746553, -0.25135505, -0.16596697, -0.28105557, -0.16543038, -0.2368377, -0.3664208, -0.17093313, -0.14213605, -0.2239882] +gra[7][5][6] = [0.0075485897, 0.0, -0.030092647, 0.0, 0.014126777, -0.01838149, -0.0035625359, -0.013210811, 0.0011668268, 3.0340515E-11, -0.062408306] +gra[7][5][7] = [-0.16332567, -0.18746553, -0.25135505, -0.16596697, -0.28105557, -0.16543038, -0.2368377, -0.3664208, -0.17093313, -0.14213605, -0.2239882] +gra[7][6][0] = [6.4378075E-4, 0.0] +gra[7][6][1] = [-0.060440436, 0.026094327] +gra[7][6][2] = [-0.08302259, 0.0] +gra[7][6][3] = [-0.09992734, 0.0026769685] +gra[7][6][4] = [-0.09992734, 0.0] +gra[7][6][5] = [-0.113697976, -0.0012286699] +gra[7][6][6] = [-0.31237385, -0.23130569] +gra[7][6][7] = [-0.31237385, -0.23130569] +gra[7][8][7] = [-0.14233668, -0.14756092, -0.044601977, -0.18925315, -0.2837601, -0.16813198] +gra[7][8][8] = [-0.14233668, -0.14756092, -0.044601977, -0.18925315, -0.2837601, -0.16813198] +gra[7][8][9] = [0.116245195, -0.0227675, 0.1501364, -0.08012412, -0.035148308, -0.009997491] +gra[7][8][10] = [0.025993222, 0.049919903, -0.08549047, -0.025898118, -3.6705425E-4, -0.011883774] +gra[7][8][11] = [0.14915608, -0.0051115504, 0.11367791, -0.048788004, -0.05031695, 0.022126378] +gra[7][8][12] = [0.10679064, 0.04075294, 0.069916554, -0.023135131, -0.055469196, 0.03254832] +gra[7][8][13] = [0.10665981, 0.07543501, 0.16509528, -0.02731902, -0.0676342, 0.038390566] +gra[7][8][14] = [-0.18697277, 0.012405168, 0.06522049, 0.019131955, 0.020992978, -0.030493984] +gra[7][9][7] = [-0.11762953, -0.14489782, -0.20298205, -0.19647896, -0.34765953, -0.2502451, -0.2935088, -0.25860205, -0.09332765, -0.09703251, -0.110088095] +gra[7][9][8] = [-0.011532839, -0.024351576, -0.023128346, 0.040395692, 0.054172352, 0.027047869, -0.023652218, 0.01099829, 0.0, 0.005164899, -0.012177394] +gra[7][9][9] = [-0.11762953, -0.14489782, -0.20298205, -0.19647896, -0.34765953, -0.2502451, -0.2935088, -0.25860205, -0.09332765, -0.09703251, -0.110088095] +gra[7][9][10] = [-0.0053148326, 0.032591105, 0.08589532, -0.065572426, 0.057028472, -0.0385645, 0.021282855, 0.01835112, 0.0, 0.012099067, 0.008352403] +gra[7][9][11] = [-0.050017238, -0.052683227, 0.12402754, 0.11143928, 0.06660414, -0.053028144, 0.09611938, -0.04782975, -0.004067228, 8.262127E-4, 0.008645253] +gra[7][9][12] = [-0.015160622, -0.05497521, 0.054767463, 0.08498106, -0.030994065, -0.06664673, 0.04961324, -0.023644354, -3.876005E-4, 8.262127E-4, 0.011072626] +gra[7][9][13] = [0.047767337, -0.014375355, 0.10950356, 0.052034695, -0.058833968, -0.04414952, 0.05015435, -0.03535352, -0.0051067895, 8.262127E-4, -0.043190517] +gra[7][9][14] = [-0.008160759, 0.005809472, -0.15416811, 0.05876962, 0.024954624, 0.059738718, 0.1186391, 0.017498635, 0.0, 0.001237925, -0.07941664] +gra[7][10][7] = [-0.17060247, -0.23843166, -0.33738467, -0.32404765, -0.16877839, -0.100185975, -0.21477497] +gra[7][10][8] = [0.0033476613, -0.0073065395, 0.033852994, -0.02442397, 0.0, -6.638963E-4, -0.006660041] +gra[7][10][9] = [0.055700943, 0.047137737, -0.008807744, 0.04429596, 2.5751462E-4, 0.0040959795, 0.004527896] +gra[7][10][10] = [-0.17060247, -0.23843166, -0.33738467, -0.32404765, -0.16877839, -0.100185975, -0.21477497] +gra[7][10][11] = [0.027160797, 0.06803705, -0.07385983, 0.052746348, -0.007360163, -0.10496495, 0.093874976] +gra[7][10][12] = [0.025051562, 0.060594648, -0.05271573, -0.025558125, 7.2789623E-4, -0.04918014, 0.07324426] +gra[7][10][13] = [0.059900522, 0.09558491, -0.050300118, 0.003853741, 0.002008081, -0.06891406, 0.09705341] +gra[7][10][14] = [-0.1669436, -0.014706884, 0.014233817, 0.07264586, -0.01725235, 0.0047443355, 0.05550222] +gra[7][11][7] = [-0.18877086, -0.18295705, -0.089666635, -0.15276533, -0.23981941, -0.1369483, -0.37306124, -0.29440862, -0.08713316, -0.07970412, -0.1323139] +gra[7][11][8] = [-0.016062489, -0.026009362, -0.008331828, 0.011196983, 0.08981819, 0.033852994, -0.026807453, 0.03652016, -0.0017965699, 0.011501777, 0.011569124] +gra[7][11][9] = [-8.3700445E-4, 0.018604184, 0.197153, 0.039537385, 0.004949229, -0.018727323, 0.0107252635, 0.014077867, -0.0137060415, -0.018733032, -0.007127323] +gra[7][11][10] = [-0.0037351365, -0.039604805, 0.08834917, 0.047203198, 0.09250858, -0.09111658, -0.058497563, 0.08510176, 0.0024555703, 0.023591425, -0.0023401042] +gra[7][11][11] = [-0.18877086, -0.18295705, -0.089666635, -0.15276533, -0.23981941, -0.1369483, -0.37306124, -0.29440862, -0.08713316, -0.07970412, -0.1323139] +gra[7][11][12] = [-0.051172394, -0.043835588, 0.05621762, 0.074865945, 0.07842945, 0.0034139452, 0.027390484, 0.007771712, 0.0030753883, 0.0032202876, 0.0535943] +gra[7][11][13] = [-0.010975514, -0.040343948, 0.0883631, 0.046828676, 0.015499551, -0.050970126, 0.010837065, -0.01046962, -0.0016438005, 8.178175E-4, 0.01295049] +gra[7][11][14] = [0.052401498, 0.0043707276, -0.14561729, 0.0054713218, 3.071786E-4, 0.024929654, 0.15930042, 0.040411703, 0.0, 0.001237925, -0.09829482] +gra[7][12][7] = [-0.21050091, -0.23652624, -0.21653661, -0.25090933, -0.3047841, -0.19878656, -0.32230523, -0.31947517, -0.10180121, -0.11382966, -0.21483472] +gra[7][12][8] = [-0.018773116, -0.021906763, -0.008810226, 0.042754523, 0.061202444, 0.033852994, -0.041877814, 0.04072256, 0.0, 0.0031901782, 0.0070363255] +gra[7][12][9] = [0.0018703595, 0.021649519, 0.16954234, 0.08006504, 0.019699778, -0.026167009, 0.008374144, 0.021905703, -0.0137060415, -0.016481753, -0.018831125] +gra[7][12][10] = [0.010217155, -0.0412284, 0.0839837, 0.071243525, 0.07052999, -0.06651417, -0.011905368, 0.106604174, 0.002381391, 0.011636256, -0.0034814635] +gra[7][12][11] = [-0.010060661, 0.023870783, 0.18013962, 0.027321486, -0.025711982, -0.018515691, 0.0052284813, 0.023991466, 7.689154E-4, -0.0016940457, -0.0042543197] +gra[7][12][12] = [-0.21050091, -0.23652624, -0.21653661, -0.25090933, -0.3047841, -0.19878656, -0.32230523, -0.31947517, -0.10180121, -0.11382966, -0.21483472] +gra[7][12][13] = [0.11237939, -0.029394656, 0.10779137, 0.059157457, -0.028810736, -0.038828816, -0.0041805073, 0.028646749, -0.0016438005, -6.0143974E-4, 0.024401996] +gra[7][12][14] = [0.05209828, 0.00307116, -0.11294398, 0.015219055, 0.015549801, 0.0332493, 0.14490941, 0.020360775, 0.0, 0.001237925, -0.06410605] +gra[7][13][7] = [-0.21126512, -0.14684778, -0.17945582, -0.23263925, -0.2513144, -0.26918033, -0.28356537, -0.27110946, -0.11005954, -0.11417803, -0.21220993] +gra[7][13][8] = [-0.017938271, -0.022913663, -0.011431517, 0.05068257, 0.09294045, 0.033852994, -0.046354357, 0.039811414, 0.0019757631, 0.005164899, -0.022090228] +gra[7][13][9] = [0.0058543156, 0.020126855, 0.18471506, 0.104638174, 0.010282405, -0.026167009, 0.011969165, 0.024639761, -0.0137060415, -0.018733032, -0.0074777785] +gra[7][13][10] = [0.008444371, -0.039341405, 0.039146483, 0.055697598, 0.059080895, -0.06961448, 0.026818028, 0.09884912, 0.002381391, 0.015515008, 0.018108562] +gra[7][13][11] = [-0.010814704, 0.019341925, 0.2075875, 0.06027955, -0.041535035, -0.014226491, 0.0076052295, 0.030979762, 7.689154E-4, -0.0039453236, 0.007776879] +gra[7][13][12] = [0.024077337, -0.012258323, 0.17245317, 0.1343428, -0.014438946, -0.026206074, 0.008978962, 0.03448535, 0.0018748178, -0.0034753936, -0.008489365] +gra[7][13][13] = [-0.21126512, -0.14684778, -0.17945582, -0.23263925, -0.2513144, -0.26918033, -0.28356537, -0.27110946, -0.11005954, -0.11417803, -0.21220993] +gra[7][13][14] = [0.010951025, 0.009298121, -0.14688809, 0.01865165, -0.008552837, 0.018065976, 0.10271375, 0.011856999, 0.0, -1.3119925E-4, -0.067090854] +gra[7][14][7] = [0.5241708, -0.46542898, -0.27172104, -0.12035675, -0.21927318, -0.117403835, -0.22986774, -0.17839494] +gra[7][14][8] = [-0.0016250344, 0.03413689, 0.10002088, -0.011650267, -0.014161643, 0.008354038, -0.006660041, 0.030145828] +gra[7][14][9] = [-0.03830725, 0.12321507, 0.117662326, 0.05932686, -0.01487538, -0.018540896, 0.012248252, -0.030068738] +gra[7][14][10] = [-0.017961588, 0.13540176, 0.040848166, -0.035031192, -0.0056500686, 0.0, -0.007450852, -0.008528335] +gra[7][14][11] = [-0.043990437, 0.13918974, 0.11856836, 0.054988295, -0.020448634, -0.0040659397, 0.005105417, -0.035065804] +gra[7][14][12] = [-0.04144368, 0.10621174, 0.15394047, 0.028867757, -0.0306922, -0.0060411, 0.04071752, -0.03511221] +gra[7][14][13] = [-0.033624183, 0.116037644, 0.12645026, 0.033614065, -0.028261295, -0.0060411, 0.041231185, -0.03511221] +gra[7][14][14] = [0.5241708, -0.46542898, -0.27172104, -0.12035675, -0.21927318, -0.117403835, -0.22986774, -0.17839494] +gra[8][0][0] = [-0.14417496] +gra[8][0][1] = [-0.0045984997] +gra[8][0][2] = [-0.015381893] +gra[8][0][3] = [-2.1490036E-5] +gra[8][0][4] = [-2.1490036E-5] +gra[8][0][5] = [-0.0015194325] +gra[8][0][6] = [0.003301489] +gra[8][0][7] = [0.004572891] +gra[8][0][8] = [-0.14417496] +gra[8][1][0] = [0.0016441452] +gra[8][1][1] = [-0.088203505] +gra[8][1][2] = [0.07636672] +gra[8][1][3] = [0.05065222] +gra[8][1][4] = [0.059677303] +gra[8][1][5] = [0.037684016] +gra[8][1][6] = [0.003301489] +gra[8][1][7] = [0.09311825] +gra[8][1][8] = [-0.088203505] +gra[8][2][0] = [0.0036445942, 0.0, 0.0031306578, -0.010473219, -0.0020841712, -0.0070527056] +gra[8][2][1] = [-0.0041412255, 0.0035309494, -8.747375E-4, -0.024372065, -0.023927271, -0.034932088] +gra[8][2][2] = [-0.2532087, -0.17914829, -0.24883613, -0.3441101, -0.2326756, -0.24048056] +gra[8][2][3] = [-0.0055313455, 0.0011138088, -0.011980485, -0.031063369, -0.035564486, -0.1411826] +gra[8][2][4] = [0.0063980464, 0.0011138088, -0.013619106, -0.010086369, -0.038962904, -0.1785424] +gra[8][2][5] = [0.009107003, 0.0011138088, -0.011980485, 2.7556764E-4, -0.05956607, -0.159695] +gra[8][2][6] = [-0.00513966, -0.0020981468, -0.0028909168, 0.018890928, -0.027676575, -0.08680173] +gra[8][2][7] = [0.0026903795, 0.0011138088, -0.011960017, 0.014541798, -0.015871506, -0.18325953] +gra[8][2][8] = [-0.2532087, -0.17914829, -0.24883613, -0.3441101, -0.2326756, -0.24048056] +gra[8][3][0] = [0.0, 0.0, 0.0031306578, -0.005943999, -0.0029825727, -0.005015048] +gra[8][3][1] = [-0.008866866, 0.001660333, -8.747375E-4, -0.045345914, -0.042694468, -0.08094852] +gra[8][3][2] = [-0.0024275752, -0.0073068766, -0.008529195, -0.025120389, 0.030459536, -0.04988506] +gra[8][3][3] = [-0.30909407, -0.21876469, -0.26818597, -0.43994185, -0.31751865, -0.24962053] +gra[8][3][4] = [0.0063663553, 0.0011138088, -0.013619106, -0.03854393, 0.0068849414, 0.038566932] +gra[8][3][5] = [0.01556715, 0.0011138088, -0.011980485, -1.798892E-4, -0.016009998, 0.037682675] +gra[8][3][6] = [-0.0013843551, 0.0, -0.0058829887, 0.013488339, -0.015745612, -0.06466174] +gra[8][3][7] = [0.0056626936, 0.0011138088, -0.011960017, -0.008537625, -0.0044912873, 0.0040028263] +gra[8][3][8] = [-0.30909407, -0.21876469, -0.26818597, -0.43994185, -0.31751865, -0.24962053] +gra[8][4][0] = [0.0, 0.0, 0.0031306578, -0.005943999, -4.5824505E-4, -0.005015048] +gra[8][4][1] = [-0.008866866, 0.001660333, -8.747375E-4, -0.045345914, -0.042694468, -0.08094852] +gra[8][4][2] = [-0.0024275752, -0.0073068766, -0.012697934, -0.027456252, 0.0023085428, -0.05417409] +gra[8][4][3] = [-0.0024275752, -0.0019607393, -0.008350256, -0.01927166, 0.008416267, -0.036242567] +gra[8][4][4] = [-0.30909407, -0.22109388, -0.26818597, -0.43994185, -0.31751865, -0.29174975] +gra[8][4][5] = [0.009075312, 0.0011138088, -0.015020473, -0.021374347, -0.014589924, 0.055675216] +gra[8][4][6] = [-0.002694768, -0.0015748128, -0.0058829887, 0.013488339, -0.015745612, -0.06670928] +gra[8][4][7] = [0.0056626936, 0.0011138088, -0.011960017, -0.008036301, -0.0044912873, -1.2353621E-4] +gra[8][4][8] = [-0.30909407, -0.22109388, -0.26818597, -0.43994185, -0.31751865, -0.29174975] +gra[8][5][0] = [-0.0013776321, -0.0019296022, -0.0023391629, -0.005943999, -4.5824505E-4, -0.005015048] +gra[8][5][1] = [-0.008866866, 0.001660333, -8.747375E-4, -0.037207868, -0.049398426, -0.09211975] +gra[8][5][2] = [-0.0024275752, -0.0073068766, -0.012697934, -0.022061262, 0.0015857005, -0.046203177] +gra[8][5][3] = [-0.0024275752, -0.001494481, -0.012518995, -0.016212534, 0.003388402, -0.03302695] +gra[8][5][4] = [-0.0024275752, -0.0037581453, -0.004672005, -0.01491863, 0.0065603466, -0.03205142] +gra[8][5][5] = [-0.2773526, -0.2143891, -0.26818597, -0.37738183, -0.33094257, -0.27807763] +gra[8][5][6] = [-0.0013843551, 0.0, -0.0074605006, 0.013488339, -0.014554577, -0.064160265] +gra[8][5][7] = [0.0056626936, 0.0011138088, -0.014376583, -0.01484395, -0.0030712152, -0.0025116857] +gra[8][5][8] = [-0.2773526, -0.2143891, -0.26818597, -0.37738183, -0.33094257, -0.27807763] +gra[8][6][0] = [-0.0020841712] +gra[8][6][1] = [-0.04302792] +gra[8][6][2] = [-0.0050475206] +gra[8][6][3] = [-0.008825058] +gra[8][6][4] = [-0.008825058] +gra[8][6][5] = [-0.012781609] +gra[8][6][6] = [-0.41294762] +gra[8][6][7] = [-0.0036576067] +gra[8][6][8] = [-0.41294762] +gra[8][7][0] = [-0.003605175, 0.0, 3.0349702E-11, -0.005943999, 0.0, -0.0034732886] +gra[8][7][1] = [-0.0047256397, 0.001660333, -8.747375E-4, -0.025625348, -0.029110229, -0.05507951] +gra[8][7][2] = [-0.0024275752, -0.0073068766, -0.010434626, -0.02700362, 2.0877292E-4, -0.03593757] +gra[8][7][3] = [0.0059763296, -0.013574859, -0.013208415, -0.016524691, 0.0015131709, -0.02000734] +gra[8][7][4] = [0.0059763296, -0.015372265, -0.012518995, -0.017566651, 0.0015131709, -0.022236021] +gra[8][7][5] = [0.0059763296, -0.015372265, -0.00639748, -0.017453253, 0.005679493, -0.021238362] +gra[8][7][6] = [0.0047623203, -9.316074E-4, 0.003376759, 0.0, -0.0023392674, -0.00691407] +gra[8][7][7] = [-0.2170329, -0.21450336, -0.23716104, -0.18752718, -0.29549456, -0.22514722] +gra[8][7][8] = [-0.2170329, -0.21450336, -0.23716104, -0.18752718, -0.29549456, -0.22514722] +gra[8][9][8] = [-0.022827793, -0.068379566, -0.25837877, -0.21213788, -0.18123251, -0.06280679] +gra[8][9][9] = [-0.022827793, -0.068379566, -0.25837877, -0.21213788, -0.18123251, -0.06280679] +gra[8][9][10] = [-0.04248844, -0.015347177, -0.06022135, 0.059880435, 0.030355116, 0.02373868] +gra[8][9][11] = [0.1324003, -0.03536785, 0.072841264, 0.111723945, 0.16686207, 0.004373795] +gra[8][9][12] = [0.148417, -0.062015627, 0.03661561, 0.028872918, 0.10492425, -0.00793882] +gra[8][9][13] = [0.115055285, -0.06980443, 0.03620458, 0.002651147, 0.17650467, -0.051590923] +gra[8][9][14] = [0.0024404947, -0.014385754, 0.052796006, 0.032367773, -0.037356302, -0.083207875] +gra[8][10][8] = [-0.3744933, -0.16784373, -0.22703753, -0.27977395, -0.079930805] +gra[8][10][9] = [-0.00495979, -0.015150558, -0.024016019, -0.024264883, 0.0040959795] +gra[8][10][10] = [-0.3744933, -0.16784373, -0.22703753, -0.27977395, -0.079930805] +gra[8][10][11] = [0.009161118, 0.06431773, -0.028824054, 0.06274183, -0.11322439] +gra[8][10][12] = [0.00397792, 0.034380853, -0.0059177973, 0.060738035, -0.070336334] +gra[8][10][13] = [-0.0165147, 0.08674023, 0.01999219, 0.1095151, -0.07945923] +gra[8][10][14] = [0.004430178, -0.009117239, 0.003957929, -0.014807275, 9.530978E-4] +gra[8][11][8] = [-0.018760176, -0.13557921, -0.19221872, -0.24474324, -0.18942925, -0.117233455] +gra[8][11][9] = [-0.02862041, -0.0266835, -0.017359264, -0.0026410976, 0.101478025, -0.007127323] +gra[8][11][10] = [0.12575564, -0.008013563, -0.13465624, 0.042924937, 0.10461114, -0.013226186] +gra[8][11][11] = [-0.018760176, -0.13557921, -0.19221872, -0.24474324, -0.18942925, -0.117233455] +gra[8][11][12] = [0.16262418, -0.06352125, 0.13524722, 0.13732867, 0.07395467, 0.032438103] +gra[8][11][13] = [0.14645974, -0.096206084, 0.02090235, 0.07344408, 0.15144207, 0.0024053212] +gra[8][11][14] = [-0.059860162, -0.015824499, 0.017986942, 0.0066039376, -0.022695731, -0.10208605] +gra[8][12][8] = [-0.1169041, -0.18914837, -0.254057, -0.30970794, -0.31629923, -0.19975424] +gra[8][12][9] = [0.011907245, -0.023638166, -0.024798952, 0.012109455, 0.073867366, -0.018831125] +gra[8][12][10] = [0.1423337, -0.007672596, -0.10740548, 0.020946361, 0.110106535, -0.014367545] +gra[8][12][11] = [-0.036603082, -0.021824643, -0.013993474, -0.009670965, 0.062927134, -0.0042543197] +gra[8][12][12] = [-0.1169041, -0.18914837, -0.254057, -0.30970794, -0.31629923, -0.19975424] +gra[8][12][13] = [0.1698632, -0.097934745, 0.07009623, 0.029133787, 0.13945653, 0.013856832] +gra[8][12][14] = [-0.050112426, -0.017124066, 0.026306588, 0.021846559, 0.009977598, -0.06789728] +gra[8][13][8] = [-0.09863404, -0.09946993, -0.3244508, -0.25623825, -0.27921844, -0.19712944] +gra[8][13][9] = [0.03648038, -0.025160834, -0.024798952, 0.0026920782, 0.08904009, -0.0074777785] +gra[8][13][10] = [0.12678777, -0.0057856096, -0.11050579, 0.0094972495, 0.065269336, 0.0072224857] +gra[8][13][11] = [-0.008817717, -0.02160719, -0.009704274, -0.02549401, 0.08290721, 0.007776879] +gra[8][13][12] = [0.02728383, -0.02116654, -0.01983916, 0.008786059, 0.08503172, -0.009510772] +gra[8][13][13] = [-0.09863404, -0.09946993, -0.3244508, -0.25623825, -0.27921844, -0.19712944] +gra[8][13][14] = [-0.047285203, -0.013819384, -2.9367127E-4, -0.0011396939, -0.051197436, -0.07088209] +gra[8][14][8] = [0.27659905, -0.15125082, -0.11054209] +gra[8][14][9] = [-0.04892659, 0.04652346, -0.010434729] +gra[8][14][10] = [-0.0171581, 0.05569372, 0.0020520485] +gra[8][14][11] = [-0.057897132, 0.046490017, -0.011281329] +gra[8][14][12] = [-0.073342204, 0.038727716, -0.019339422] +gra[8][14][13] = [-0.06552271, 0.016410215, -0.019339422] +gra[8][14][14] = [0.27659905, -0.15125082, -0.11054209] +gra[9][0][0] = [-0.1773251] +gra[9][0][1] = [0.07775881] +gra[9][0][2] = [-0.03473952] +gra[9][0][3] = [-7.944107E-4] +gra[9][0][4] = [-7.944107E-4] +gra[9][0][5] = [0.00966204] +gra[9][0][6] = [-0.007829653] +gra[9][0][7] = [-0.0057671433] +gra[9][0][8] = [0.020644845] +gra[9][0][9] = [-0.1773251] +gra[9][1][0] = [0.0016247655, -0.001958814, 6.20738E-4, 5.2270518E-11, -0.0021720084, 9.538275E-4] +gra[9][1][1] = [-0.19433363, -0.15237986, -0.23557648, -0.20321801, -0.15950295, -0.17264925] +gra[9][1][2] = [0.056879885, -0.045482695, 0.028423216, -0.026443, -0.01245614, -0.048355818] +gra[9][1][3] = [0.049750097, -0.040081326, -0.014490077, -0.021925595, -0.014794135, -0.067049526] +gra[9][1][4] = [0.058775187, -0.04147892, -0.0076697078, -0.019397447, -0.014794135, -0.06707433] +gra[9][1][5] = [0.04873628, -0.029277861, 0.024150392, -0.021289404, -0.010774887, -0.051510047] +gra[9][1][6] = [-0.007829653, -0.0024341857, 0.0038837004, -0.012754725, 0.0061575435, -0.001778353] +gra[9][1][7] = [0.07907056, -0.033471376, 0.025322549, -0.024018921, -0.006669964, -0.07393278] +gra[9][1][8] = [0.026585741, -3.4384023E-11, -0.024732247, -0.0073345173, -0.0014129442, -0.0036619226] +gra[9][1][9] = [-0.19433363, -0.15237986, -0.23557648, -0.20321801, -0.15950295, -0.17264925] +gra[9][2][0] = [-3.8481143E-5, 0.0, -1.9379833E-5, 0.0042653317, -0.00452922, 0.0040684794, 0.004997642, 0.0, 0.0012653338, 0.012965051, -0.008016303] +gra[9][2][1] = [-5.13921E-4, -3.7906157E-11, -0.02825313, -0.0041412255, -0.02294093, -0.0013798745, -0.00706416, 0.035186574, -7.720956E-4, 0.019359952, -0.0476656] +gra[9][2][2] = [-0.15411112, -0.15474868, -0.2667567, -0.2025662, -0.2436716, -0.18423976, -0.27013993, -0.2716599, -0.2620662, -0.12707642, -0.22092506] +gra[9][2][3] = [-0.010340879, -0.028990483, -0.03546672, -0.0149521455, -0.02118981, -0.0025281478, 0.0043394, -0.00686435, -0.002073156, -0.009318697, -0.13549897] +gra[9][2][4] = [-0.013003577, -0.03249323, -0.036955513, -0.012433228, -0.0015978473, -0.0016386209, 7.817097E-4, -0.008992363, -0.002073156, 9.969876E-4, -0.16866863] +gra[9][2][5] = [-0.004744318, -0.026590846, -0.04560429, -0.014496949, 0.008764084, -0.0018919576, 0.012585785, -0.013152661, -0.00433054, -0.004072852, -0.14982122] +gra[9][2][6] = [0.008839857, -0.005398127, -0.038807712, -0.003755305, 0.018350098, -0.009624145, -0.007742171, -0.015615815, 0.0, 0.004373548, -0.08937369] +gra[9][2][7] = [-0.005842864, -0.0263843, -0.029211506, -0.020425018, 0.029116679, 0.0024165655, 0.019620195, 0.008007627, -0.0065089096, -0.0107359085, -0.1680537] +gra[9][2][8] = [0.0028593205, -0.029040482, 0.020325596, -0.0065694638, 0.02993482, -0.006035342, -0.033911515, -0.012498216, 0.002475134, 8.743692E-4, -0.024541838] +gra[9][2][9] = [-0.15411112, -0.15474868, -0.2667567, -0.2025662, -0.2436716, -0.18423976, -0.27013993, -0.2716599, -0.2620662, -0.12707642, -0.22092506] +gra[9][3][0] = [-3.8481143E-5, 0.0, -9.177815E-4, 6.20738E-4, 0.0, 0.0040684794, 0.004997642, -3.050395E-11, 0.0012653338, 0.0105165765, -0.0059786467] +gra[9][3][1] = [-5.13921E-4, 0.0, -0.031104738, -0.010353064, -0.04391478, -0.0033323471, -0.04071657, 0.079702035, -7.720956E-4, 0.01583714, -0.093682036] +gra[9][3][2] = [-0.009741628, -0.019480554, -0.0440849, 0.0, -0.025120389, -0.0064118747, -0.009571605, 0.0045674103, -0.0014879347, 0.00255187, -0.051743556] +gra[9][3][3] = [-0.15855883, -0.1943651, -0.3515998, -0.25845155, -0.33950344, -0.20358957, -0.22559446, -0.4049759, -0.26190245, -0.16340552, -0.23006502] +gra[9][3][4] = [-0.012042707, -0.03038807, 0.006982708, -0.0059730806, -0.030055411, -0.0016386209, -0.023424516, -0.0063553033, -0.0050928323, -0.0058299974, 0.044250567] +gra[9][3][5] = [-0.004744318, -0.026590846, -0.002048215, -0.008036802, 0.008308632, -0.0018919576, -0.013955208, -0.011245721, -0.008255026, -0.0058299974, 0.04755645] +gra[9][3][6] = [-0.0029429542, -0.00329998, -0.026876753, 0.0, 0.012947509, -0.012616217, -0.0016823349, -0.010240156, 0.0017409262, 0.004373548, -0.06723371] +gra[9][3][7] = [-0.0076958933, -0.0263843, -0.017831288, -0.017452704, 0.006037254, 0.0024165655, -0.0066935206, 0.011656271, -0.008786375, -0.008534221, 0.019957142] +gra[9][3][8] = [0.0, -0.023754772, 0.022294685, -0.0065694638, 0.02787349, -0.006035342, -0.03937225, 0.008614166, 0.002475134, 2.4045661E-11, -0.053164832] +gra[9][3][9] = [-0.15855883, -0.1943651, -0.3515998, -0.25845155, -0.33950344, -0.20358957, -0.22559446, -0.4049759, -0.26190245, -0.16340552, -0.23006502] +gra[9][4][0] = [-3.8481143E-5, 0.0, 0.0016065463, 6.20738E-4, 0.0, 0.0040684794, 0.004997642, -3.050395E-11, 0.0012653338, 0.012965051, -0.0059786467] +gra[9][4][1] = [-5.13921E-4, 0.0, -0.031104738, -0.010353064, -0.04391478, -0.0033323471, -0.04071657, 0.079702035, -7.720956E-4, 0.01583714, -0.093682036] +gra[9][4][2] = [-0.009741628, -0.019480554, -0.06341619, 0.0, -0.027456252, -0.008486157, -0.009571605, 0.007836706, -0.0015743364, 0.0015983053, -0.056032587] +gra[9][4][3] = [-0.011068651, -0.0161157, -0.083996825, 0.0032001403, -0.01927166, -0.008297132, -0.0065214084, -2.5217576E-4, -0.009947379, 0.0010085813, -0.038101066] +gra[9][4][4] = [-0.15634215, -0.1966943, -0.3515998, -0.25845155, -0.33950344, -0.20358957, -0.21933496, -0.40186983, -0.26190245, -0.16340552, -0.27219427] +gra[9][4][5] = [-0.004744318, -0.024485687, -0.0025377665, -0.008036802, -0.012885826, -0.0049319454, -0.014388094, -0.010515601, -0.0060968003, -0.0067127496, 0.061358854] +gra[9][4][6] = [-0.00198661, -0.004874793, -0.026876753, -0.0013104129, 0.012947509, -0.012616217, -0.0016823349, -0.010240156, 0.0, 0.0031581419, -0.06928125] +gra[9][4][7] = [-0.0076958933, -0.0263843, -0.017831288, -0.017452704, 0.0065385774, 0.0024165655, -0.0066935206, 0.011656271, -0.008786375, -0.00811267, 0.01583078] +gra[9][4][8] = [-0.0030642115, -0.023754772, 0.022294685, -0.0065694638, 0.02787349, -0.006035342, -0.03937225, 0.008614166, 0.0024751339, -5.004493E-4, -0.053164832] +gra[9][4][9] = [-0.15634215, -0.1966943, -0.3515998, -0.25845155, -0.33950344, -0.20358957, -0.21933496, -0.40186983, -0.26190245, -0.16340552, -0.27219427] +gra[9][5][0] = [-3.8481143E-5, -0.0019296022, 0.0016065463, -7.568941E-4, 0.0, -0.0014013414, 0.004997642, -3.050395E-11, 0.0012653338, 0.012965051, -0.0059786467] +gra[9][5][1] = [-5.13921E-4, 0.0, -0.037808705, -0.010353064, -0.035776734, -0.0033323471, -0.03597452, 0.079702035, -7.720956E-4, 0.01583714, -0.10485327] +gra[9][5][2] = [-0.009741628, -0.019480554, -0.06413903, 0.0, -0.022061262, -0.008486157, -0.009571605, 0.004819586, -0.002324788, 0.00255187, -0.04806168] +gra[9][5][3] = [-0.0110905375, -0.015649442, -0.08020499, 0.0032001403, -0.016212534, -0.010371415, -0.0065214084, -2.5217576E-4, -0.010784232, 0.00255187, -0.034885447] +gra[9][5][4] = [-0.008626172, -0.017131412, -0.08585275, 0.0032001403, -0.013876671, -0.006897951, -0.0065214084, 0.0022252216, -0.009080861, 0.00255187, -0.03168124] +gra[9][5][5] = [-0.15634215, -0.18998952, -0.36502373, -0.22671008, -0.2769434, -0.20358957, -0.21868652, -0.37371886, -0.26190245, -0.16340552, -0.2585221] +gra[9][5][6] = [-0.0026225648, -0.00329998, -0.025685718, 0.0, 0.012947509, -0.012616217, -7.880372E-4, -0.013210811, 0.0011668268, 0.004373548, -0.06527156] +gra[9][5][7] = [-0.0076958933, -0.0263843, -0.016411217, -0.017452704, -2.6907446E-4, 4.886615E-13, -0.0057870867, 0.011656271, -0.008786375, -0.00811267, 0.0031243209] +gra[9][5][8] = [0.0, -0.01895187, 0.022294685, -0.0065694638, 0.022793658, -0.006035342, -0.04394223, 0.014637312, 0.002475134, 2.4045661E-11, -0.06604334] +gra[9][5][9] = [-0.15634215, -0.18998952, -0.36502373, -0.22671008, -0.2769434, -0.20358957, -0.21868652, -0.37371886, -0.26190245, -0.16340552, -0.2585221] +gra[9][6][0] = [-1.9379833E-5, -0.004478236] +gra[9][6][1] = [-0.031438198, 0.030764] +gra[9][6][2] = [-0.069543764, 0.001318386] +gra[9][6][3] = [-0.09118996, 0.0026769685] +gra[9][6][4] = [-0.09118996, 0.0] +gra[9][6][5] = [-0.10496058, -0.0012286699] +gra[9][6][6] = [-0.5014086, -0.22156538] +gra[9][6][7] = [-0.013997644, -0.01767266] +gra[9][6][8] = [0.0023319586, -6.0892664E-4] +gra[9][6][9] = [-0.5014086, -0.22156538] +gra[9][7][0] = [-3.8481143E-5, 0.0, -1.9379833E-5, -0.0029844372, 0.0, 9.378215E-4, 0.004997642, 0.0, 0.0012653338, 0.012965051, -0.004436887] +gra[9][7][1] = [-5.13921E-4, 0.0, -0.026578074, -0.006211838, -0.02472724, -0.0033323471, -0.0122409295, 0.043953314, 8.230112E-4, 0.018503062, -0.07874879] +gra[9][7][2] = [-0.011755253, -0.019480554, -0.06551596, 0.0, -0.02700362, -0.0062228492, -0.009571605, 0.0052266098, -0.004360152, 0.0, -0.037890106] +gra[9][7][3] = [-0.0051616803, -0.02772982, -0.08208022, 0.011604045, -0.016524691, -0.011060836, -0.0065214084, 0.0014358414, -0.010784232, 0.0, -0.02186584] +gra[9][7][4] = [-0.0035729608, -0.028745532, -0.08208022, 0.011604045, -0.016524691, -0.012650484, -0.0065214084, 0.0039132386, -0.009917714, 0.0, -0.02186584] +gra[9][7][5] = [-0.0020350767, -0.02772982, -0.09057815, 0.011604045, -0.017453253, -0.008297132, -0.009280194, 0.0016880172, -0.009947379, -0.0020343647, -0.023096858] +gra[9][7][6] = [-0.0015405889, -9.316074E-4, -0.05381691, 0.0047623203, 0.0, 0.0053935135, 4.2076397E-4, 0.005881849, -6.80316E-4, 0.0016483099, -0.0069982223] +gra[9][7][7] = [-0.16224875, -0.19711332, -0.36457542, -0.17255223, -0.11015577, -0.17975295, -0.2606367, -0.1860249, -0.28262648, -0.14453895, -0.2916181] +gra[9][7][8] = [0.0, -0.020787204, 0.022655375, -0.003890037, 0.04273223, -0.006035342, -0.04434924, 7.8614766E-4, 0.0024751343, 2.4045661E-11, -0.05973374] +gra[9][7][9] = [-0.16224875, -0.19711332, -0.36457542, -0.17255223, -0.11015577, -0.17975295, -0.2606367, -0.1860249, -0.28262648, -0.14453895, -0.2916181] +gra[9][8][0] = [0.008273305, 0.0, 6.20738E-4, 4.4457944E-11, -0.0021720084, 9.538275E-4] +gra[9][8][1] = [0.023566004, 0.0, -9.987416E-4, -0.0050757998, 0.005938728, 0.012229878] +gra[9][8][2] = [-0.05634791, -0.019480554, -0.0053461394, -0.0062228492, 0.009140637, -0.0064943894] +gra[9][8][3] = [-0.08876743, -0.009889483, -0.002145999, -0.010371415, 0.0069431528, -0.007944971] +gra[9][8][4] = [-0.07633048, -0.010905196, -0.002145999, -0.012650484, 0.0069431528, -0.007944971] +gra[9][8][5] = [-0.089960665, -0.009889483, -0.002145999, -0.008297132, 0.0069431528, -0.007944971] +gra[9][8][6] = [-0.056910094, 0.0, 0.0, -0.012947457, -0.0017974195, -0.0031688735] +gra[9][8][7] = [-0.06844245, -0.021147298, -0.006194906, -0.0066199475, 0.009164523, -0.011917457] +gra[9][8][8] = [-0.2550567, -0.09885185, -0.22504526, -0.18872045, -0.1348899, -0.17494895] +gra[9][8][9] = [-0.2550567, -0.09885185, -0.22504526, -0.18872045, -0.1348899, -0.17494895] +gra[9][10][9] = [0.10852815, -0.025776992, -0.2302414, -0.31093428, -0.15383463, -0.024499029, -0.094033964] +gra[9][10][10] = [0.10852815, -0.025776992, -0.2302414, -0.31093428, -0.15383463, -0.024499029, -0.094033964] +gra[9][10][11] = [-0.02225552, 0.09129608, -0.1057563, -0.024842158, -0.006525742, -0.120727904, 0.11680413] +gra[9][10][12] = [-0.062789634, 0.061075095, -0.06308911, -0.07374247, -8.7093055E-4, -0.065352134, 0.11862738] +gra[9][10][13] = [9.415448E-4, 0.09611326, -0.04225102, -0.07940817, 0.0029196735, -0.085086055, 0.15611345] +gra[9][10][14] = [-0.115164116, -1.8879399E-4, 0.020602407, 0.062252887, -0.01980718, 0.0047443355, 0.026617764] +gra[9][11][9] = [-0.0668847, -0.040929336, 0.04409513, -0.16642815, -0.20053107, -0.10886454, -0.4057592, -0.2498812, -0.09408637, -0.08808707, -0.14613786] +gra[9][11][10] = [0.0013266006, 0.0033504684, 0.021805383, 0.052153945, 0.10140834, -0.09087926, -0.06761236, 0.07752701, 0.0014439123, 0.023591425, 0.011768046] +gra[9][11][11] = [-0.0668847, -0.040929336, 0.04409513, -0.16642815, -0.20053107, -0.10886454, -0.4057592, -0.2498812, -0.09408637, -0.08808707, -0.14613786] +gra[9][11][12] = [-0.02479161, -0.049128816, -0.046256132, 0.038998794, 0.0664641, -0.013100912, 0.024784435, 0.033664178, -0.0016438005, 0.005044714, 0.0374223] +gra[9][11][13] = [0.055205453, -0.02576902, 0.062797636, -0.01856041, 0.005523918, -0.04292103, 0.010837065, 0.016201805, -0.0016438005, -9.234785E-4, -0.0032215076] +gra[9][11][14] = [0.04499191, 0.023527658, -0.11728629, 0.013822016, 0.00838391, 0.031298243, 0.14430822, 0.040411703, 0.0, 0.0, -0.09829482] +gra[9][12][9] = [-0.088614725, -0.094498485, -0.08277482, -0.2645721, -0.26549575, -0.1707028, -0.3550032, -0.2749477, -0.10875442, -0.1222126, -0.22865866] +gra[9][12][10] = [0.01290104, -2.3767166E-4, 0.010322846, 0.081089616, 0.07942977, -0.063628495, -0.018640457, 0.09832135, 0.0013697329, 0.011636256, 0.010626682] +gra[9][12][11] = [-0.032606002, 0.042882897, 0.17033508, -0.0199083, -0.014172083, -0.027323436, 0.004347658, 0.023991466, 7.6891546E-4, -0.002900556, -0.0042543197] +gra[9][12][12] = [-0.088614725, -0.094498485, -0.08277482, -0.2645721, -0.26549575, -0.1707028, -0.3550032, -0.2749477, -0.10875442, -0.1222126, -0.22865866] +gra[9][12][13] = [0.17182983, -0.009854233, 0.06964333, -0.0068727885, -0.038786367, -0.036921203, -0.0041805073, 0.05531818, -0.0016438005, -0.0023427363, 0.008229998] +gra[9][12][14] = [0.044688687, 0.022228086, -0.08461296, 0.023569753, 0.023626532, 0.039617892, 0.12991723, 0.020360775, 0.0, -2.2505768E-11, -0.06410605] +gra[9][13][9] = [-0.089378946, -0.0048200767, -0.045694027, -0.24630201, -0.21202603, -0.24109656, -0.31626335, -0.22658204, -0.11701275, -0.12256098, -0.22603387] +gra[9][13][10] = [0.012254806, 0.0016493145, -0.017773198, 0.07629947, 0.07468779, -0.06672881, 0.011702432, 0.09033154, 0.0013697329, 0.015515008, 0.037934404] +gra[9][13][11] = [-0.03336004, 0.03658518, 0.18911833, 0.004911943, -0.029995129, -0.023034235, 0.006724406, 0.030979762, 7.6891546E-4, -0.005151834, 0.007776879] +gra[9][13][12] = [-0.0013462165, 0.017152274, 0.14371338, 0.05429946, -0.0017973538, -0.031859662, 0.011744333, 0.03448535, -1.4217425E-4, -0.004681904, -0.008489365] +gra[9][13][13] = [-0.089378946, -0.0048200767, -0.045694027, -0.24630201, -0.21202603, -0.24109656, -0.31626335, -0.22658204, -0.11701275, -0.12256098, -0.22603387] +gra[9][13][14] = [2.063606E-4, 0.030281678, -0.17126273, 0.029621735, -0.0021256413, 0.019744035, 0.093215674, 0.011856999, 0.0, -0.0013691243, -0.067090854] +gra[9][14][9] = [0.4212072, -0.33166724, -0.28538382, 0.02167102, -0.22091122, -0.12435703, -0.107981555, -0.15031114] +gra[9][14][10] = [-0.017961588, 0.058655586, 0.031953864, 5.054381E-4, -0.0062238164, -0.001011658, -0.0025138534, -0.007839976] +gra[9][14][11] = [-0.043990437, 0.12072055, 0.06320075, 0.07223154, -0.025583364, -0.0040659397, -0.017439922, -0.04387355] +gra[9][14][12] = [-0.051827066, 0.06880729, 0.065759294, 0.056509502, -0.034117844, -0.008058093, 0.015293969, -0.040765796] +gra[9][14][13] = [-0.04400757, 0.087297834, 0.046406917, 0.06302466, -0.03168694, -0.008058093, 0.015807634, -0.040765796] +gra[9][14][14] = [0.4212072, -0.33166724, -0.28538382, 0.02167102, -0.22091122, -0.12435703, -0.107981555, -0.15031114] +gra[10][0][0] = [-0.10724866] +gra[10][0][1] = [-0.023958247] +gra[10][0][2] = [-0.015149269] +gra[10][0][3] = [0.021138027] +gra[10][0][4] = [0.022920009] +gra[10][0][5] = [0.030904416] +gra[10][0][6] = [0.0013775101] +gra[10][0][7] = [0.056586806] +gra[10][0][8] = [-0.03225985] +gra[10][0][9] = [0.017028254] +gra[10][0][10] = [-0.10724866] +gra[10][1][0] = [0.0016441452, 0.0, -0.0021720084, 0.0] +gra[10][1][1] = [-0.048993174, -0.25442305, -0.15137123, -0.16780452] +gra[10][1][2] = [0.07379909, 0.0388396, -0.016389685, -0.026443] +gra[10][1][3] = [0.06901149, -0.007807495, -0.012324876, -0.02191716] +gra[10][1][4] = [0.079818554, -9.871258E-4, -0.010499197, -0.020035459] +gra[10][1][5] = [0.067307614, 0.03540191, -0.012324876, -0.02191716] +gra[10][1][6] = [0.00137751, 0.0038837004, 6.091478E-4, -0.0039868616] +gra[10][1][7] = [0.13875346, 0.056739453, -0.011917006, -0.024018921] +gra[10][1][8] = [-0.023770995, -0.03150455, -0.0077087167, -0.0012991752] +gra[10][1][9] = [0.07292722, 0.014448465, -0.015642967, -0.019397447] +gra[10][1][10] = [-0.048993174, -0.25442305, -0.15137123, -0.16780452] +gra[10][2][0] = [5.761308E-4, -0.0015712132, 0.0036445942, 0.0, 3.5459347E-11, -0.00452922, -9.497553E-4, 0.0031306578] +gra[10][2][1] = [0.035186574, -0.0010594062, -0.0041412255, -3.7906157E-11, -0.0074518225, -0.026237296, -0.019708391, 0.0068521057] +gra[10][2][2] = [-0.24751812, -0.1072654, -0.23525298, -0.14890505, -0.2227314, -0.2392259, -0.4945354, -0.15355895] +gra[10][2][3] = [-0.0034905192, 0.0012402993, -0.012895271, 0.0013912377, -0.014404967, -0.022028076, 0.07092665, -0.002519714] +gra[10][2][4] = [-0.006486016, -0.002786019, -0.010376353, 0.0013912377, -0.01602141, -0.0024361145, 0.09002073, -0.0022766325] +gra[10][2][5] = [-0.010646315, -0.0018251493, -0.007871137, -0.0011139774, -0.027142221, 0.00792582, 0.12973902, -0.002519714] +gra[10][2][6] = [-0.015615815, 0.008577139, -0.002648871, -0.0020981468, -0.028376034, 0.020017283, 0.051820286, -8.903948E-4] +gra[10][2][7] = [0.011381457, 2.787984E-5, 0.006366184, 0.005368133, 0.030362133, 0.027474642, -0.032702655, 0.0024165655] +gra[10][2][8] = [-0.02509948, 0.0028593205, -0.0036909212, -0.050199, -0.02083967, 0.04475024, -0.014748111, 3.69642E-11] +gra[10][2][9] = [0.0010847622, -0.005951785, -0.036049217, 0.0013912377, -0.03142338, 0.051694456, 0.017777147, -1.1858091E-11] +gra[10][2][10] = [-0.24751812, -0.1072654, -0.23525298, -0.14890505, -0.2227314, -0.2392259, -0.4945354, -0.15355895] +gra[10][3][0] = [5.7613075E-4, -0.0015712132, 0.0, 0.0, -8.9840154E-4, 0.0, -0.007079258, 0.0031306578] +gra[10][3][1] = [0.079702035, -0.0010594062, -0.010353064, 0.0, -0.01857777, -0.047211148, -0.027547482, 0.0068521057] +gra[10][3][2] = [0.0045674103, -0.0020977946, -7.2137534E-4, -0.0011517848, 0.060968373, -0.028034722, -0.019437145, -0.0022633083] +gra[10][3][3] = [-0.3808341, -0.11171311, -0.29113835, -0.18852146, -0.3075745, -0.33505765, -0.14130302, -0.17290878] +gra[10][3][4] = [-0.0029814718, -0.0018251492, -0.0039162054, 0.0013912377, 0.02982644, -0.030893678, 0.1712429, -0.0022766325] +gra[10][3][5] = [-0.0087393755, -0.0018251492, -0.0014109905, -0.0011139774, 0.016413854, 0.007470367, 0.21749142, -0.002519714] +gra[10][3][6] = [-0.010240156, -0.0032056724, 0.001106434, 0.0, -0.01644507, 0.014614694, 0.10100887, -0.0038824668] +gra[10][3][7] = [0.015030102, -0.0018251494, 0.0093385, 0.005368133, 0.041742355, 0.0043952167, -0.007053854, 0.0024165655] +gra[10][3][8] = [-0.0039870986, -1.0503716E-10, -0.0036909212, -0.04491329, -0.018870585, 0.042688906, 0.050200105, 3.69642E-11] +gra[10][3][9] = [0.022444844, -0.005951785, -0.031732466, 0.0013912377, -0.007614853, -0.0018208846, 0.14795507, 3.051486E-4] +gra[10][3][10] = [-0.3808341, -0.11171311, -0.29113835, -0.18852146, -0.3075745, -0.33505765, -0.14130302, -0.17290878] +gra[10][4][0] = [5.7613075E-4, -0.0015712132, 0.0, 0.0, 0.0016259261, 0.0, -0.0045549306, 0.0031306578] +gra[10][4][1] = [0.079702035, -0.0010594062, -0.010353064, 0.0, -0.01857777, -0.047211148, -0.027547482, 0.0068521057] +gra[10][4][2] = [0.007836706, -0.0020977946, -7.2137534E-4, -0.0011517848, 0.035989325, -0.030370584, -0.031994678, -0.0022633083] +gra[10][4][3] = [0.0014574399, -8.537594E-4, 0.0, 0.0035487313, 0.05433384, -0.0207291, -0.0020670719, -0.00507246] +gra[10][4][4] = [-0.37772804, -0.10949644, -0.29113835, -0.19085066, -0.3075745, -0.33505765, -0.15541108, -0.17290878] +gra[10][4][5] = [-0.0071417717, -0.0018251492, -0.0014109905, -0.0011139774, 0.017833926, -0.013724092, 0.1913245, -0.0055597015] +gra[10][4][6] = [-0.010240156, -0.002249328, -2.0397897E-4, -0.0015748128, -0.01644507, 0.014614694, 0.10100887, -0.0038824668] +gra[10][4][7] = [0.015030102, -0.0018251494, 0.0093385, 0.005368133, 0.041742355, 0.00489654, -0.008712063, 0.0024165655] +gra[10][4][8] = [-0.0039870986, -0.0030642115, -0.0036909212, -0.04491329, -0.018870585, 0.042688906, 0.054841205, 3.69642E-11] +gra[10][4][9] = [0.022444844, -0.005951785, -0.031732466, 0.0013912377, -0.007614853, -6.1365584E-4, 0.14629687, 4.9778556E-11] +gra[10][4][10] = [-0.37772804, -0.10949644, -0.29113835, -0.19085066, -0.3075745, -0.33505765, -0.15541108, -0.17290878] +gra[10][5][0] = [5.7613075E-4, -0.0015712132, -0.0013776321, -0.0019296022, 0.0016259261, 0.0, -0.0066208825, -0.0023391629] +gra[10][5][1] = [0.079702035, -0.0010594062, -0.010353064, 0.0, -0.025281731, -0.039073102, 0.0036873422, 0.0068521057] +gra[10][5][2] = [0.004819586, -0.0020977946, -7.2137534E-4, -0.0011517848, 0.03526648, -0.024975596, -0.02962697, -0.0022633083] +gra[10][5][3] = [0.0014574399, -8.756455E-4, 0.0, 0.00401499, 0.052477915, -0.017669976, -0.007751686, -0.00507246] +gra[10][5][4] = [0.00145744, 0.0, 0.0, 0.0054343482, 0.052477915, -0.015334111, 0.0026334636, -0.0013942088] +gra[10][5][5] = [-0.34957707, -0.10949644, -0.25939685, -0.18414588, -0.32099843, -0.27249756, -0.08553642, -0.17290878] +gra[10][5][6] = [-0.013210811, -0.002885283, 0.001106434, 0.0, -0.015254037, 0.014614694, 0.0835998, -0.0038824668] +gra[10][5][7] = [0.015030102, -0.0018251494, 0.0093385, 0.005368133, 0.043162428, -0.0019111116, -0.020885175, 4.886615E-13] +gra[10][5][8] = [0.0050476207, -1.0503716E-10, -0.0036909212, -0.037708938, -0.018870585, 0.0292247, 0.06806866, 3.69642E-11] +gra[10][5][9] = [0.022444844, -0.005951785, -0.019626053, 0.0013912377, -0.0061947796, -0.0074213073, 0.13643174, 4.9778556E-11] +gra[10][5][10] = [-0.34957707, -0.10949644, -0.25939685, -0.18414588, -0.32099843, -0.27249756, -0.08553642, -0.17290878] +gra[10][6][0] = [0.0019107888, 3.5459347E-11] +gra[10][6][1] = [0.029803114, -0.018911218] +gra[10][6][2] = [-5.509861E-4, 0.028633261] +gra[10][6][3] = [6.034209E-11, 0.040264454] +gra[10][6][4] = [6.034209E-11, 0.040264454] +gra[10][6][5] = [4.487872E-11, 0.03214158] +gra[10][6][6] = [-0.16041966, -0.3927623] +gra[10][6][7] = [-0.01347043, 0.048356306] +gra[10][6][8] = [-0.011656463, -0.054429226] +gra[10][6][9] = [0.016295122, 0.0040693013] +gra[10][6][10] = [-0.16041966, -0.3927623] +gra[10][7][0] = [5.761308E-4, -0.0015712132, -0.003605175, 0.0, 3.5459347E-11, 0.0, -9.497553E-4, 3.0349702E-11] +gra[10][7][1] = [0.043953314, -0.0010594062, -0.006211838, 0.0, -0.0140511, -0.028023608, -0.027011054, 0.0068521057] +gra[10][7][2] = [0.0052266098, -0.0041114204, -7.2137534E-4, -0.0011517848, 0.033889554, -0.029917952, 0.00254313, -2.2155085E-11] +gra[10][7][3] = [0.003145457, 0.0050532115, 0.008403905, -0.008065389, 0.050602682, -0.01798213, 0.0076085986, -0.0057618804] +gra[10][7][4] = [0.0031454572, 0.0050532115, 0.008403905, -0.006179772, 0.050602682, -0.01798213, 0.0076085986, -0.00507246] +gra[10][7][5] = [0.0031454572, 0.008180746, 0.008403905, -0.008065389, 0.050602682, -0.017407378, 0.009909841, -0.00507246] +gra[10][7][6] = [0.0010625808, -4.1459492E-4, 0.0036949979, -0.0028234723, -0.0023392674, -0.0028964565, 0.0150217265, 0.003376759] +gra[10][7][7] = [-0.16188312, -0.115403034, -0.205239, -0.1912697, -0.32055005, -0.10571001, -0.38804692, -0.14907216] +gra[10][7][8] = [-0.008803545, -1.0503716E-10, -0.0010114949, -0.03954427, -0.025353342, 0.049163274, 0.017981954, 3.69642E-11] +gra[10][7][9] = [0.0083061075, -0.004127358, -0.03981907, 0.0013912377, -0.015796406, 0.08416972, -0.006380614, 7.39957E-11] +gra[10][7][10] = [-0.16188312, -0.115403034, -0.205239, -0.1912697, -0.32055005, -0.10571001, -0.38804692, -0.14907216] +gra[10][8][0] = [0.0076038064, 0.0, -0.0021720084, 0.0] +gra[10][8][1] = [0.04922101, -9.987416E-4, 0.002922766, 0.007726843] +gra[10][8][2] = [0.04503881, -0.011413654, 0.004687597, 1.9001073E-11] +gra[10][8][3] = [0.045896675, -0.010692279, 0.0037861012, -0.00507246] +gra[10][8][4] = [0.058333617, -0.010692279, 0.0037861012, -0.00507246] +gra[10][8][5] = [0.053201366, -0.010692279, 0.0037861012, -0.00507246] +gra[10][8][6] = [-0.007944579, -0.0022261534, -0.010934131, -0.024378616] +gra[10][8][7] = [0.027071448, -0.010692279, 0.006007472, -0.0045456644] +gra[10][8][8] = [-0.23839745, -0.27353147, -0.13540275, -0.1630716] +gra[10][8][9] = [0.045568958, 0.009596035, -0.022897031, -0.016538091] +gra[10][8][10] = [-0.23839745, -0.27353147, -0.13540275, -0.1630716] +gra[10][9][0] = [5.761308E-4, -5.123068E-4, 0.0072497693, 0.0, 3.5459347E-11, -0.0018813149, 0.0, 3.0349702E-11] +gra[10][9][1] = [0.042927664, -0.0029176604, -0.006211838, 0.0, -0.014741326, -0.019474655, -0.004241555, -8.7473745E-4] +gra[10][9][2] = [0.0043670787, -0.0020977946, -7.2137534E-4, -0.0011517848, 0.034133404, -0.019950185, -0.022405695, -0.0022633083] +gra[10][9][3] = [0.0014574399, 0.0, 0.0010881305, 0.0, 0.051389784, -0.017669974, -0.018819861, -0.00507246] +gra[10][9][4] = [0.00145744, 0.0, 0.0010881305, 0.0018856167, 0.051389784, -0.017669974, -0.018819861, -0.00507246] +gra[10][9][5] = [0.00145744, -4.5008247E-4, 0.0010881305, -3.2877305E-12, 0.051389784, -0.016166661, -0.016518619, -0.00507246] +gra[10][9][6] = [-0.0021946991, 0.0, 0.0010157842, -0.0018918649, -0.0012785172, -0.004598216, 7.150832E-4, -0.0025067397] +gra[10][9][7] = [0.0039554364, -0.0011536116, -8.487664E-4, 0.041617688, 0.03015891, -0.020984316, -0.006567695, -0.0022633083] +gra[10][9][8] = [0.024523886, 0.0, -0.0020706127, -9.234166E-4, -0.0130427005, -0.0047317725, -0.02894469, -0.0021502178] +gra[10][9][9] = [-0.1832146, -0.103708565, -0.18610916, -0.15677848, -0.16264665, -0.23057386, -0.3202236, -0.170793] +gra[10][9][10] = [-0.1832146, -0.103708565, -0.18610916, -0.15677848, -0.16264665, -0.23057386, -0.3202236, -0.170793] +gra[10][11][10] = [-0.26761565, -0.14027157, -0.13171935, -0.124156564, -0.10518143, -0.16079436, -0.2556547, -0.0296514] +gra[10][11][11] = [-0.26761565, -0.14027157, -0.13171935, -0.124156564, -0.10518143, -0.16079436, -0.2556547, -0.0296514] +gra[10][11][12] = [0.008379771, -0.058434255, 0.03282719, -0.026505746, 0.037004553, 0.071838595, 0.009776115, -0.022090515] +gra[10][11][13] = [0.015646577, -0.048322476, 0.087542325, -0.033848234, 0.075140424, 0.02229148, 0.043451987, -0.07398519] +gra[10][11][14] = [0.03841678, 0.0666777, 0.007093721, -0.049995307, -0.029425904, 0.01705503, 0.02315872, -0.0044668466] +gra[10][12][10] = [-0.3153644, -0.17907926, -0.2795965, -0.1764041, -0.25483686, -0.26501107, -0.29615897, -0.1761473] +gra[10][12][11] = [0.021941906, -0.008812627, -0.022413656, -0.032252528, 0.04717913, -0.0048893415, -0.0111137815, -0.01108202] +gra[10][12][12] = [-0.3153644, -0.17907926, -0.2795965, -0.1764041, -0.25483686, -0.26501107, -0.29615897, -0.1761473] +gra[10][12][13] = [0.03465397, 0.09053512, 0.070818484, -0.04267802, 0.061774462, -0.023255207, -0.034763303, -0.06168799] +gra[10][12][14] = [0.023088023, 0.07583694, -0.006512917, -0.050077446, -0.013676573, 0.015877765, 0.017984802, 0.003852799] +gra[10][13][10] = [-0.26699868, -0.17984349, -0.26132643, -0.08672568, -0.21775608, -0.21154135, -0.2510417, -0.2465411] +gra[10][13][11] = [0.026880646, -0.007880481, 0.0059093176, -0.032035075, 0.0749675, -0.019367468, -0.025300737, -0.0133296205] +gra[10][13][12] = [0.03448535, -0.0041715456, 0.028034342, -0.05057187, 0.053446256, 0.008786059, -0.033961922, -0.016927706] +gra[10][13][13] = [-0.26699868, -0.17984349, -0.26132643, -0.08672568, -0.21775608, -0.21154135, -0.2510417, -0.2465411] +gra[10][13][14] = [0.014584247, 0.035479832, -4.2649265E-4, -0.046772767, -0.08912952, -0.008224874, 0.024729319, -0.006639992] +gra[10][14][10] = [0.24545878, -0.13058239, -0.012254239, -0.43756452] +gra[10][14][11] = [-0.036215328, -0.022168951, -9.78672E-4, -0.020904908] +gra[10][14][12] = [-0.05016438, -0.018123059, -0.0023689207, -0.024299968] +gra[10][14][13] = [-0.033437256, -0.018123059, -9.786718E-4, -0.0047152033] +gra[10][14][14] = [0.24545878, -0.13058239, -0.012254239, -0.43756452] +gra[11][0][0] = [-0.12389924] +gra[11][0][1] = [0.11250799] +gra[11][0][2] = [-0.020803642] +gra[11][0][3] = [-0.015740056] +gra[11][0][4] = [-0.015740056] +gra[11][0][5] = [0.009709348] +gra[11][0][6] = [-0.011211409] +gra[11][0][7] = [0.0140898395] +gra[11][0][8] = [0.10553579] +gra[11][0][9] = [0.004992515] +gra[11][0][10] = [0.06241366] +gra[11][0][11] = [-0.12389924] +gra[11][1][0] = [0.0022879262, -0.001958814, 6.207379E-4, 4.4457944E-11, -0.0021720084, 9.538275E-4] +gra[11][1][1] = [-0.0980223, -0.1556874, -0.17940705, -0.191914, -0.15800656, -0.2076993] +gra[11][1][2] = [0.070815764, -0.04019269, 0.061212253, -0.021304604, -0.008943601, -0.046964385] +gra[11][1][3] = [0.03480445, -0.040399235, 0.009230967, -0.019397447, -0.010305206, -0.06565809] +gra[11][1][4] = [0.043829545, -0.040399235, 0.016051337, -0.019397447, -0.010305206, -0.065682895] +gra[11][1][5] = [0.048783593, -0.030501723, 0.049452126, -0.014411522, -0.010305206, -0.062384807] +gra[11][1][6] = [-0.011211409, -0.0024341857, -0.0018631071, -0.018473925, 0.002059937, -0.002325139] +gra[11][1][7] = [0.098927535, -0.030079987, 0.05705068, -0.027755124, -0.0062002833, -0.072541356] +gra[11][1][8] = [0.112763375, -3.4384023E-11, -0.029062023, -0.009225717, -0.003922395, -0.0036619226] +gra[11][1][9] = [0.074122116, -0.03479038, 0.0171996, -0.019397447, -0.007929913, -0.04117297] +gra[11][1][10] = [0.070592314, 0.05356895, 0.025417577, 0.0056302026, 0.005816114, -0.03663111] +gra[11][1][11] = [-0.0980223, -0.1556874, -0.17940705, -0.191914, -0.15800656, -0.2076993] +gra[11][2][0] = [-3.8481143E-5, 0.0, 6.4378086E-4, 0.0042653317, -0.00452922, 0.0031306578, 2.969677E-4, -0.0035838732, 0.0012653338, 0.004467465, -0.008016303] +gra[11][2][1] = [0.030020196, -3.7906157E-11, -0.047747806, -0.0041412255, -0.02294093, -0.0028272104, -0.0042415615, 0.035186574, 0.0038279954, 0.0010309231, -0.03033242] +gra[11][2][2] = [-0.16756175, -0.15805623, -0.17044538, -0.14639679, -0.26190105, -0.1729358, -0.2613429, -0.26960972, -0.21621762, -0.14156401, -0.25597513] +gra[11][2][3] = [-0.0045980383, -0.027203228, -0.05041236, 0.0087688975, -0.02118981, 0.0, 0.0055504087, -0.00686435, -0.0013193127, 0.0010214404, -0.13410753] +gra[11][2][4] = [-0.008624356, -0.031413544, -0.05190116, 0.011287816, -0.0015978473, -0.0016386209, 0.00510925, -0.009859847, -0.0013193127, 0.009945178, -0.16727719] +gra[11][2][5] = [-0.016839283, -0.027814709, -0.045556985, 0.01080478, 0.008764084, 0.0049859243, 0.024772864, -0.014020145, -0.0065963734, 0.0048753386, -0.160696] +gra[11][2][6] = [0.010826467, -0.005398127, -0.042189464, -0.009502113, 0.020070488, -0.015343344, -0.007742171, -0.015615815, 0.0, -2.2300222E-11, -0.08992048] +gra[11][2][7] = [-0.0058104573, -0.022992909, -0.0093545215, 0.011303109, 0.029116679, -0.0013196387, 0.022071034, 0.008007627, -0.009063331, 9.1650593E-4, -0.16666228] +gra[11][2][8] = [0.0028593205, -0.033843383, 0.10937937, -0.0012483946, 0.045643046, -0.007926542, -0.049703237, -0.029244697, 0.002475134, 8.743692E-4, -0.048316423] +gra[11][2][9] = [-0.008840187, -0.028816238, -0.04115401, 0.004407729, 0.06700909, -6.163665E-11, 0.03132334, -0.008266031, -0.0051215123, 9.1650593E-4, -0.14523569] +gra[11][2][10] = [-0.012713343, 0.06271266, 0.03047761, -0.0023483417, 0.085967824, 0.013169683, 7.657199E-4, -0.039369643, 0.0349213, 0.0033671232, -0.056439284] +gra[11][2][11] = [-0.16756175, -0.15805623, -0.17044538, -0.14639679, -0.26190105, -0.1729358, -0.2613429, -0.26960972, -0.21621762, -0.14156401, -0.25597513] +gra[11][3][0] = [-3.8481143E-5, 0.0, -2.546208E-4, 6.207379E-4, 0.0, 0.0031306578, 2.969677E-4, -0.0035838732, 0.0012653338, 0.0020189893, -0.0059786467] +gra[11][3][1] = [0.030020196, 0.0, -0.0709532, -0.010353064, -0.04391478, -0.004779683, -0.03789397, 0.079702035, 0.0038279954, -0.0024918886, -0.076348856] +gra[11][3][2] = [-0.010050564, -0.020074947, -0.09627534, 0.0, -0.025120389, -0.010792062, -0.009571605, 0.0045674103, -0.005357419, 0.004071039, -0.049354907] +gra[11][3][3] = [-0.17200947, -0.19767262, -0.25528848, -0.20228212, -0.3577328, -0.19228561, -0.21679747, -0.40292573, -0.21605387, -0.17789312, -0.2651151] +gra[11][3][4] = [-0.0076634865, -0.027203228, -0.007962941, 0.017747963, -0.030055411, -0.0016386209, -0.02221351, -0.0063553033, -0.004338989, 0.0031181932, 0.045642] +gra[11][3][5] = [-0.016839283, -0.027814709, -0.0020009093, 0.017264927, 0.008308632, 0.0049859243, -0.0017681323, -0.012113207, -0.01052086, 0.0031181932, 0.036681686] +gra[11][3][6] = [-9.563443E-4, -0.00329998, -0.030258507, -0.0057468074, 0.0146678975, -0.018335417, -0.0016823349, -0.010240156, 0.0017409262, 8.040292E-12, -0.0677805] +gra[11][3][7] = [-0.007663487, -0.022992909, 0.002025697, 0.014275422, 0.006037254, -0.0013196387, -0.00424268, 0.011656271, -0.011340797, 0.0031181932, 0.021348575] +gra[11][3][8] = [0.0, -0.028557673, 0.111348465, -0.0012483946, 0.043581713, -0.007926542, -0.057652134, -0.008132312, 0.002475134, 2.4045661E-11, -0.08010083] +gra[11][3][9] = [-0.008840187, -0.027703306, -0.01734548, 0.008724481, 0.019094173, 3.0514854E-4, -0.008290166, 0.013094053, -0.0051215123, 0.007877499, 0.033490654] +gra[11][3][10] = [-0.012713343, 0.055398878, 0.024536688, -0.0044680266, 0.016944142, 0.01225795, 0.009501182, -0.013563797, 0.0349213, -1.8246614E-11, 8.919211E-4] +gra[11][3][11] = [-0.17200947, -0.19767262, -0.25528848, -0.20228212, -0.3577328, -0.19228561, -0.21679747, -0.40292573, -0.21605387, -0.17789312, -0.2651151] +gra[11][4][0] = [-3.8481143E-5, 0.0, 0.002269707, 6.207379E-4, 0.0, 0.0031306578, 2.969677E-4, -0.0035838732, 0.0012653338, 0.004467465, -0.0059786467] +gra[11][4][1] = [0.030020196, 0.0, -0.0709532, -0.010353064, -0.04391478, -0.004779683, -0.03789397, 0.079702035, 0.0038279954, -0.0024918886, -0.076348856] +gra[11][4][2] = [-0.010050564, -0.020074947, -0.11560663, 0.0, -0.027456252, -0.014940629, -0.009571605, 0.007836706, -0.0046069673, 0.0031174747, -0.05364394] +gra[11][4][3] = [-0.013581293, -0.023612332, -0.12310233, 0.0, -0.01927166, -0.008297132, -0.0065214084, -2.5217576E-4, -0.009064015, 0.0025277506, -0.040145326] +gra[11][4][4] = [-0.16979279, -0.20000182, -0.25528848, -0.20228212, -0.3577328, -0.19228561, -0.21053797, -0.39981967, -0.21605387, -0.17789312, -0.3072443] +gra[11][4][5] = [-0.016839283, -0.02360439, -0.0024904609, 0.017264927, -0.012885826, 0.0019459366, -0.0053175483, -0.010515601, -0.008362633, 0.002235441, 0.05048409] +gra[11][4][6] = [1.1364407E-11, -0.004874793, -0.030258507, -0.0070572207, 0.0146678975, -0.018335417, -0.0016823349, -0.010240156, 0.0, -0.0012154061, -0.06982803] +gra[11][4][7] = [-0.007663487, -0.022992909, 0.002025697, 0.014275422, 0.0065385774, -0.0013196387, -0.00424268, 0.011656271, -0.011340797, 0.0035397436, 0.017222213] +gra[11][4][8] = [-0.0030642115, -0.028557673, 0.111348465, -0.0012483946, 0.043581713, -0.007926542, -0.057652134, -0.008132312, 0.0024751339, -5.004493E-4, -0.08010083] +gra[11][4][9] = [-0.008840187, -0.027703306, -0.01734548, 0.008724481, 0.020301398, 0.0, -0.008290166, 0.013094053, -0.0051215123, 0.00829905, 0.029364292] +gra[11][4][10] = [-0.009854687, 0.055398878, 0.024536688, -0.0067656627, 0.016944142, 0.01225795, 0.007954158, -0.013563797, 0.0349213, -1.8246614E-11, -0.0039156247] +gra[11][4][11] = [-0.16979279, -0.20000182, -0.25528848, -0.20228212, -0.3577328, -0.19228561, -0.21053797, -0.39981967, -0.21605387, -0.17789312, -0.3072443] +gra[11][5][0] = [-3.8481143E-5, -0.0019296022, 0.002269707, -7.5689424E-4, 0.0, -0.0023391629, 2.969678E-4, -0.0035838732, 0.0012653338, 0.004467465, -0.0059786467] +gra[11][5][1] = [0.030020196, 0.0, -0.07765716, -0.010353064, -0.035776734, -0.004779683, -0.03315192, 0.079702035, 0.0038279954, -0.0024918886, -0.08752008] +gra[11][5][2] = [-0.010050564, -0.020074947, -0.11632947, 0.0, -0.022061262, -0.014940629, -0.009571605, 0.004819586, -0.005357419, 0.004071039, -0.045673024] +gra[11][5][3] = [-0.013603179, -0.023146072, -0.1193105, 0.0, -0.016212534, -0.012445698, -0.0065214084, -2.5217576E-4, -0.009064015, 0.004071039, -0.036929708] +gra[11][5][4] = [-0.011138814, -0.024628043, -0.124958254, 0.0, -0.013876671, -0.006897951, -0.0065214084, 0.0022252216, -0.009064015, 0.004071039, -0.0337255] +gra[11][5][5] = [-0.16979279, -0.19329701, -0.26871237, -0.17054062, -0.29517272, -0.19228561, -0.20988953, -0.3716687, -0.21605387, -0.17789312, -0.2935722] +gra[11][5][6] = [-6.359549E-4, -0.00329998, -0.029067473, -0.0057468074, 0.0146678975, -0.018335417, -7.880372E-4, -0.013210811, 0.0011668268, 3.0340515E-11, -0.06581834] +gra[11][5][7] = [-0.007663487, -0.022992909, 0.0034457669, 0.014275422, -2.6907446E-4, -0.0037362042, -0.003336246, 0.011656271, -0.011340797, 0.0035397436, 0.004515754] +gra[11][5][8] = [0.0, -0.021353321, 0.111348465, -0.0012483946, 0.030117506, -0.007926542, -0.06296009, 9.024069E-4, 0.002475134, 2.4045661E-11, -0.10057392] +gra[11][5][9] = [-0.008840187, -0.027703306, -0.015925407, 0.02083089, 0.00789333, 0.0, -0.00805038, 0.013094053, -0.0051215123, 0.00829905, 0.025783729] +gra[11][5][10] = [-0.012713343, 0.055398878, 0.024536688, -0.0067656627, 0.014414227, 0.007067173, 0.0078884885, -0.013563797, 0.0349213, -1.8246614E-11, 0.0035325633] +gra[11][5][11] = [-0.16979279, -0.19329701, -0.26871237, -0.17054062, -0.29517272, -0.19228561, -0.20988953, -0.3716687, -0.21605387, -0.17789312, -0.2935722] +gra[11][6][0] = [6.4378086E-4, -1.1624451E-11] +gra[11][6][1] = [-0.071286656, 0.030801235] +gra[11][6][2] = [-0.1217342, 0.0070741083] +gra[11][6][3] = [-0.13029547, 0.0013777877] +gra[11][6][4] = [-0.13029547, -0.0012991808] +gra[11][6][5] = [-0.1440661, -0.0012286699] +gra[11][6][6] = [-0.40509716, -0.22688024] +gra[11][6][7] = [0.0058593405, -0.016482558] +gra[11][6][8] = [0.084555104, -0.004157832] +gra[11][6][9] = [-0.007966436, 0.011194] +gra[11][6][10] = [0.06020448, -0.0011195537] +gra[11][6][11] = [-0.40509716, -0.22688024] +gra[11][7][0] = [-3.8481143E-5, 0.0, 6.4378086E-4, -0.0029844372, 0.0, 7.4807646E-11, 2.969678E-4, -0.0035838732, 0.0012653338, 0.004467465, -0.004436887] +gra[11][7][1] = [0.030020196, 0.0, -0.06642654, -0.006211838, -0.02472724, -0.004779683, -0.009418331, 0.043953314, 0.005423102, 1.7403252E-4, -0.06141561] +gra[11][7][2] = [-0.012064191, -0.020074947, -0.11770639, 0.0, -0.02700362, -0.01267732, -0.009571605, 0.0052266098, -0.007392783, 0.0015191694, -0.035501458] +gra[11][7][3] = [-0.0076743215, -0.035226453, -0.12118573, 0.008403905, -0.016524691, -0.013135118, -0.0065214084, 0.0014358414, -0.009064015, 0.0015191694, -0.0239101] +gra[11][7][4] = [-0.0060856016, -0.036242165, -0.12118573, 0.008403905, -0.016524691, -0.014724767, -0.0065214084, 0.0039132386, -0.009064015, 0.0015191694, -0.0239101] +gra[11][7][5] = [-0.0029837268, -0.035226453, -0.13455348, 0.008403905, -0.017453253, -0.008297132, -0.009280194, 0.0016880172, -0.009064015, 0.005695792, -0.025141122] +gra[11][7][6] = [-0.0015405889, -0.0022070524, -0.06335769, 0.0047623203, 0.0, 0.003376759, 0.0, 0.005881849, -6.80316E-4, 0.0021720878, -0.011135231] +gra[11][7][7] = [-0.17569938, -0.20042084, -0.26826409, -0.1163828, -0.12838514, -0.16844898, -0.2518397, -0.1839747, -0.23677793, -0.15902653, -0.32666808] +gra[11][7][8] = [0.0, -0.023188654, 0.110703185, 0.0014310319, 0.050056085, -0.007926542, -0.06307818, -0.012948758, 0.0024751343, 2.4045661E-11, -0.09486357] +gra[11][7][9] = [-0.009591804, -0.027703306, -0.025527036, 6.3787866E-4, 0.09388393, 2.4217142E-11, 0.048461273, -0.0010446829, -0.0051215123, 0.0059014526, -0.068173446] +gra[11][7][10] = [-0.017215462, 0.05885046, 0.053072125, -0.0054148408, 0.07146499, 0.004019258, 0.012924673, -0.018397888, 0.02149223, -0.0018405669, -0.0021806522] +gra[11][7][11] = [-0.17569938, -0.20042084, -0.26826409, -0.1163828, -0.12838514, -0.16844898, -0.2518397, -0.1839747, -0.23677793, -0.15902653, -0.32666808] +gra[11][8][0] = [0.008247588, -0.0055409744, 6.207379E-4, 4.4457944E-11, -0.0021720084, 9.538275E-4] +gra[11][8][1] = [-0.003154425, 0.0, -9.987416E-4, -0.0039049454, 0.005938728, 0.029147219] +gra[11][8][2] = [-0.10532865, -0.020074947, -0.010692279, -0.01267732, 0.006616043, -0.0041057393] +gra[11][8][3] = [-0.12466324, -0.017386114, -0.010692279, -0.012445698, 0.0044185594, -0.009989234] +gra[11][8][4] = [-0.1122263, -0.018401826, -0.010692279, -0.014724767, 0.0044185594, -0.009989234] +gra[11][8][5] = [-0.13072634, -0.017386114, -0.010692279, -0.008297132, 0.0044185594, -0.009989234] +gra[11][8][6] = [-0.07253664, -0.001275445, 0.0, -0.024378616, -0.0017974195, -0.0031688735] +gra[11][8][7] = [-0.11197672, -0.030472117, -0.011541045, -0.008694231, 0.0066399304, -0.013961719] +gra[11][8][8] = [-0.28742653, -0.13806987, -0.1985154, -0.18718107, -0.14203808, -0.16507426] +gra[11][8][9] = [0.057564765, -0.03289177, 0.025465125, -0.016538091, -0.011358074, -0.04761328] +gra[11][8][10] = [0.12816171, 0.050723344, 0.060807187, 0.0056302026, 0.018332137, -0.008218465] +gra[11][8][11] = [-0.28742653, -0.13806987, -0.1985154, -0.18718107, -0.14203808, -0.16507426] +gra[11][9][0] = [0.0010204252, 0.0, 6.4378086E-4, 0.0078705065, -0.0018813149, 7.4807646E-11, 2.969678E-4, -0.0035838732, 5.0569617E-4, 0.004467465, -0.0059786467] +gra[11][9][1] = [0.028161941, 0.0, -0.06711676, -0.010353064, -0.0019592715, -0.004779683, -0.014528066, 0.042927664, 0.0038279954, -0.017432136, -0.0529898] +gra[11][9][2] = [-0.010050564, -0.020074947, -0.11746254, 0.0, -0.018879909, -0.014940629, -0.0045123687, -0.0017202278, -0.005357419, 0.0067355065, -0.048507597] +gra[11][9][3] = [-0.0127275335, -0.027161064, -0.120398626, 0.0010881304, -0.016212534, -0.012445698, -0.00331613, -2.5217576E-4, -0.009064015, 0.0067355065, -0.0414674] +gra[11][9][4] = [-0.011138814, -0.028176775, -0.120398626, 0.0010881304, -0.016212534, -0.014724767, -0.00331613, 0.0022252216, -0.009064015, 0.0067355065, -0.0414674] +gra[11][9][5] = [-0.0116145555, -0.027161064, -0.1337664, 0.0010881305, -0.011718331, -0.008297132, -0.00331613, 0.0, -0.009064015, 0.010838056, -0.04269842] +gra[11][9][6] = [-0.001125994, -0.001275445, -0.06587058, 0.002083107, -0.0033310815, -0.0025067397, 0.0, 0.0067280075, 0.004428481, 0.0, -0.0050727697] +gra[11][9][7] = [-0.016229458, 0.0032243507, -0.11327399, -0.0016975328, -0.020984316, -0.0064118747, -2.3427873E-4, 0.004819586, -0.0042669233, 0.006619178, -0.03747481] +gra[11][9][8] = [-0.0030206593, -6.7004E-11, -0.06808654, -0.0041412255, 5.461057E-4, -0.0019524727, -0.005559218, 0.024523886, -1.2932688E-10, -0.012585728, -0.024195785] +gra[11][9][9] = [-0.17914513, -0.15761071, -0.18235621, -0.111305825, -0.2861288, -0.19290504, -0.27690607, -0.2174945, -0.20727476, -0.15304866, -0.2752755] +gra[11][9][10] = [-0.03073125, 0.055398878, 0.019012246, -0.004389991, 0.025585605, 0.006306789, 0.004576511, -0.026553776, 0.023517668, 0.0018559321, 0.0010926872] +gra[11][9][11] = [-0.17914513, -0.15761071, -0.18235621, -0.111305825, -0.2861288, -0.19290504, -0.27690607, -0.2174945, -0.20727476, -0.15304866, -0.2752755] +gra[11][10][0] = [0.002703113, 2.4087886E-4, 1.3065474E-10, 6.20738E-4, 0.005225119, 0.002607383, 5.579681E-4] +gra[11][10][1] = [-0.0060856375, -0.004854968, -0.0039049454, 0.0, -0.022862324, -0.026488628, 0.00603679] +gra[11][10][2] = [-0.12743556, -0.060402133, -0.015324981, -0.0019249346, -9.88245E-11, -0.009251966, -0.008425626] +gra[11][10][3] = [-0.1443296, -0.047476254, -0.014137894, -0.0060540326, 0.0, -0.012429759, -0.0074963025] +gra[11][10][4] = [-0.1443296, -0.048491962, -0.016416963, -0.009311951, 0.0, -0.012516822, -0.0059075826] +gra[11][10][5] = [-0.15567769, -0.051322438, -0.009989329, -0.0060540326, 2.0781049E-10, -0.011479491, -0.004819333] +gra[11][10][6] = [-0.05157347, -0.001275445, 0.0031626287, -8.813711E-12, -0.011463992, -0.0019164708, -0.001125994] +gra[11][10][7] = [-0.13018884, -0.0692743, -0.005840762, -0.004201497, -0.0015797014, -0.0077053998, -0.012563205] +gra[11][10][8] = [-0.05328215, -6.7004E-11, -0.0039049454, 0.0011713473, -0.011135569, -0.020431118, 0.0] +gra[11][10][9] = [-0.13123956, -0.046941087, -0.019473545, -0.0025065367, 6.714482E-4, -0.009728871, -0.009844616] +gra[11][10][10] = [-0.003632035, -0.03903123, -0.12923068, -0.17222962, -0.2806601, -0.24402468, -0.1653744] +gra[11][10][11] = [-0.003632035, -0.03903123, -0.12923068, -0.17222962, -0.2806601, -0.24402468, -0.1653744] +gra[11][12][11] = [-0.100144096, -0.09158604, 0.0055445293, -0.11755938, -0.16096544, -0.10694665, -0.3415111, -0.27591932, -0.08365657, -0.10801351, -0.113322936] +gra[11][12][12] = [-0.100144096, -0.09158604, 0.0055445293, -0.11755938, -0.16096544, -0.10694665, -0.3415111, -0.27591932, -0.08365657, -0.10801351, -0.113322936] +gra[11][12][13] = [0.056215376, -0.01025449, 0.11834774, 0.07818649, -0.021850904, -0.089146726, -0.006384445, 0.068023905, -0.0016438005, 0.0012229871, -0.0060240654] +gra[11][12][14] = [0.07236886, 0.05657126, -0.059863858, 0.0061641093, 0.019986097, 0.03692759, 0.120455004, 0.0302211, 9.96112E-11, -2.2505768E-11, -0.06410605] +gra[11][13][11] = [-0.22570372, -0.14725454, -0.08456526, -0.24363197, -0.23292705, -0.24921647, -0.31250927, -0.29759613, -0.10658293, -0.13203514, -0.21545014] +gra[11][13][12] = [0.021744007, 0.03055122, 0.16523585, 0.059659015, 0.00602818, -0.030682772, 0.0113601005, 0.038531862, -1.4217425E-4, -0.004681904, -0.00916585] +gra[11][13][13] = [-0.22570372, -0.14725454, -0.08456526, -0.24363197, -0.23292705, -0.24921647, -0.31250927, -0.29759613, -0.10658293, -0.13203514, -0.21545014] +gra[11][13][14] = [0.040641047, 0.060274042, -0.101044156, 0.018038081, -0.0021256413, 0.021744264, 0.08580291, 0.011856999, 9.96112E-11, -0.0013691243, -0.067090854] +gra[11][14][11] = [0.46145654, -0.37053853, -0.2827138, -0.120763496, -0.23904912, -0.11392724, -0.24430634, -0.15843105] +gra[11][14][12] = [-0.04333491, 0.09871555, 0.08215656, 0.070761316, -0.027274026, -0.0064464738, 0.03838419, -0.039588906] +gra[11][14][13] = [-0.042344883, 0.027202541, 0.02599654, 0.071606465, -0.024843121, -0.008798459, 0.05347822, -0.042369526] +gra[11][14][14] = [0.46145654, -0.37053853, -0.2827138, -0.120763496, -0.23904912, -0.11392724, -0.24430634, -0.15843105] +gra[12][0][0] = [-0.10515191] +gra[12][0][1] = [0.13606499] +gra[12][0][2] = [-0.0035667932] +gra[12][0][3] = [0.005201453] +gra[12][0][4] = [0.005201453] +gra[12][0][5] = [0.02007929] +gra[12][0][6] = [-0.010218365] +gra[12][0][7] = [0.03649012] +gra[12][0][8] = [0.062039126] +gra[12][0][9] = [-0.028238326] +gra[12][0][10] = [0.052713778] +gra[12][0][11] = [-0.039478898] +gra[12][0][12] = [-0.10515191] +gra[12][1][0] = [0.0022879262, -0.001958814, 6.20738E-4, 4.4457944E-11, -0.0021720084, 9.538275E-4] +gra[12][1][1] = [-0.07858301, -0.17721513, -0.19805442, -0.17806304, -0.16245575, -0.20236821] +gra[12][1][2] = [0.088052616, -0.04784693, 0.019412948, -0.026443, -0.0077710547, -0.046964385] +gra[12][1][3] = [0.055745967, -0.050158635, -0.01847103, -0.019397447, -0.00913266, -0.06744409] +gra[12][1][4] = [0.064771056, -0.050158635, -0.011650659, -0.019397447, -0.00913266, -0.0674689] +gra[12][1][5] = [0.059153542, -0.03625734, 0.019686403, -0.019397447, -0.00913266, -0.051904615] +gra[12][1][6] = [-0.010218365, -0.0024341857, 0.0038837004, -0.016613597, 0.002059937, -0.003209465] +gra[12][1][7] = [0.12132782, -0.03562906, 0.010628009, -0.027755124, -0.005027737, -0.072541356] +gra[12][1][8] = [0.06926671, 3.8416823E-5, -0.033108108, -0.019686462, -8.5449056E-4, -0.0036619226] +gra[12][1][9] = [0.040891282, -0.03618892, -0.022440419, -0.019397447, -0.007967199, -0.046652183] +gra[12][1][10] = [0.07534326, 0.06808784, 0.04575908, -0.0033964338, 0.005816114, -0.03659642] +gra[12][1][11] = [0.049664095, -0.032417957, 0.040280573, -0.025225509, -0.026482048, -0.044036984] +gra[12][1][12] = [-0.07858301, -0.17721513, -0.19805442, -0.17806304, -0.16245575, -0.20236821] +gra[12][2][0] = [-3.8481143E-5, 0.0, 6.4378075E-4, 0.0042653317, -0.009577542, 0.0031306578, 2.969677E-4, 1.1202662E-4, -6.5726263E-4, 0.0015309223, -0.008016303] +gra[12][2][1] = [-5.13921E-4, -3.7906157E-11, -0.051293716, -0.0041412255, -0.020474708, -0.0028272104, -0.0042415615, 0.035186574, 0.0019214812, 0.0035228117, -0.034274463] +gra[12][2][2] = [-0.1648293, -0.17958395, -0.15100609, -0.16504414, -0.26511794, -0.15908478, -0.27147496, -0.28317097, -0.20314461, -0.13655183, -0.25064403] +gra[12][2][3] = [-0.0016788694, -0.03485746, -0.029470855, -0.018933097, -0.02044635, 0.0, 0.0066471035, -0.0063043977, -0.002073156, -0.0052225264, -0.13589352] +gra[12][2][4] = [-0.0057051876, -0.041172937, -0.030959653, -0.016414179, -8.543874E-4, -0.0016386209, 0.008664845, -0.009299895, -0.002073156, 0.003701211, -0.16906321] +gra[12][2][5] = [-0.004744318, -0.033570327, -0.035187043, -0.018960936, 0.009507546, 0.0, 0.01801002, -0.013460195, -0.0052353498, -0.0013686286, -0.1502158] +gra[12][2][6] = [0.010826467, -0.005398127, -0.04119642, -0.003755305, 0.019529367, -0.013483018, -0.007742171, -0.016999522, 0.0, 0.0028889112, -0.09080481] +gra[12][2][7] = [-0.002891289, -0.028541982, 0.013045758, -0.03511956, 0.029860139, -0.0013196387, 0.024343483, 0.006281326, -0.0067974986, -0.0050971014, -0.16666228] +gra[12][2][8] = [0.0028593205, -0.033804964, 0.065882705, -0.0052944794, 0.045643046, -0.018387286, -0.05146163, -0.029244697, 0.002475134, 8.743692E-4, -0.048316423] +gra[12][2][9] = [-0.006218316, -0.030214773, -0.074384846, -0.035232294, 0.06821702, -6.163665E-11, 0.031392615, -0.0077060787, -0.0028556797, -0.0053274613, -0.1507149] +gra[12][2][10] = [-0.023877224, 0.07723155, 0.025044672, 0.017511534, 0.088458255, 0.004143046, 0.0061719525, -0.040925086, 0.024282468, 0.0033671234, -0.073608294] +gra[12][2][11] = [-0.004744318, -0.025330877, -0.10397213, -0.023069104, 0.08292447, 0.0076809367, 0.025465066, 0.0034794435, -0.0033134911, -0.008031685, -0.09042414] +gra[12][2][12] = [-0.1648293, -0.17958395, -0.15100609, -0.16504414, -0.26511794, -0.15908478, -0.27147496, -0.28317097, -0.20314461, -0.13655183, -0.25064403] +gra[12][3][0] = [-3.8481143E-5, 0.0, -2.546209E-4, 6.20738E-4, -0.0050483216, 0.0031306578, 2.969677E-4, 1.1202659E-4, -6.5726263E-4, -9.175534E-4, -0.0059786467] +gra[12][3][1] = [-5.13921E-4, 0.0, -0.0740106, -0.010353064, -0.04144856, -0.004779683, -0.03789397, 0.079702035, 0.0019214812, 0.0, -0.0802909] +gra[12][3][2] = [-0.010050564, -0.027438035, -0.06738606, 0.0, -0.025120389, -0.015896093, -0.009571605, 0.0045674103, 0.0011093304, 0.00255187, -0.054485943] +gra[12][3][3] = [-0.16927701, -0.21920037, -0.23584919, -0.22092949, -0.36094978, -0.17843461, -0.2269295, -0.41648698, -0.20298086, -0.17288092, -0.25978398] +gra[12][3][4] = [-0.004744318, -0.03485746, 0.012978567, -0.009954032, -0.029311951, -0.0016386209, -0.018657913, -0.005795351, -0.0050928323, -0.0031257737, 0.043856] +gra[12][3][5] = [-0.004744318, -0.033570327, 0.008369034, -0.012500789, 0.009052092, 0.0, -0.008530973, -0.011553255, -0.009159835, -0.0031257737, 0.04716188] +gra[12][3][6] = [-9.563443E-4, -0.00329998, -0.029265463, 0.0, 0.014126777, -0.016475089, -0.0016823349, -0.011623862, 0.0017409262, 0.0028889112, -0.06866483] +gra[12][3][7] = [-0.0047443183, -0.028541982, 0.024425976, -0.032147244, 0.006780714, -0.0013196387, -0.0019702304, 0.009929972, -0.009074964, -0.0028954144, 0.021348575] +gra[12][3][8] = [0.0, -0.028519256, 0.06785178, -0.0052944794, 0.043581713, -0.018387286, -0.059410527, -0.008132312, 0.002475134, 2.4045661E-11, -0.08010083] +gra[12][3][9] = [-0.006218316, -0.029101841, -0.05057632, -0.030915538, 0.020302098, 3.0514854E-4, -0.008220887, 0.013654005, -0.0028556797, 0.0016335323, 0.028011441] +gra[12][3][10] = [-0.022339152, 0.06991776, 0.01910374, 0.015391848, 0.019434562, 0.0032313145, 0.014907414, -0.015119242, 0.024282468, 1.302987E-10, -0.01627709] +gra[12][3][11] = [-0.0073551796, -0.025330877, -0.105846174, -0.032042608, 0.014669917, 0.0076809367, -0.017299226, 0.01757557, 1.450358E-4, -0.0010706913, 0.02720009] +gra[12][3][12] = [-0.16927701, -0.21920037, -0.23584919, -0.22092949, -0.36094978, -0.17843461, -0.2269295, -0.41648698, -0.20298086, -0.17288092, -0.25978398] +gra[12][4][0] = [-3.8481143E-5, 0.0, 0.002269707, 6.20738E-4, -0.0050483216, 0.0031306578, 2.969677E-4, 1.1202659E-4, -6.5726263E-4, 0.0015309223, -0.0059786467] +gra[12][4][1] = [-5.13921E-4, 0.0, -0.0740106, -0.010353064, -0.04144856, -0.004779683, -0.03789397, 0.079702035, 0.0019214812, 0.0, -0.0802909] +gra[12][4][2] = [-0.010050564, -0.027438035, -0.08671735, 0.0, -0.027456252, -0.02211894, -0.009571605, 0.007836706, 0.001859782, 0.0015983053, -0.05877498] +gra[12][4][3] = [-0.013581293, -0.027913438, -0.10705456, 0.0, -0.01927166, -0.010371415, -0.0065214084, -2.5217576E-4, -0.0047528488, 0.0010085813, -0.038101066] +gra[12][4][4] = [-0.16706033, -0.22152957, -0.23584919, -0.22092949, -0.36094978, -0.17843461, -0.22067, -0.41338092, -0.20298086, -0.17288092, -0.3019132] +gra[12][4][5] = [-0.004744318, -0.02725485, 0.007879483, -0.012500789, -0.012142366, -0.0030399878, -0.01208039, -0.009955649, -0.0070016095, -0.004008526, 0.060964286] +gra[12][4][6] = [1.1364407E-11, -0.004874793, -0.029265463, -0.0013104129, 0.014126777, -0.016475089, -0.0016823349, -0.011623862, 0.0, 0.0016735051, -0.07071236] +gra[12][4][7] = [-0.0047443183, -0.028541982, 0.024425976, -0.032147244, 0.0072820373, -0.0013196387, -0.0019702304, 0.009929972, -0.009074964, -0.002473864, 0.017222213] +gra[12][4][8] = [-0.0030642115, -0.028519256, 0.06785178, -0.0052944794, 0.043581713, -0.018387286, -0.059410527, -0.008132312, 0.0024751339, -5.004493E-4, -0.08010083] +gra[12][4][9] = [-0.006218316, -0.029101841, -0.05057632, -0.030915538, 0.021509323, 0.0, -0.008220887, 0.013654005, -0.0028556797, 0.0020550827, 0.023885079] +gra[12][4][10] = [-0.019480497, 0.06991776, 0.01910374, 0.013094213, 0.019434562, 0.0032313145, 0.01336039, -0.015119242, 0.024282468, 1.302987E-10, -0.021084636] +gra[12][4][11] = [-0.0073551796, -0.025330877, -0.105846174, -0.032042608, 0.013415008, 0.0076809367, -0.017299226, 0.01757557, 1.450358E-4, 0.009044054, 0.023073727] +gra[12][4][12] = [-0.16706033, -0.22152957, -0.23584919, -0.22092949, -0.36094978, -0.17843461, -0.22067, -0.41338092, -0.20298086, -0.17288092, -0.3019132] +gra[12][5][0] = [-3.8481143E-5, -0.0019296022, 0.002269707, -7.568941E-4, -0.0050483216, -0.0023391629, 2.969678E-4, 1.1202659E-4, -6.5726263E-4, 0.0015309223, -0.0059786467] +gra[12][5][1] = [-5.13921E-4, 0.0, -0.08071456, -0.010353064, -0.03331051, -0.004779683, -0.03315192, 0.079702035, 0.0019214812, 0.0, -0.09146212] +gra[12][5][2] = [-0.010050564, -0.027438035, -0.08744019, 0.0, -0.022061262, -0.02211894, -0.009571605, 0.004819586, 0.0011093304, 0.00255187, -0.050804067] +gra[12][5][3] = [-0.013603179, -0.027447177, -0.10326273, 0.0, -0.016212534, -0.016594263, -0.0065214084, -2.5217576E-4, -0.0047528488, 0.00255187, -0.034885447] +gra[12][5][4] = [-0.011138814, -0.02892915, -0.10891048, 0.0, -0.013876671, -0.008972234, -0.0065214084, 0.0022252216, -0.0047528488, 0.00255187, -0.03272793] +gra[12][5][5] = [-0.16706033, -0.21482477, -0.24927308, -0.18918799, -0.29838967, -0.17843461, -0.22002156, -0.38522995, -0.20298086, -0.17288092, -0.28824112] +gra[12][5][6] = [-6.359549E-4, -0.00329998, -0.02807443, 0.0, 0.014126777, -0.016475089, -7.880372E-4, -0.013210811, 0.0011668268, 0.0028889112, -0.066702664] +gra[12][5][7] = [-0.0047443183, -0.028541982, 0.025846047, -0.032147244, 4.7438545E-4, -0.0037362042, -0.0010637965, 0.009929972, -0.009074964, -0.002473864, 0.004515754] +gra[12][5][8] = [0.0, -0.021314904, 0.06785178, -0.0052944794, 0.030117506, -0.018387286, -0.06471848, 9.024069E-4, 0.002475134, 2.4045661E-11, -0.10057392] +gra[12][5][9] = [-0.006218316, -0.029101841, -0.04915625, -0.018809127, 0.009101256, 0.0, -0.007981101, 0.013654005, -0.0028556797, 0.0020550827, 0.020304516] +gra[12][5][10] = [-0.022339152, 0.06991776, 0.01910374, 0.013094213, 0.016904647, -0.0019594636, 0.013294723, -0.015119242, 0.024282468, 0.0, -0.013636445] +gra[12][5][11] = [-0.0073551796, -0.025330877, -0.10442609, -0.032042608, 0.011576987, 0.0076809367, -0.01705944, 0.01757557, 1.450358E-4, -0.0015840135, 0.010367265] +gra[12][5][12] = [-0.16706033, -0.21482477, -0.24927308, -0.18918799, -0.29838967, -0.17843461, -0.22002156, -0.38522995, -0.20298086, -0.17288092, -0.28824112] +gra[12][6][0] = [6.4378075E-4, 0.0] +gra[12][6][1] = [-0.07434406, 0.030801235] +gra[12][6][2] = [-0.092844926, 0.0] +gra[12][6][3] = [-0.11424769, 0.0026769685] +gra[12][6][4] = [-0.11424769, 0.0] +gra[12][6][5] = [-0.12801832, -0.0012286699] +gra[12][6][6] = [-0.3856579, -0.2287598] +gra[12][6][7] = [0.02825962, -0.016482558] +gra[12][6][8] = [0.041058443, -0.004157832] +gra[12][6][9] = [-0.041197278, 0.011194] +gra[12][6][10] = [0.050504595, -0.0011195537] +gra[12][6][11] = [-0.055323012, -0.0022921383] +gra[12][6][12] = [-0.3856579, -0.2287598] +gra[12][7][0] = [-3.8481143E-5, 0.0, 6.4378075E-4, -0.0029844372, -0.0050483216, 7.4807646E-11, 2.969678E-4, 1.1202662E-4, -6.5726263E-4, 0.0015309223, -0.004436887] +gra[12][7][1] = [-5.13921E-4, 0.0, -0.06948394, -0.006211838, -0.02226102, -0.004779683, -0.009418331, 0.043953314, 0.003516588, 0.002665921, -0.065357655] +gra[12][7][2] = [-0.012064191, -0.027438035, -0.08881713, 0.0, -0.02700362, -0.019855632, -0.009571605, 0.0052266098, -9.260336E-4, 0.0, -0.0406325] +gra[12][7][3] = [-0.0076743215, -0.039527558, -0.10513796, 0.008403905, -0.016524691, -0.017283684, -0.0065214084, 0.0014358414, -0.0047528488, 0.0, -0.02186584] +gra[12][7][4] = [-0.0060856016, -0.04054327, -0.10513796, 0.008403905, -0.016524691, -0.018873332, -0.0065214084, 0.0039132386, -0.0047528488, 0.0, -0.02291253] +gra[12][7][5] = [-0.0029837268, -0.039527558, -0.11648606, 0.008327524, -0.017453253, -0.010371415, -0.009280194, 0.0016880172, -0.0047528488, 0.0041766223, -0.023096858] +gra[12][7][6] = [-0.0015405889, -9.316074E-4, -0.071566254, 0.0047623203, 0.0, 0.0029634302, 0.0, 0.0049496302, -6.80316E-4, 0.0021720878, -0.011135231] +gra[12][7][7] = [-0.17296693, -0.2219486, -0.24882478, -0.13503015, -0.13160208, -0.15459797, -0.2619717, -0.19753595, -0.22370492, -0.15401436, -0.321337] +gra[12][7][8] = [0.0, -0.023150237, 0.068436705, -0.002615053, 0.050056085, -0.018387286, -0.06659655, -0.012948758, 0.0024751343, 2.4045661E-11, -0.09486357] +gra[12][7][9] = [-0.0069699325, -0.029101841, -0.05875787, -0.039002147, 0.095091864, 2.4217142E-11, 0.048530553, -4.8473087E-4, -0.0028556797, -3.4251437E-4, -0.073652655] +gra[12][7][10] = [-0.028379343, 0.07336935, 0.047639176, 0.013497463, 0.07395541, -0.0050073783, 0.01256845, -0.019953335, 0.0108534, -0.0018405669, -0.019349663] +gra[12][7][11] = [-0.0029198912, -0.025330877, -0.08893005, -0.032638032, 0.121397406, 0.0076809367, 0.033207543, -6.217086E-4, -0.004560237, -0.005408447, -0.07587983] +gra[12][7][12] = [-0.17296693, -0.2219486, -0.24882478, -0.13503015, -0.13160208, -0.15459797, -0.2619717, -0.19753595, -0.22370492, -0.15401436, -0.321337] +gra[12][8][0] = [0.008247588, -0.0055409744, 6.20738E-4, 4.4457944E-11, -0.0021720084, 9.538275E-4] +gra[12][8][1] = [-0.006211823, 0.0, -9.987416E-4, -0.0039049454, 0.005938728, 0.025205178] +gra[12][8][2] = [-0.07643938, -0.027438035, -0.010692279, -0.019855632, 0.006616043, -0.00923678] +gra[12][8][3] = [-0.10861548, -0.021687219, -0.010692279, -0.016594263, 0.0044185594, -0.007944971] +gra[12][8][4] = [-0.09617853, -0.02270293, -0.010692279, -0.018873332, 0.0044185594, -0.008991664] +gra[12][8][5] = [-0.11265888, -0.021687219, -0.010768659, -0.010371415, 0.0044185594, -0.007944971] +gra[12][8][6] = [-0.07895839, 0.0, 0.0, -0.024791945, -0.0017974195, -0.0031688735] +gra[12][8][7] = [-0.08424463, -0.031116845, -0.011541045, -0.010768514, 0.0066399304, -0.011917457] +gra[12][8][8] = [-0.26798728, -0.15959759, -0.21716277, -0.1733301, -0.14648728, -0.15974315] +gra[12][8][9] = [0.024333926, -0.034290306, -0.01417489, -0.016538091, -0.01139536, -0.053092495] +gra[12][8][10] = [0.13705663, 0.06524223, 0.0811487, -0.0033964338, 0.018332137, -0.008183777] +gra[12][8][11] = [0.015939308, -0.030519342, 0.010764442, -0.016941465, -0.03548946, -0.054613106] +gra[12][8][12] = [-0.26798728, -0.15959759, -0.21716277, -0.1733301, -0.14648728, -0.15974315] +gra[12][9][0] = [0.0010204252, 0.0, 6.4378075E-4, 0.0078705065, -0.006929637, 7.4807646E-11, 2.969678E-4, 1.1202662E-4, -0.0014169003, 0.0015309223, -0.0059786467] +gra[12][9][1] = [-0.002372175, 0.0, -0.070174165, -0.010353064, 5.069508E-4, -0.004779683, -0.014528066, 0.042927664, 0.0019214812, -0.014940248, -0.056931846] +gra[12][9][2] = [-0.010050564, -0.027438035, -0.08857328, 0.0, -0.018879909, -0.02211894, -0.0045123687, -0.0017202278, 0.0011093304, 0.005216337, -0.05363864] +gra[12][9][3] = [-0.0127275335, -0.03146217, -0.10435086, 0.0010881304, -0.016212534, -0.016594263, -0.00331613, -2.5217576E-4, -0.0047528488, 0.005216337, -0.039423138] +gra[12][9][4] = [-0.011138814, -0.03247788, -0.10435086, 0.0010881304, -0.016212534, -0.018873332, -0.00331613, 0.0022252216, -0.0047528488, 0.005216337, -0.04046983] +gra[12][9][5] = [-0.0116145555, -0.03146217, -0.115698956, 0.0010117503, -0.011718331, -0.010371415, -0.00331613, 0.0, -0.0047528488, 0.009318886, -0.040654156] +gra[12][9][6] = [-0.001125994, 0.0, -0.07229233, 0.002083107, -0.0033310815, -0.0029200683, 0.0, 0.0057957885, 0.008363578, -4.639659E-12, -0.0050727697] +gra[12][9][7] = [-0.0187421, 0.0025796203, -0.08554189, -0.0016975328, -0.020984316, -0.008486157, -2.3427873E-4, 0.004819586, 4.4242945E-5, 0.005100009, -0.035430547] +gra[12][9][8] = [-0.0030206593, 0.0, -0.07876769, -0.0041412255, 0.0054565035, -0.0019524727, -0.005559218, 0.024523886, -1.2932688E-10, -0.012585728, -0.028795455] +gra[12][9][9] = [-0.17641266, -0.17913842, -0.16291693, -0.12995316, -0.28934565, -0.17905404, -0.28703806, -0.23105575, -0.19420177, -0.1480365, -0.2699444] +gra[12][9][10] = [-0.041895133, 0.06991776, 0.013579304, 0.015469885, 0.028076027, -0.0027198482, 0.009982745, -0.028109219, 0.012878839, 0.0018559321, -0.01863579] +gra[12][9][11] = [-0.004744318, -0.025330877, -0.120270304, -0.019102708, 0.01950083, 0.0076809367, 0.030894147, 0.029762033, -0.0033134911, 0.0056220004, 0.05215506] +gra[12][9][12] = [-0.17641266, -0.17913842, -0.16291693, -0.12995316, -0.28934565, -0.17905404, -0.28703806, -0.23105575, -0.19420177, -0.1480365, -0.2699444] +gra[12][10][0] = [0.0027031128, 2.4087886E-4, 1.3065474E-10, 6.207381E-4, 0.005225119, 0.002607383, -0.0046446207] +gra[12][10][1] = [-0.013131462, -0.004854968, -0.0039049454, 0.0, -0.022862324, -0.030430669, 0.0054494757] +gra[12][10][2] = [-0.11364833, -0.06776521, -0.021547828, -0.0019249347, -9.88245E-11, -0.017155558, -0.009961104] +gra[12][10][3] = [-0.14122392, -0.051777363, -0.01828646, -0.0060540326, 0.002196358, -0.013158046, -0.010008944] +gra[12][10][4] = [-0.14122392, -0.05279307, -0.020565528, -0.009311951, 0.002196358, -0.014291802, -0.008420223] +gra[12][10][5] = [-0.15257202, -0.055623546, -0.012063611, -0.006130413, 0.0031230266, -0.00943523, -0.0073319743] +gra[12][10][6] = [-0.071703576, 0.0, 0.0027493, -8.813711E-12, -0.0057086376, -0.0019164708, -0.001125994] +gra[12][10][7] = [-0.11488428, -0.069919035, -0.007915045, -0.004201497, 1.1974003E-4, -0.0056611383, -0.017588487] +gra[12][10][8] = [-0.06480228, 8.0218556E-4, -0.0039049454, -8.114468E-4, -0.007725291, -0.025030788, 0.0015275365] +gra[12][10][9] = [-0.12151261, -0.046710342, -0.023622112, -0.0025065367, 6.714482E-4, -0.007684609, -0.014869897] +gra[12][10][10] = [-0.04098353, -0.09227586, -0.121592574, -0.23921865, -0.34364283, -0.350644, -0.17361926] +gra[12][10][11] = [0.077353664, -0.025852533, 0.0019329089, -0.045883507, 0.004905568, 0.0060856706, -0.0054457206] +gra[12][10][12] = [-0.04098353, -0.09227586, -0.121592574, -0.23921865, -0.34364283, -0.350644, -0.17361926] +gra[12][11][0] = [-3.8481143E-5, 0.0, 6.4378075E-4, 6.20738E-4, -0.0041380986, 7.4807646E-11, 2.969678E-4, 0.0021298332, -3.908082E-4, 0.0015309223, -0.0059786467] +gra[12][11][1] = [-0.002372175, -3.7906157E-11, -0.0620731, -0.006211838, -0.006399732, -0.004779683, -0.01145776, 0.049474724, 0.0019214812, -4.4388496E-11, -0.06600562] +gra[12][11][2] = [-0.010050564, -0.025332876, -0.07972554, 0.0, -0.017035853, -0.017464971, -9.650856E-4, 0.004819586, 0.0011093304, 0.005216337, -0.049794633] +gra[12][11][3] = [-0.0127275335, -0.029357009, -0.09755905, 0.0010881305, -0.013876671, -0.012445698, 2.311531E-4, -2.5217576E-4, -0.0047528488, 0.005216337, -0.035360437] +gra[12][11][4] = [-0.011138814, -0.03037272, -0.09755905, 0.0010881305, -0.013876671, -0.014724767, 2.311531E-4, 0.0022252216, -0.0047528488, 0.005216337, -0.036407128] +gra[12][11][5] = [-0.010050564, -0.029357009, -0.108907156, -0.0014421018, -0.013876671, -0.008297132, 2.311531E-4, -7.2720836E-6, -0.0047528488, 0.009392959, -0.036591455] +gra[12][11][6] = [-0.001125994, 0.0, -0.06849815, 0.0031763045, -0.0016293218, -0.004313529, 0.0, 0.0049496302, 0.007193418, -4.639659E-12, -0.008332037] +gra[12][11][7] = [-0.017588487, -0.026489059, -0.080878146, -0.0016975328, -0.018648453, -0.004148566, 0.0033130045, 0.004819586, 4.4242945E-5, 0.0065824687, -0.034891326] +gra[12][11][8] = [-0.004225553, 0.0, -0.09060159, -0.0041412255, 0.010023229, -0.0039049454, -0.012820947, 0.042075388, -1.2932688E-10, -0.012585728, -0.047103584] +gra[12][11][9] = [-0.013322491, -0.02378166, -0.07438753, 0.0010881305, -0.011540808, -0.021613538, 0.002787061, 0.0013000679, -0.0064115636, 0.00468833, -0.050671246] +gra[12][11][10] = [-0.0053089955, -0.0055740727, 0.05267254, 0.008118987, 0.0011185199, 0.010369438, -0.033235624, -0.068654336, 5.1445976E-11, 0.0012886577, -0.041671593] +gra[12][11][11] = [-0.16127247, -0.13955387, -0.076390915, -0.10867561, -0.12649849, -0.1822295, -0.2659423, -0.1655591, -0.20603198, -0.14757687, -0.22842984] +gra[12][11][12] = [-0.16127247, -0.13955387, -0.076390915, -0.10867561, -0.12649849, -0.1822295, -0.2659423, -0.1655591, -0.20603198, -0.14757687, -0.22842984] +gra[12][13][12] = [-0.0658199, 0.11616026, 0.005189496, -0.08350004, -0.103413984, -0.20297602, -0.2756635, -0.1898117, -0.0919149, -0.109432496, -0.1414069] +gra[12][13][13] = [-0.0658199, 0.11616026, 0.005189496, -0.08350004, -0.103413984, -0.20297602, -0.2756635, -0.1898117, -0.0919149, -0.109432496, -0.1414069] +gra[12][13][14] = [-0.03055281, 0.03228754, -0.1253913, 0.025314178, -0.007795457, 0.02670395, 0.08701053, 0.01655003, 0.0, -0.0013691243, -0.067090854] +gra[12][14][12] = [0.40465567, -0.40797436, -0.2669245, -0.0026956042, -0.23772454, -0.11392724, -0.20921792, -0.18406665] +gra[12][14][13] = [-0.037709318, 0.10248319, 0.106661454, 0.087078094, -0.02219873, -0.0064464738, 0.017485827, -0.043919954] +gra[12][14][14] = [0.40465567, -0.40797436, -0.2669245, -0.0026956042, -0.23772454, -0.11392724, -0.20921792, -0.18406665] +gra[13][0][0] = [-0.08952447] +gra[13][0][1] = [0.12116575] +gra[13][0][2] = [0.020609686] +gra[13][0][3] = [0.027726827] +gra[13][0][4] = [0.029377932] +gra[13][0][5] = [0.037763137] +gra[13][0][6] = [-0.00922532] +gra[13][0][7] = [0.050046057] +gra[13][0][8] = [0.04002815] +gra[13][0][9] = [0.008192802] +gra[13][0][10] = [0.08633158] +gra[13][0][11] = [-0.037312046] +gra[13][0][12] = [0.036733776] +gra[13][0][13] = [-0.08952447] +gra[13][1][0] = [0.0022879262, -0.001958814, 6.20738E-4, 4.4457944E-11, -0.0021720084, 9.538275E-4] +gra[13][1][1] = [-0.055141833, -0.18159214, -0.2310143, -0.1775042, -0.16245575, -0.17656916] +gra[13][1][2] = [0.112229094, -0.04588853, 0.020137032, -0.026443, -0.0077710547, -0.046964385] +gra[13][1][3] = [0.07827134, -0.04609508, -0.017746942, -0.019397447, -0.00913266, -0.06840449] +gra[13][1][4] = [0.088947535, -0.04609508, -0.010926573, -0.019397447, -0.00913266, -0.0674689] +gra[13][1][5] = [0.07683738, -0.031788856, 0.018829808, -0.019397447, -0.00913266, -0.04587588] +gra[13][1][6] = [-0.00922532, -0.0024341857, 0.007006275, -0.0169596, 0.008638527, -0.003209465] +gra[13][1][7] = [0.13488376, -0.035775825, 0.009771412, -0.024018921, -0.0020519788, -0.072541356] +gra[13][1][8] = [0.047255743, 0.0037917919, -0.033108108, -0.015537896, -0.0065630274, -0.0026946948] +gra[13][1][9] = [0.0773224, -0.03633568, -0.021127176, -0.019397447, -0.007967199, -0.051424008] +gra[13][1][10] = [0.108961046, 0.060693294, 0.054833442, 2.4091253E-11, 0.00469194, -0.033955812] +gra[13][1][11] = [0.057086185, -0.046474654, 0.018150322, -0.034626793, -0.02501236, -0.06334714] +gra[13][1][12] = [0.10698522, -0.04167862, -0.016609259, -0.019397447, -0.017039627, -0.050599117] +gra[13][1][13] = [-0.055141833, -0.18159214, -0.2310143, -0.1775042, -0.16245575, -0.17656916] +gra[13][2][0] = [-3.8481143E-5, 0.0, 6.4378075E-4, 0.0042653317, -0.008087347, 0.0031306578, 2.969677E-4, -2.252149E-11, 0.0034323288, 0.0015309223, -0.008016303] +gra[13][2][1] = [-5.4985366E-4, -3.7906157E-11, -0.047306664, -0.0041412255, -0.02294093, -0.0028272104, -0.0042415615, 0.035186574, 0.0019214812, 1.8304982E-4, -0.034932088] +gra[13][2][2] = [-0.17586473, -0.18396096, -0.12756495, -0.19800399, -0.27966103, -0.15852593, -0.28207782, -0.26794708, -0.21708418, -0.13176982, -0.22484498] +gra[13][2][3] = [-0.0042467928, -0.032899063, -0.0069454797, -0.018209012, -0.02118981, 0.0, 0.0043394, -0.00686435, -0.002073156, -0.0052225264, -0.13685393] +gra[13][2][4] = [-0.0057051876, -0.037109382, -0.0067831725, -0.015690094, -0.0015978473, -0.0016386209, 7.817097E-4, -0.012367459, -0.002073156, 0.003701211, -0.16906321] +gra[13][2][5] = [-0.004744318, -0.029101841, -0.017503193, -0.019817533, 0.010586387, 0.0, 0.012585785, -0.014020145, -0.0052353498, -0.0013686286, -0.14418706] +gra[13][2][6] = [0.010826467, -0.005398127, -0.040203378, -6.327303E-4, 0.019529367, -0.013829023, -0.007742171, -0.016999522, 0.0, 0.001967366, -0.09080481] +gra[13][2][7] = [-0.002891289, -0.028688747, 0.026601702, -0.03597616, 0.02752462, 0.0024165655, 0.018569034, 0.008007627, -0.0067974986, -0.0053274613, -0.16666228] +gra[13][2][8] = [0.0028593205, -0.03005159, 0.04387173, -0.0052944794, 0.045643046, -0.014238721, -0.0491267, -0.02992584, 0.002475134, 8.7436906E-4, -0.047349196] +gra[13][2][9] = [-0.004744318, -0.030361539, -0.03795372, -0.033919044, 0.06747356, -6.163665E-11, 0.029084913, -0.008266031, -0.0028556797, -0.0053274613, -0.1554867] +gra[13][2][10] = [-0.02512641, 0.069837, 0.058662485, 0.026585884, 0.09000933, 0.0075394805, 0.004756875, -0.040925086, 0.028262286, 0.004521761, -0.07096769] +gra[13][2][11] = [-0.0057051876, -0.03748896, -0.08736233, -0.01523703, 0.07181907, -0.0017203483, 0.015343863, 0.004421005, -0.0023095226, -0.008031685, -0.10951381] +gra[13][2][12] = [-0.004744318, -0.029274868, 0.016431537, -0.037910536, 0.057670604, 0.0, 0.036615655, 0.0033570318, -0.0067974986, -0.0053274613, -0.18969187] +gra[13][2][13] = [-0.17586473, -0.18396096, -0.12756495, -0.19800399, -0.27966103, -0.15852593, -0.28207782, -0.26794708, -0.21708418, -0.13176982, -0.22484498] +gra[13][3][0] = [-3.8481143E-5, 0.0, -2.546209E-4, 6.20738E-4, -0.003558128, 0.0031306578, 2.969677E-4, -5.3025438E-11, 0.0034323288, -9.175534E-4, -0.0059786467] +gra[13][3][1] = [-5.4985366E-4, 0.0, -0.06591385, -0.010353064, -0.04391478, -0.004779683, -0.03789397, 0.079702035, 0.0019214812, -0.0033397619, -0.08094852] +gra[13][3][2] = [-0.012531618, -0.02149262, -0.08160064, 0.0017225409, -0.025120389, -0.010560441, -0.009571605, 0.0045674103, -0.0010462527, 0.00255187, -0.051743556] +gra[13][3][3] = [-0.18031244, -0.22357735, -0.21240802, -0.25388938, -0.37549284, -0.17787576, -0.23753236, -0.40126306, -0.21692044, -0.1680989, -0.23398493] +gra[13][3][4] = [-0.004744318, -0.032899063, 0.03715505, -0.009229947, -0.030055411, -0.0016386209, -0.023424516, -0.008862917, -0.0050928323, -0.0031257737, 0.043856] +gra[13][3][5] = [-0.004744318, -0.029101841, 0.026052877, -0.013357386, 0.010130936, 0.0, -0.013955208, -0.012113207, -0.009159835, -0.0031257737, 0.053190615] +gra[13][3][6] = [-9.563443E-4, -0.00329998, -0.02827242, 0.0031225746, 0.014126778, -0.016821094, -0.0016823349, -0.011623862, 0.0017409262, 0.001967366, -0.06866483] +gra[13][3][7] = [-0.0047443183, -0.028688747, 0.037981912, -0.033003844, 0.004445195, 0.0024165655, -0.007744682, 0.011656271, -0.009074964, -0.0031257737, 0.021348575] +gra[13][3][8] = [0.0, -0.02476588, 0.045840815, -0.0052944794, 0.043581713, -0.014238721, -0.057075597, -0.008813456, 0.002475134, -1.1985166E-10, -0.07913361] +gra[13][3][9] = [-0.004744318, -0.029248606, -0.0141451955, -0.029602291, 0.019558635, 3.0514854E-4, -0.010528591, 0.013094053, -0.0028556797, 0.0016335323, 0.023239616] +gra[13][3][10] = [-0.023588339, 0.062523216, 0.052721545, 0.024466196, 0.020985646, 0.0066277483, 0.013492335, -0.015119242, 0.028262286, 0.0011546377, -0.013636478] +gra[13][3][11] = [-0.008316049, -0.03748896, -0.089236364, -0.024210531, 0.0035645193, -0.0017203483, -0.02742043, 0.018517133, 0.0011490043, -0.0010706913, 0.013034737] +gra[13][3][12] = [-0.0047443183, -0.029274868, 0.014905731, -0.04058704, 0.011896652, 0.0, -0.009303885, 0.016553108, -0.005152384, 0.0016335323, 0.017573029] +gra[13][3][13] = [-0.18031244, -0.22357735, -0.21240802, -0.25388938, -0.37549284, -0.17787576, -0.23753236, -0.40126306, -0.21692044, -0.1680989, -0.23398493] +gra[13][4][0] = [-3.8481143E-5, 0.0, 0.002269707, 6.20738E-4, -0.003558128, 0.0031306578, 2.969677E-4, -5.3025438E-11, 0.0034323288, 0.0015309223, -0.0059786467] +gra[13][4][1] = [-5.4985366E-4, 0.0, -0.06591385, -0.010353064, -0.04391478, -0.004779683, -0.03789397, 0.079702035, 0.0019214812, -0.0033397619, -0.08094852] +gra[13][4][2] = [-0.012531618, -0.02149262, -0.10305554, 0.0017225409, -0.029588522, -0.014709006, -0.009571605, 0.014932039, -2.958011E-4, 0.0015983053, -0.05661193] +gra[13][4][3] = [-0.014356834, -0.020139834, -0.12048513, 0.0, -0.01927166, -0.008297132, -0.0065214084, -2.5217576E-4, -0.0069084316, 0.0010085813, -0.038101066] +gra[13][4][4] = [-0.17809576, -0.22590655, -0.21240802, -0.25388938, -0.37549284, -0.17787576, -0.23127286, -0.398157, -0.21692044, -0.1680989, -0.27611417] +gra[13][4][5] = [-0.004744318, -0.024891522, 0.025563333, -0.013357386, -0.0110635245, -0.0030399878, -0.014388094, -0.010515601, -0.0070016095, -0.004008526, 0.06699301] +gra[13][4][6] = [1.1364407E-11, -0.004874793, -0.02827242, 0.0018121619, 0.014126778, -0.016821094, -0.0016823349, -0.011623862, 0.0, 7.519599E-4, -0.07071236] +gra[13][4][7] = [-0.0047443183, -0.028688747, 0.037981912, -0.033003844, 0.0049465187, 0.0024165655, -0.007744682, 0.011656271, -0.009074964, -0.0027042234, 0.017222213] +gra[13][4][8] = [-0.0030642115, -0.02476588, 0.045840815, -0.0052944794, 0.043581713, -0.014238721, -0.057075597, -0.008813456, 0.0024751339, -5.0044945E-4, -0.07913361] +gra[13][4][9] = [-0.004744318, -0.029248606, -0.0141451955, -0.029602291, 0.020765867, 0.0, -0.010528591, 0.013094053, -0.0028556797, 0.0020550827, 0.019113258] +gra[13][4][10] = [-0.020729683, 0.062523216, 0.052721545, 0.02216856, 0.020985646, 0.0066277483, 0.011945313, -0.015119242, 0.028262286, 0.0011546377, -0.018444024] +gra[13][4][11] = [-0.008316049, -0.03748896, -0.089236364, -0.024210531, 0.0023096106, -0.0017203483, -0.02742043, 0.018517133, 0.0011490043, 0.009044054, 0.008908374] +gra[13][4][12] = [-0.0047443183, -0.029274868, 0.014905731, -0.04058704, 0.013103877, 0.0, -0.009303885, 0.016553108, -0.009074964, 0.0020550827, 0.0120558515] +gra[13][4][13] = [-0.17809576, -0.22590655, -0.21240802, -0.25388938, -0.37549284, -0.17787576, -0.23127286, -0.398157, -0.21692044, -0.1680989, -0.27611417] +gra[13][5][0] = [-3.8481143E-5, -0.0019296022, 0.002269707, -7.568941E-4, -0.003558128, -0.0023391629, 2.969678E-4, -5.3025438E-11, 0.0034323288, 0.0015309223, -0.0059786467] +gra[13][5][1] = [-5.4985366E-4, 0.0, -0.072617814, -0.010353064, -0.035776734, -0.004779683, -0.03315192, 0.079702035, 0.0019214812, -0.0033397619, -0.09211975] +gra[13][5][2] = [-0.012531618, -0.02149262, -0.10377838, 0.0017225409, -0.024193535, -0.014709006, -0.009571605, 0.011914919, -0.0010462527, 0.00255187, -0.048641015] +gra[13][5][3] = [-0.01437872, -0.019673575, -0.1188169, 0.0, -0.018344807, -0.012445698, -0.0065214084, 0.0068431576, -0.0069084316, 0.00255187, -0.03546479] +gra[13][5][4] = [-0.011914355, -0.021155545, -0.12490728, 0.0, -0.013876671, -0.006897951, -0.0065214084, 0.0022252216, -0.0069084316, 0.00255187, -0.03168124] +gra[13][5][5] = [-0.17809576, -0.21920177, -0.22583191, -0.22214787, -0.3129328, -0.17787576, -0.23062442, -0.37000602, -0.21692044, -0.1680989, -0.26244205] +gra[13][5][6] = [-6.359549E-4, -0.00329998, -0.027081385, 6.87819E-11, 0.014126778, -0.016821094, -7.880372E-4, -0.013210811, 0.0011668268, 0.001967366, -0.066702664] +gra[13][5][7] = [-0.0047443183, -0.028688747, 0.039401986, -0.033003844, -0.0018611331, 4.886615E-13, -0.006838248, 0.011656271, -0.009074964, -0.0027042234, 0.004515754] +gra[13][5][8] = [0.0, -0.017561529, 0.045840815, -0.0052944794, 0.030117506, -0.014238721, -0.06238355, 2.2126269E-4, 0.002475134, -1.1985166E-10, -0.0996067] +gra[13][5][9] = [-0.004744318, -0.029248606, -0.012725122, -0.017495878, 0.008357792, 0.0, -0.010288807, 0.013094053, -0.0028556797, 0.0020550827, 0.015532694] +gra[13][5][10] = [-0.023588339, 0.062523216, 0.052721545, 0.02216856, 0.018455729, 0.0014369704, 0.011879643, -0.015119242, 0.028262286, 0.0011546375, -0.010995837] +gra[13][5][11] = [-0.0073551796, -0.03748896, -0.08781629, -0.024210531, 4.7158962E-4, -0.0017203483, -0.027180644, 0.018517133, 0.0011490043, -0.0015840135, -0.0015809597] +gra[13][5][12] = [-0.0047443183, -0.029274868, 0.016325809, -0.04058704, 6.9580355E-4, 0.0, -0.0068243686, 0.016553108, -0.013708543, 0.0020550827, 0.016344428] +gra[13][5][13] = [-0.17809576, -0.21920177, -0.22583191, -0.22214787, -0.3129328, -0.17787576, -0.23062442, -0.37000602, -0.21692044, -0.1680989, -0.26244205] +gra[13][6][0] = [6.4378075E-4, 0.0] +gra[13][6][1] = [-0.06624731, 0.030801235] +gra[13][6][2] = [-0.10918311, 0.0] +gra[13][6][3] = [-0.12980185, 0.0026769685] +gra[13][6][4] = [-0.1323681, 0.0] +gra[13][6][5] = [-0.14144892, -0.0012286699] +gra[13][6][6] = [-0.3622168, -0.22078751] +gra[13][6][7] = [0.041815557, -0.01590641] +gra[13][6][8] = [0.019047474, -0.0046319123] +gra[13][6][9] = [-0.004766149, 0.011194] +gra[13][6][10] = [0.08412241, 0.0011773661] +gra[13][6][11] = [-0.053156152, -0.0022921383] +gra[13][6][12] = [0.023595892, -0.0034085575] +gra[13][6][13] = [-0.3622168, -0.22078751] +gra[13][7][0] = [-3.8481143E-5, 0.0, 6.4378075E-4, -0.0029844372, -0.003558128, 7.4807646E-11, 2.969678E-4, -2.252149E-11, 0.0034323288, 0.0015309223, -0.004436887] +gra[13][7][1] = [-5.4985366E-4, 0.0, -0.061387178, -0.006211838, -0.02472724, -0.004779683, -0.009418331, 0.043953314, 0.003516588, -6.7384075E-4, -0.06601527] +gra[13][7][2] = [-0.014545243, -0.02149262, -0.105155304, 0.0017225409, -0.02913589, -0.012445698, -0.009571605, 0.012321943, -0.0030816167, 0.0, -0.038469456] +gra[13][7][3] = [-0.008449863, -0.031753954, -0.12069213, 0.008403905, -0.018656962, -0.013135118, -0.0065214084, 0.008531175, -0.0069084316, 0.0, -0.02244518] +gra[13][7][4] = [-0.0068611433, -0.032769665, -0.12325835, 0.008403905, -0.018656962, -0.014724767, -0.0065214084, 0.011008573, -0.0069084316, 0.0, -0.02244518] +gra[13][7][5] = [-0.003759268, -0.031753954, -0.12706642, 0.008403905, -0.017453253, -0.008297132, -0.009280194, 0.0016880172, -0.0069084316, 0.0, -0.023096858] +gra[13][7][6] = [-0.0015405889, -9.316074E-4, -0.07405043, 0.0047623203, -0.0011805353, 0.0038556326, 0.0044427225, 0.0029879243, -6.80316E-4, 0.0021720878, -0.011135231] +gra[13][7][7] = [-0.18400235, -0.22632557, -0.22538361, -0.16799, -0.1461452, -0.15403911, -0.27257457, -0.18231206, -0.2376445, -0.14923236, -0.295538] +gra[13][7][8] = [0.0, -0.019396862, 0.05353746, -0.002615053, 0.050056085, -0.014238721, -0.064261615, -0.013629902, 0.0024751343, -1.1985166E-10, -0.09486357] +gra[13][7][9] = [-0.005495934, -0.029248606, -0.022326747, -0.037688896, 0.0943484, 2.4217142E-11, 0.046222847, -0.0010446829, -0.0028556797, -3.4251437E-4, -0.07842448] +gra[13][7][10] = [-0.02962853, 0.0659748, 0.08125699, 0.02257181, 0.075506486, -0.0016109447, 0.011153372, -0.019953335, 0.0148332175, -6.8592926E-4, -0.016709048] +gra[13][7][11] = [-0.0066066366, -0.03748896, -0.072320245, -0.024805957, 0.110292, -0.0017203483, 0.023086337, 3.1985203E-4, -0.0035562683, -0.005408447, -0.087828055] +gra[13][7][12] = [-0.0016143469, -0.03266932, 0.02244001, -0.0416742, 0.09989443, 2.4217142E-11, 0.064361975, 0.010643414, -0.0067974986, -0.0027042234, -0.102793634] +gra[13][7][13] = [-0.18400235, -0.22632557, -0.22538361, -0.16799, -0.1461452, -0.15403911, -0.27257457, -0.18231206, -0.2376445, -0.14923236, -0.295538] +gra[13][8][0] = [0.008247588, -0.0055409744, 6.20738E-4, 4.4457944E-11, -0.0021720084, 9.538275E-4] +gra[13][8][1] = [0.0018849298, 0.0, -9.987416E-4, -0.0039049454, 0.005938728, 0.02454755] +gra[13][8][2] = [-0.09277756, -0.02149262, -0.008969738, -0.012445698, 0.006616043, -0.0070737293] +gra[13][8][3] = [-0.12416965, -0.013913619, -0.010692279, -0.012445698, 0.0044185594, -0.008524312] +gra[13][8][4] = [-0.11429893, -0.014929331, -0.010692279, -0.014724767, 0.0044185594, -0.008524312] +gra[13][8][5] = [-0.123239286, -0.013913619, -0.010692279, -0.008297132, 0.0044185594, -0.007944971] +gra[13][8][6] = [-0.08144255, 0.0, 0.0, -0.023899741, -0.0011061644, -0.0031688735] +gra[13][8][7] = [-0.0976752, -0.02517143, -0.011541045, -0.008694231, 0.008405002, -0.006917912] +gra[13][8][8] = [-0.24454613, -0.1639746, -0.25012267, -0.17277125, -0.14648728, -0.1339441] +gra[13][8][9] = [0.060765058, -0.03443707, -0.012861641, -0.016538091, -0.01139536, -0.05786432] +gra[13][8][10] = [0.17067443, 0.057847686, 0.09022305, 2.936734E-11, 0.017207963, -0.0055431663] +gra[13][8][11] = [-0.0031472906, -0.044576038, -0.008100095, -0.02634275, -0.034019772, -0.07583591] +gra[13][8][12] = [0.050338555, -0.03446333, -0.0013067424, -0.016538091, -0.018642653, -0.041006442] +gra[13][8][13] = [-0.24454613, -0.1639746, -0.25012267, -0.17277125, -0.14648728, -0.1339441] +gra[13][9][0] = [0.0010204252, 0.0, 6.4378075E-4, 0.0078705065, -0.0054394426, 7.4807646E-11, 2.969678E-4, -2.252149E-11, 0.002672691, 0.0015309223, -0.0059786467] +gra[13][9][1] = [-0.0024081077, 0.0, -0.062077407, -0.010353064, -0.0019592715, -0.004779683, -0.014528066, 0.042927664, 0.0019214812, -0.01828001, -0.05758947] +gra[13][9][2] = [-0.012531618, -0.02149262, -0.104911454, 0.0017225409, -0.021012181, -0.014709006, -0.0045123687, 0.0053751054, -0.0010462527, 0.005216337, -0.05147559] +gra[13][9][3] = [-0.013503075, -0.023688566, -0.119905025, 0.0010881304, -0.018344807, -0.012445698, -0.00331613, 0.0068431576, -0.0069084316, 0.005216337, -0.040002476] +gra[13][9][4] = [-0.011914355, -0.024704278, -0.12247125, 0.0010881304, -0.018344807, -0.014724767, -0.00331613, 0.009320555, -0.0069084316, 0.005216337, -0.040002476] +gra[13][9][5] = [-0.012390098, -0.023688566, -0.12627934, 0.0010881304, -0.011718331, -0.008297132, -0.00331613, 0.0, -0.0069084316, 0.005142264, -0.040654156] +gra[13][9][6] = [-0.001125994, 0.0, -0.074776486, 0.002083107, -0.002882295, -0.002027866, 0.0044427225, 0.0038340823, 0.0039350963, 0.0, -0.0050727697] +gra[13][9][7] = [-0.024156814, 0.008525034, -0.09897246, -0.0016975328, -0.020984316, -0.0064118747, -2.3427873E-4, 0.008303378, -0.0046053967, 0.005100009, -0.030431] +gra[13][9][8] = [-0.003056592, 0.0, -0.07764223, -0.0041412255, 0.0029902817, 5.194387E-4, -0.005559218, 0.024523886, -1.2932688E-10, -0.01592549, -0.028795455] +gra[13][9][9] = [-0.18744808, -0.18351543, -0.13947575, -0.16291302, -0.3038887, -0.17849518, -0.29764092, -0.21583185, -0.20814133, -0.14325449, -0.24414533] +gra[13][9][10] = [-0.038269173, 0.062523216, 0.049702324, 0.024544237, 0.029627107, -6.992128E-4, 0.008567667, -0.028109219, 0.016858656, 0.0030105696, -0.01863579] +gra[13][9][11] = [-0.004744318, -0.03748896, -0.100242846, -0.011270633, 0.00911401, -0.0017203483, 0.016757932, 0.027999457, -0.0023095226, 0.0056220004, 0.04432713] +gra[13][9][12] = [-0.0047443183, -0.029274868, 0.0074492553, -0.03500275, 0.007803831, 0.0, 0.044764586, 0.031718038, -0.009074964, 0.008326224, 0.09394421] +gra[13][9][13] = [-0.18744808, -0.18351543, -0.13947575, -0.16291302, -0.3038887, -0.17849518, -0.29764092, -0.21583185, -0.20814133, -0.14325449, -0.24414533] +gra[13][10][0] = [0.0027031128, 2.4087886E-4, 1.3065474E-10, 6.207381E-4, 0.002889238, 0.002607383, -0.0046446207] +gra[13][10][1] = [-0.005034707, -0.004854968, -0.0039049454, 0.0, -0.024383903, -0.031088296, 0.005413543] +gra[13][10][2] = [-0.12998651, -0.061819807, -0.014137894, -2.0239376E-4, -0.005629006, -0.014992505, -0.012442157] +gra[13][10][3] = [-0.15677811, -0.044003762, -0.014137894, -0.0060540326, 0.002196358, -0.013737386, -0.010784484] +gra[13][10][4] = [-0.15934435, -0.04501947, -0.016416963, -0.009311951, 0.0025157349, -0.013824449, -0.0091957655] +gra[13][10][5] = [-0.16315244, -0.047849946, -0.009989329, -0.0060540326, 0.002196358, -0.00943523, -0.008107517] +gra[13][10][6] = [-0.07418773, 0.0, 0.0036415025, -8.813711E-12, -0.0057086376, -0.0019164708, -0.0011259941] +gra[13][10][7] = [-0.12831485, -0.06397362, -0.005840762, -0.004201497, 0.0016994415, -6.6159316E-4, -0.023003204] +gra[13][10][8] = [-0.059567124, 8.0218556E-4, -0.001433034, -8.114468E-4, -0.007725291, -0.025030788, 0.0014916039] +gra[13][10][9] = [-0.13773312, -0.040764928, -0.01828646, -0.0025065367, 6.714482E-4, -0.007684609, -0.015645439] +gra[13][10][10] = [-0.01754238, -0.096652865, -0.12103371, -0.27217853, -0.3531466, -0.324845, -0.1846547] +gra[13][10][11] = [0.06607049, -0.03801062, 0.0019329089, -0.04559043, 0.007320726, 0.0027789439, 2.059529E-4] +gra[13][10][12] = [0.12691858, -0.029796522, 4.5780465E-4, -0.0508675, -0.0019010571, 0.027822996, -0.0029191687] +gra[13][10][13] = [-0.01754238, -0.096652865, -0.12103371, -0.27217853, -0.3531466, -0.324845, -0.1846547] +gra[13][11][0] = [-3.8481143E-5, 0.0, 6.4378075E-4, 6.20738E-4, -0.006206033, 0.0031306578, 2.969677E-4, 0.0020178065, 0.003698783, 0.0015309223, -0.0059786467] +gra[13][11][1] = [-0.0024081077, -3.7906157E-11, -0.05410392, -0.006211838, -0.017004, -0.004779683, -0.01619981, 0.049474724, 0.0019214812, -0.0033397619, -0.055492003] +gra[13][11][2] = [-0.012531618, -0.02149262, -0.101407215, 0.0017225409, -0.024563115, -0.016277885, -9.650856E-4, 0.014932039, -2.958011E-4, 0.005216337, -0.055602495] +gra[13][11][3] = [-0.013503075, -0.023688566, -0.11878066, 0.0010881305, -0.021403933, -0.012445698, 2.311531E-4, 0.009860277, -0.0061579803, 0.005216337, -0.042359605] +gra[13][11][4] = [-0.011914355, -0.024704278, -0.12134688, 0.0010881305, -0.021403933, -0.014724767, 2.311531E-4, 0.012337675, -0.0061579803, 0.005216337, -0.042359605] +gra[13][11][5] = [-0.010826106, -0.023688566, -0.12515497, -0.0013657217, -0.01927166, -0.008297132, 2.311531E-4, -7.2720836E-6, -0.0069084316, 0.005216337, -0.04301128] +gra[13][11][6] = [-0.001125994, 0.0, -0.073497966, 0.0031763045, -0.0011805353, -0.002027866, 0.0044427225, 0.0029879243, 0.0067000333, 0.0, -0.008332037] +gra[13][11][7] = [-0.023003204, -0.022648802, -0.097360395, -0.0016975328, -0.026379308, -0.004148566, 0.0033130045, 0.008303378, -0.0046053967, 0.0065824687, -0.03631161] +gra[13][11][8] = [-0.0042614858, 0.0, -0.08549402, -0.0041412255, 0.0011589571, -0.001433034, -0.015982313, 0.042075388, -1.2932688E-10, -0.01592549, -0.034074277] +gra[13][11][9] = [-0.014098032, -0.019941404, -0.08872916, 0.0010881305, -0.016935797, -0.018041158, 0.0077908346, -5.865624E-10, -0.01072273, 0.005216337, -0.060193244] +gra[13][11][10] = [-0.0063372697, -0.00724988, 0.09636207, 0.0063281707, 0.013989373, 0.010369438, -0.029499395, -0.07729727, -0.0034266128, 0.001646283, -0.06261036] +gra[13][11][11] = [-0.1723079, -0.19175091, -0.08346477, -0.16814607, -0.20360166, -0.18464145, -0.29005083, -0.19624236, -0.23322582, -0.15090755, -0.25228682] +gra[13][11][12] = [-0.004744318, -0.027169708, 0.017387033, -0.033801217, -0.012644364, 0.0, 0.0085210595, 7.166872E-4, -0.0067974986, -0.0027042234, 0.037621047] +gra[13][11][13] = [-0.1723079, -0.19175091, -0.08346477, -0.16814607, -0.20360166, -0.18464145, -0.29005083, -0.19624236, -0.23322582, -0.15090755, -0.25228682] +gra[13][12][0] = [-3.8481143E-5, -3.63924E-11, 0.002269707, 6.20738E-4, 0.0, 1.2339335E-10, 2.969678E-4, -2.252149E-11, 0.0034323288, 0.0015309223, -0.0059786467] +gra[13][12][1] = [-0.0024081077, 0.0, -0.064752415, -0.010353064, -0.040191926, -0.004779683, -0.031112492, 0.079702035, 0.003516588, -0.0060928166, -0.091516405] +gra[13][12][2] = [-0.012531618, -0.019387461, -0.09771204, 0.0017225409, -0.024051953, -0.0062228492, -0.009571605, 0.011914919, -0.0010462527, 0.005216337, -0.041412294] +gra[13][12][3] = [-0.0153472, -0.029182535, -0.10223391, 0.009492035, -0.019618789, -0.008297132, -0.0058457484, 0.008531175, -0.0069084316, 0.005216337, -0.028060148] +gra[13][12][4] = [-0.0137584815, -0.030198246, -0.11609159, 0.009492035, -0.019618789, -0.010576202, -0.0058457484, 0.011008573, -0.0069084316, 0.005216337, -0.028060148] +gra[13][12][5] = [-0.012670232, -0.029182535, -0.11989968, 0.009492035, -0.017486516, -0.0062228492, -0.0058457484, 0.0016880172, -0.0069084316, 0.010007033, -0.028711826] +gra[13][12][6] = [-0.001125994, 0.0, -0.07098231, 0.0031763045, -0.0011805353, -0.0034213266, 0.0033354918, 0.0029879243, -0.0012010215, 0.0, -0.0034280284] +gra[13][12][7] = [-0.023003204, -0.020543642, -0.09406488, -0.0016975328, -0.024594164, -0.002074283, -0.0027638972, 0.008303378, -0.0046053967, 0.005100009, -0.017848626] +gra[13][12][8] = [-0.0019364218, 0.0, -0.08571632, -0.008282451, -0.01957223, -0.001433034, -0.031315595, 0.056441724, -1.2932688E-10, -0.018678546, -0.059202127] +gra[13][12][9] = [-0.015066513, -0.025901634, -0.08404164, 0.009492035, -0.014481828, -0.012445698, -0.009366741, 0.0016880166, -0.013032702, 0.005216337, -0.038446993] +gra[13][12][10] = [-0.0063372697, -0.0044693374, -0.005145481, 0.032773815, -0.004487824, 0.011536914, -0.028929772, -0.08269472, -0.004384591, 0.0020792785, -0.037663452] +gra[13][12][11] = [-0.018364029, -0.017836245, -0.08268196, -0.0022391165, -0.017753053, -0.005315918, -0.015622217, -5.865624E-10, -0.0069084316, 0.005216337, -0.0551992] +gra[13][12][12] = [-0.17809576, -0.20573048, -0.15939943, -0.20416664, -0.23387754, -0.17472892, -0.28127974, -0.2316979, -0.23132344, -0.17341352, -0.2193664] +gra[13][12][13] = [-0.17809576, -0.20573048, -0.15939943, -0.20416664, -0.23387754, -0.17472892, -0.28127974, -0.2316979, -0.23132344, -0.17341352, -0.2193664] +gra[13][14][13] = [0.35930407, -0.22164108, -0.15753579, 0.02877545, -0.22689001, -0.10909238, -0.14508441, -0.13638566] +gra[13][14][14] = [0.35930407, -0.22164108, -0.15753579, 0.02877545, -0.22689001, -0.10909238, -0.14508441, -0.13638566] +gra[14][0][0] = [-0.11582346] +gra[14][0][1] = [-0.014908389] +gra[14][0][2] = [0.0010477826] +gra[14][0][3] = [-0.017838294] +gra[14][0][4] = [-0.017838294] +gra[14][0][5] = [-0.020216068] +gra[14][0][6] = [-0.029175095] +gra[14][0][7] = [-0.01435264] +gra[14][0][8] = [-0.010619164] +gra[14][0][9] = [-0.021713208] +gra[14][0][10] = [-0.0076314593] +gra[14][0][11] = [-0.006081218] +gra[14][0][12] = [-0.029416047] +gra[14][0][13] = [-0.03016201] +gra[14][0][14] = [-0.11582346] +gra[14][1][0] = [0.0, -8.777529E-5] +gra[14][1][1] = [-0.18727827, -0.042910293] +gra[14][1][2] = [-0.084219776, 0.098065324] +gra[14][1][3] = [-0.05922804, 0.038104363] +gra[14][1][4] = [-0.060603417, 0.047129445] +gra[14][1][5] = [-0.032511078, 0.024256317] +gra[14][1][6] = [0.011354224, -0.029175095] +gra[14][1][7] = [-0.102742985, 0.075883195] +gra[14][1][8] = [0.024297003, -9.4162335E-4] +gra[14][1][9] = [-0.045367077, 0.05281453] +gra[14][1][10] = [-0.03284261, 0.023246054] +gra[14][1][11] = [-0.106667675, 0.09371514] +gra[14][1][12] = [-0.04622412, 0.051488757] +gra[14][1][13] = [0.009459454, 0.047508337] +gra[14][1][14] = [-0.18727827, -0.042910293] +gra[14][2][0] = [-0.0017319206, 0.0015840991, -0.008970131, -0.004802999, 0.0031306578, 0.0022224444, 0.0057375417, -0.0018251492] +gra[14][2][1] = [0.009210461, 0.0012506777, 0.023023957, -0.025324829, -8.747375E-4, -3.7906157E-11, -0.0035353543, 0.035236858] +gra[14][2][2] = [-0.17584763, -0.5290194, -0.22025661, -0.23991603, -0.19399358, -0.12639932, -0.13731577, -0.289827] +gra[14][2][3] = [-0.05571494, 0.1321193, -0.14931351, -0.03905928, 0.0, -0.0024315235, -2.567261E-4, -0.0076815435] +gra[14][2][4] = [-0.05911336, 0.15121338, -0.17879, -0.019467322, -0.0016386209, -0.0024315235, -0.001026748, -0.0106770415] +gra[14][2][5] = [-0.080596365, 0.2223057, -0.14741457, -0.009105388, 0.0, 0.0013912377, -0.0023956841, -0.0148373395] +gra[14][2][6] = [-0.06015315, 0.04232933, -0.08102358, 0.018965898, 0.0, -0.0020981468, -0.0014585715, -0.015615815] +gra[14][2][7] = [-0.042910974, -0.0024921368, -0.21345621, 0.011247204, 0.0024165655, 0.0013912377, 0.0012619573, 0.005793425] +gra[14][2][8] = [4.0656445E-4, 0.04207531, -0.012648034, 0.04502165, 0.0, -0.03310725, -0.004949766, -0.021638526] +gra[14][2][9] = [-0.07297369, 0.024562055, -0.16602206, 0.04623389, -6.163665E-11, 2.7830654E-4, -0.0052100876, -0.010190327] +gra[14][2][10] = [-0.024243463, -0.07057921, -0.0720616, 0.10349874, 2.4562495E-4, 0.011989316, 0.0041656997, -0.04276061] +gra[14][2][11] = [-0.06124546, -0.029336883, -0.16942665, 0.04144257, -0.0017203483, -0.0024315235, 0.009988822, 0.008239418] +gra[14][2][12] = [-0.040389307, -3.8161967E-4, -0.20168869, 0.023762133, 0.0, -0.0024315235, -4.8080023E-4, 0.0055930368] +gra[14][2][13] = [-0.053557433, 0.004121064, -0.14622559, 0.034124065, 0.0, 0.0013912377, -4.8080023E-4, -0.0010566153] +gra[14][2][14] = [-0.17584763, -0.5290194, -0.22025661, -0.23991603, -0.19399358, -0.12639932, -0.13731577, -0.289827] +gra[14][3][0] = [-0.0026303222, -0.0045454036, -0.006932474, -2.737789E-4, 0.0031306578, 0.0022224444, 0.0020929475, -0.0018251492] +gra[14][3][1] = [-0.0019154843, -0.0065884185, -0.020415306, -0.04629868, -8.747375E-4, 0.0, -0.009747193, 0.07975232] +gra[14][3][2] = [0.03537799, -0.03127152, -0.066523835, -0.020764088, -0.002263308, -0.0024273172, 0.0, 0.0045674103] +gra[14][3][3] = [-0.26069072, -0.17578714, -0.22939655, -0.33574775, -0.21334341, -0.16601574, -0.19320112, -0.42314297] +gra[14][3][4] = [-0.013265513, 0.23243552, 0.029085482, -0.047924884, -0.0016386209, -0.0024315235, 0.0054333983, -0.007172498] +gra[14][3][5] = [-0.037040286, 0.3100581, 0.04996314, -0.009560844, 0.0, 0.0013912377, 0.004064462, -0.012930402] +gra[14][3][6] = [-0.04822219, 0.09151792, -0.0588836, 0.013563308, -0.0029920721, 0.0, 0.0022967334, -0.010240156] +gra[14][3][7] = [-0.031530757, 0.02315667, -0.025445353, -0.011832221, 0.0024165655, 0.0013912377, 0.004234272, 0.009442069] +gra[14][3][8] = [0.002375652, 0.10702352, -0.044432443, 0.042960316, 0.0, -0.027821539, -0.004949766, -5.2614184E-4] +gra[14][3][9] = [-0.049165167, 0.15115647, 0.012704274, -0.0016810335, 3.0514854E-4, 0.0013912377, -8.933363E-4, 0.011169758] +gra[14][3][10] = [-0.030184396, -0.041988403, -0.01473039, 0.03447505, -6.6610676E-4, 0.004675532, 0.0020460146, -0.016954768] +gra[14][3][11] = [-0.0631195, 0.064332634, -0.046878092, -0.026811987, -0.0017203483, -0.0024315235, 0.0010153182, 0.022335548] +gra[14][3][12] = [-0.041915108, 0.14047132, 0.010500541, -0.022011831, 0.0, -0.0024315235, -0.0031573072, 0.018789113] +gra[14][3][13] = [-0.055083245, 0.14279011, 0.06103932, -0.004049799, 5.773879E-11, 0.0013912377, -0.0031573072, 0.012139461] +gra[14][3][14] = [-0.26069072, -0.17578714, -0.22939655, -0.33574775, -0.21334341, -0.16601574, -0.19320112, -0.42314297] +gra[14][4][0] = [-1.0599452E-4, -0.0020210762, -0.006932474, -2.737789E-4, 0.0031306578, 0.0022224444, 0.0020929475, -0.0018251492] +gra[14][4][1] = [-0.0019154843, -0.0065884185, -0.020415306, -0.04629868, -8.747375E-4, 0.0, -0.009747193, 0.07975232] +gra[14][4][2] = [0.010398943, -0.043829054, -0.1425881, -0.02309995, -0.002263308, -0.0024273172, 0.0, 0.007836706] +gra[14][4][3] = [0.013334723, 0.0012160586, 6.9185626E-4, -0.013261375, 0.0, -1.3790699E-4, 0.0, 1.12758145E-11] +gra[14][4][4] = [-0.26069072, -0.18989517, -0.27152574, -0.33574775, -0.21334341, -0.16834494, -0.19320112, -0.4200369] +gra[14][4][5] = [-0.035620213, 0.28389117, 0.05872181, -0.0307553, -0.0030399878, 0.0013912377, 0.004064462, -0.011332796] +gra[14][4][6] = [-0.04822219, 0.09151792, -0.06093113, 0.013563308, -0.0029920721, -0.0015748128, 9.863207E-4, -0.010240156] +gra[14][4][7] = [-0.031530757, 0.021498462, -0.029571723, -0.011330896, 0.0024165655, 0.0013912377, 0.004234272, 0.009442069] +gra[14][4][8] = [0.002375652, 0.11166462, -0.044432443, 0.042960316, 0.0, -0.027821539, -0.004949766, -5.2614184E-4] +gra[14][4][9] = [-0.049165167, 0.14949825, 0.0085779065, -4.7380285E-4, 0.0, 0.0013912377, -8.933363E-4, 0.011169758] +gra[14][4][10] = [-0.030184396, -0.041988403, -0.019537935, 0.03447505, -6.6610676E-4, 0.004675532, -2.5162264E-4, -0.016954768] +gra[14][4][11] = [-0.0631195, 0.06267442, -0.051004462, -0.028066896, -0.0017203483, -0.0024315235, 0.0010153182, 0.022335548] +gra[14][4][12] = [-0.041915108, 0.13881311, 0.004983356, -0.020804603, 0.0, -0.0024315235, -0.0031573072, 0.018789113] +gra[14][4][13] = [-0.055083245, 0.14525777, 0.05691296, -0.010442665, 0.0, 0.0013912377, -0.0031573072, 0.012139461] +gra[14][4][14] = [-0.26069072, -0.18989517, -0.27152574, -0.33574775, -0.21334341, -0.16834494, -0.19320112, -0.4200369] +gra[14][5][0] = [-1.0599452E-4, -0.004087028, -0.006932474, -2.737789E-4, -0.0023391629, 2.9284216E-4, 7.1531534E-4, -0.0018251492] +gra[14][5][1] = [-0.008619444, 0.024646414, -0.031586535, -0.038160633, -8.747375E-4, 0.0, -0.009747193, 0.07975232] +gra[14][5][2] = [0.009676101, -0.04146135, -0.13461716, -0.017704962, -0.002263308, -0.0024273172, 0.0, 0.004819586] +gra[14][5][3] = [0.011478803, -0.004468556, -0.06786775, -0.0102022495, 0.0, 3.2835128E-4, 0.0, 0.0] +gra[14][5][4] = [0.0144154765, 0.00820452, 0.0100524295, -0.013484061, 0.0036782513, 0.0011214141, -0.0065619284, -0.0015741112] +gra[14][5][5] = [-0.27411464, -0.120020434, -0.25785366, -0.27318767, -0.21334341, -0.16164015, -0.16145964, -0.39188594] +gra[14][5][6] = [-0.047031157, 0.07410885, -0.059514217, 0.013563308, -0.0029920721, 0.0, 0.0022967334, -0.013210811] +gra[14][5][7] = [-0.030110683, 0.009325346, -0.04227817, -0.018138546, 4.886615E-13, 0.0013912377, 0.004234272, 0.009442069] +gra[14][5][8] = [0.002375652, 0.12489207, -0.06490553, 0.02949611, 0.0, -0.020617187, -0.004949766, 0.008508578] +gra[14][5][9] = [-0.047745094, 0.13283329, 0.0049973363, -0.012881876, 0.0, 0.0013912377, 0.011213072, 0.011169758] +gra[14][5][10] = [-0.030184396, -0.041040756, -0.012089748, 0.03194514, -0.0058568846, 0.004675532, -2.5162264E-4, -0.016954768] +gra[14][5][11] = [-0.061699428, 0.0680023, -0.06149379, -0.029904917, -0.0017203483, -0.0024315235, 0.0010153182, 0.022335548] +gra[14][5][12] = [-0.040495034, 0.12351453, 0.011489054, -0.033212673, 0.0, -0.0024315235, -0.0031573072, 0.018789113] +gra[14][5][13] = [-0.05366317, 0.12029423, 0.05981072, -0.022850737, 0.0, 0.0013912377, -0.0031573072, 0.012139461] +gra[14][5][14] = [-0.27411464, -0.120020434, -0.25785366, -0.27318767, -0.21334341, -0.16164015, -0.16145964, -0.39188594] +gra[14][6][0] = [0.0, -0.0017319206] +gra[14][6][1] = [0.12703063, -0.0022489373] +gra[14][6][2] = [-0.022769202, 0.0030428797] +gra[14][6][3] = [0.034883343, -7.346576E-4] +gra[14][6][4] = [0.02350668, 0.0022020158] +gra[14][6][5] = [0.106837645, -0.008857531] +gra[14][6][6] = [-0.20986222, -0.3650282] +gra[14][6][7] = [-0.045771867, -0.024621688] +gra[14][6][8] = [0.1393876, -0.031599853] +gra[14][6][9] = [-0.09390008, -0.034672163] +gra[14][6][10] = [0.055199683, -0.009840637] +gra[14][6][11] = [-0.07764719, -0.021925328] +gra[14][6][12] = [0.0073627643, -0.042553928] +gra[14][6][13] = [0.03508615, -0.041654322] +gra[14][6][14] = [-0.20986222, -0.3650282] +gra[14][7][0] = [-0.0017319206, 0.0015840991, -0.0053907144, -2.737789E-4, 5.7391827E-11, 0.0022224444, -0.0015122276, -0.0018251492] +gra[14][7][1] = [0.002611183, -0.006051983, -0.0054820664, -0.02711114, -8.747375E-4, 0.0, -0.005605967, 0.0440036] +gra[14][7][2] = [0.008299174, -0.0092912465, -0.12444562, -0.02264732, 1.5084875E-10, -0.0024273172, 0.0, 0.0052266098] +gra[14][7][3] = [0.009603571, 0.010891726, -0.054848146, -0.010514407, -6.894202E-4, -0.011752027, 0.008403905, 0.0016880172] +gra[14][7][4] = [0.0125402445, 0.013179652, -0.051907387, -0.01613208, 2.1011333E-12, -0.010492706, 0.0018419763, 1.1390599E-4] +gra[14][7][5] = [0.0060317433, 0.013192974, 0.031289365, -0.011442969, 0.0, -0.010492706, 0.008564835, 0.0016880172] +gra[14][7][6] = [-0.0023392674, -2.9609003E-4, 0.051154956, 8.188048E-4, 0.003376759, -9.316074E-4, 0.0047623203, 0.0] +gra[14][7][7] = [-0.2736663, -0.42253086, -0.29094955, -0.106400095, -0.18950677, -0.16876397, -0.10730179, -0.20419195] +gra[14][7][8] = [-0.0041071055, 0.07480537, -0.058009043, 0.049434684, 0.0, -0.023188654, -0.0010114948, -0.0053425874] +gra[14][7][9] = [-0.057346717, -0.008121707, -0.08895983, 0.07310873, 2.4217142E-11, 0.0013912377, -0.008979938, -0.0029689788] +gra[14][7][10] = [-0.0016489569, -0.08187189, -0.017802957, 0.0889959, -0.008904799, 0.008127116, 1.516263E-4, -0.021788862] +gra[14][7][11] = [-0.04620337, -0.033882786, -0.14774089, 0.07991551, -0.0017203483, -0.0024315235, 4.1989092E-4, 0.004138265] +gra[14][7][12] = [-0.03438083, -0.032883566, -0.10764899, 0.065985955, 2.4217142E-11, -0.0058259796, -0.0042444626, 0.012879416] +gra[14][7][13] = [-0.047548957, -0.028914813, -0.06369143, 0.07584944, 2.4217142E-11, -0.002003218, -0.0042444626, 0.008871366] +gra[14][7][14] = [-0.2736663, -0.42253086, -0.29094955, -0.106400095, -0.18950677, -0.16876397, -0.10730179, -0.20419195] +gra[14][8][0] = [0.0, 0.005871886] +gra[14][8][1] = [0.095702, 0.06588329] +gra[14][8][2] = [-0.08645788, 0.019448427] +gra[14][8][3] = [-0.03433526, 0.004897557] +gra[14][8][4] = [-0.031394515, 0.02027118] +gra[14][8][5] = [0.05303327, 0.008630428] +gra[14][8][6] = [0.050987773, -0.007944579] +gra[14][8][7] = [0.022163775, 0.00545556] +gra[14][8][8] = [-0.14465323, -0.23231457] +gra[14][8][9] = [-0.050460912, 0.036257178] +gra[14][8][10] = [-0.0044299643, 0.084959425] +gra[14][8][11] = [-0.11915645, 0.033481665] +gra[14][8][12] = [-0.0385441, -0.031666603] +gra[14][8][13] = [0.019052131, -0.009138332] +gra[14][8][14] = [-0.14465323, -0.23231457] +gra[14][9][0] = [-0.0017319206, -0.0020210762, -0.006932474, -0.0021550937, 5.7391827E-11, 0.0022224444, 0.009342717, -0.0018251492] +gra[14][9][1] = [0.0019209567, 0.01677084, 0.0029437453, -0.0043431697, -8.747375E-4, 0.0, -0.009747193, 0.042977948] +gra[14][9][2] = [0.008543024, -0.034551438, -0.13745174, -0.014523609, -0.002263308, -0.0024273172, 0.0, -0.0017202278] +gra[14][9][3] = [0.010390673, -0.015848102, -0.07240544, -0.0102022495, 0.0, -0.0036866383, 0.0010881304, 0.0] +gra[14][9][4] = [0.013327346, -0.013560179, -0.06946468, -0.015819924, 2.1011333E-12, -0.0024273172, -0.005473798, -0.0015741112] +gra[14][9][5] = [0.006818845, -0.013546857, 0.013732083, -0.005708046, 0.0, -0.0024273172, 0.0012490614, 0.0] +gra[14][9][6] = [-0.0012785172, 0.00325728, 0.04692239, -8.82955E-4, -0.0025067397, 0.0, 0.002083107, 8.46158E-4] +gra[14][9][7] = [0.008543024, -0.0074314885, 0.007830054, -0.011769962, -0.0022633083, 0.03059784, -8.487665E-4, 0.004819586] +gra[14][9][8] = [-0.014772522, 0.009046948, -0.0654257, -0.0023759985, 0.0, 0.0, 0.0021252728, 0.024574166] +gra[14][9][9] = [-0.18775843, -0.37637526, -0.23955697, -0.26414376, -0.21396284, -0.12595381, -0.10222481, -0.23771174] +gra[14][9][10] = [-0.03320362, -0.098906405, -0.007155558, 0.043116514, -0.007993068, 0.004675532, 0.0021240492, -0.029944744] +gra[14][9][11] = [-0.07412598, -0.05661683, -0.015585691, -0.021262497, -0.0017203483, -0.0024315235, 0.013955217, 0.031817872] +gra[14][9][12] = [-0.04595394, -0.025789274, 0.093209125, -0.025386075, 0.0, -0.0024315235, 0.0024269857, 0.031249907] +gra[14][9][13] = [-0.06253972, -0.03147722, 0.13741048, -0.014771162, 0.0, -0.0019102512, 0.0024269857, 0.027304392] +gra[14][9][14] = [-0.18775843, -0.37637526, -0.23955697, -0.26414376, -0.21396284, -0.12595381, -0.10222481, -0.23771174] +gra[14][10][0] = [0.0016535555, 3.2741146E-4, 0.003204043, 1.1323892E-10] +gra[14][10][1] = [0.030359399, 0.07058733, -0.017545186, 0.0] +gra[14][10][2] = [-0.09626371, -0.008757901, -0.013296669, -0.0016921958] +gra[14][10][3] = [-0.041435387, -0.018708255, 0.002196358, -0.001692196] +gra[14][10][4] = [-0.038581695, -0.015771583, 0.0044842823, -0.001692196] +gra[14][10][5] = [0.049655966, -0.022280084, 0.002196358, -0.001692196] +gra[14][10][6] = [0.05007869, -6.89765E-4, -0.011463992, 0.0031626287] +gra[14][10][7] = [0.042304426, -0.013025224, 6.205952E-4, -0.001692196] +gra[14][10][8] = [-0.058169376, 0.02240749, 0.011389386, 0.0] +gra[14][10][9] = [-0.0039507775, -0.016944697, -0.0052801343, -0.0016921958] +gra[14][10][10] = [-0.32598376, -0.089373134, -0.42189366, -0.12931946] +gra[14][10][11] = [-0.011033574, 0.07895074, 0.022978501, 0.0019329089] +gra[14][10][12] = [0.040658515, 0.058160074, 0.018748194, 4.5780465E-4] +gra[14][10][13] = [0.07926445, 0.062513635, -0.0019399691, 9.091237E-4] +gra[14][10][14] = [-0.32598376, -0.089373134, -0.42189366, -0.12931946] +gra[14][11][0] = [-0.0017319206, -0.0020210762, -0.006932474, -0.0029216837, 0.0031306578, 0.0022224444, 0.0020929475, 1.9265735E-4] +gra[14][11][1] = [0.009894438, -0.025603905, 0.005041209, -0.019387899, -8.747375E-4, -3.7906157E-11, -0.005605967, 0.049525008] +gra[14][11][2] = [0.012047265, -0.023770321, -0.14157864, -0.018074542, -0.0038321887, -0.0024273172, 0.0, 0.007836706] +gra[14][11][3] = [0.011515043, -0.00521922, -0.07476257, -0.013261375, 0.0, -0.0036866383, 0.0010881305, 0.0030171203] +gra[14][11][4] = [0.014451717, -0.0029312975, -0.07182182, -0.01887905, 2.1011333E-12, -0.0024273172, -0.005473798, 0.0014430091] +gra[14][11][5] = [0.007943215, 8.847595E-4, 0.011374953, -0.013261375, 0.0, -0.0024273172, -0.0012047905, -7.2720836E-6] +gra[14][11][6] = [-5.5476942E-12, 0.0021639597, 0.043663118, 8.188048E-4, -0.0025067397, 0.0, 0.0031763045, 0.0] +gra[14][11][7] = [0.010155093, -0.0013697359, 0.0019494435, -0.017164951, 0.0, -5.7599705E-4, -8.487664E-4, 0.004819586] +gra[14][11][8] = [-0.015143082, -0.028094402, -0.06812735, -0.0042073233, 0.0, 0.0, 0.0021252728, 0.04212567] +gra[14][11][9] = [0.017680958, 0.0011989512, -0.042761106, -0.012579497, -0.0038321887, -0.0024273172, 0.0010881305, 0.0] +gra[14][11][10] = [0.10300264, -0.04740205, -0.034849335, -0.0068523446, 0.003984191, -0.011439133, 0.027201029, -0.07176561] +gra[14][11][11] = [-0.13174748, -0.4127771, -0.2476984, -0.16385658, -0.22010909, -0.13418928, -0.10745787, -0.21812226] +gra[14][11][12] = [-0.03901305, -0.01084387, 0.034373622, -0.046552837, -0.004892796, -0.0024315235, 0.00362852, 0.0065014227] +gra[14][11][13] = [-0.052112397, 0.03198275, 0.06561172, -0.01938964, 0.0, 0.0013912377, 0.00362852, -0.005294564] +gra[14][11][14] = [-0.13174748, -0.4127771, -0.2476984, -0.16385658, -0.22010909, -0.13418928, -0.10745787, -0.21812226] +gra[14][12][0] = [-1.0599452E-4, -0.0020210762, -0.006932474, -2.737789E-4, 0.0031306578, 0.0022224444, 0.0020929475, -0.0018251492] +gra[14][12][1] = [-8.8162685E-4, -6.848867E-4, -0.01981195, -0.05071387, -8.747375E-4, 0.0, -0.009747193, 0.07975232] +gra[14][12][2] = [0.010398943, -0.028204845, -0.13535935, -0.022958368, 1.5084875E-10, -0.0024273172, 0.0, 0.007836706] +gra[14][12][3] = [0.022394357, -0.005284174, -0.06688294, -0.016871221, 0.0, -0.011285769, 0.009492035, 0.0047051376] +gra[14][12][4] = [0.014039585, -0.0029962487, -0.063942194, -0.022488894, 2.1011333E-12, -0.0100264475, 0.0029301066, 0.0031310264] +gra[14][12][5] = [0.007531083, -6.81683E-4, 0.019254586, -0.016871221, 0.0, -0.0100264475, 0.009652967, 0.0016880172] +gra[14][12][6] = [-1.1091661E-10, -0.0046882727, 0.048567124, 8.188048E-4, -0.0025067397, 0.0, 0.0031763045, 0.0] +gra[14][12][7] = [0.010398943, -4.2611733E-5, 0.013992602, -0.02311066, 0.0, -5.7599705E-4, -8.487664E-4, 0.004819586] +gra[14][12][8] = [-0.015492963, 0.0014628633, -0.08022591, -0.031336557, 0.0, 0.0, -0.0020159527, 0.056492005] +gra[14][12][9] = [0.017024977, -0.005443506, -0.030536842, -0.015520515, 1.5084875E-10, -0.010492706, 0.009492035, 0.0016880172] +gra[14][12][10] = [0.01890654, -0.017414961, -0.023150582, -0.009890772, 0.00846618, -0.008658591, 0.0515223, -0.086118296] +gra[14][12][11] = [0.023150899, 5.922683E-4, -0.07096923, -0.016346559, -0.002111407, -0.004783477, -0.0022391165, 0.0] +gra[14][12][12] = [-0.23819716, -0.45526987, -0.26443404, -0.25669253, -0.21316737, -0.19598888, -0.16998905, -0.2994849] +gra[14][12][13] = [-0.03364171, 0.016109705, 0.1436839, 0.01834002, 0.0, 0.0038268352, -0.0037499052, 0.0018075759] +gra[14][12][14] = [-0.23819716, -0.45526987, -0.26443404, -0.25669253, -0.21316737, -0.19598888, -0.16998905, -0.2994849] +gra[14][13][0] = [-1.0599452E-4, 0.0, -0.006932474, -2.737789E-4, 3.0349702E-11, 0.0022224444, 0.0020929475, -0.0032232394] +gra[14][13][1] = [-0.0064263684, 0.032257907, -0.073842674, -0.042575825, -8.747375E-4, 0.0, -0.013392032, 0.07975232] +gra[14][13][2] = [0.008543024, -0.023793714, -0.08331758, -0.015909398, -4.115616E-11, -0.0024273172, 0.0, 0.004819586] +gra[14][13][3] = [0.009246991, -0.003999448, -0.024953874, -0.011476233, 0.0, -0.011285769, 0.009492035, 0.0016880172] +gra[14][13][4] = [0.012183664, -0.0017115228, -0.02201313, -0.01957027, 2.1011333E-12, -0.0100264475, 0.0029301066, 1.1390599E-4] +gra[14][13][5] = [0.009246991, 6.0304295E-4, 0.016605025, -0.011476233, 0.0, -0.0100264475, 0.009492035, 0.0016880172] +gra[14][13][6] = [0.0, -0.0022572777, 0.05019716, 0.0, -0.0025067397, 0.0, 0.0031763045, 0.0] +gra[14][13][7] = [0.011328364, 1.3491325E-4, 0.018187441, -0.015379808, 0.0, -5.7599705E-4, -8.487664E-4, 0.005930855] +gra[14][13][8] = [-0.021037703, 0.028769845, -0.100073226, -0.02493851, 0.0, 0.0, -0.005660792, 0.056492005] +gra[14][13][9] = [0.015169059, -0.0041424744, -0.020650156, -0.008471542, -4.115616E-11, -0.010492706, 0.009492035, 0.0016880172] +gra[14][13][10] = [0.024620136, -0.013816819, -0.008670685, -0.022165136, 0.006513544, -0.008658591, 0.053646676, -0.077163056] +gra[14][13][11] = [0.02129498, -0.007425433, -0.08519275, -0.010228307, -0.002111407, -0.004783477, -0.0022391165, 0.0] +gra[14][13][12] = [0.013093872, 0.010518471, -0.011354735, -0.008471542, 0.0020460575, -0.0024273172, 0.0, 0.0] +gra[14][13][13] = [-0.3152193, -0.4017373, -0.16526677, -0.19256514, -0.19967724, -0.19260567, -0.1575356, -0.23550606] +gra[14][13][14] = [-0.3152193, -0.4017373, -0.16526677, -0.19256514, -0.19967724, -0.19260567, -0.1575356, -0.23550606] diff --git a/dependencyParser/experimental/examples/edges output.txt b/dependencyParser/experimental/examples/edges output.txt new file mode 100644 index 0000000..c1e80e8 --- /dev/null +++ b/dependencyParser/experimental/examples/edges output.txt @@ -0,0 +1,552 @@ +edges[5][6] = [9] +edges[5][7] = [9, 17] +edges[5][8] = [9, 17, 30] +edges[5][9] = [9] +edges[5][10] = [9, 24, 26, 4] +edges[5][11] = [9] +edges[5][12] = [9] +edges[5][13] = [9] +edges[5][14] = [9] +edges[5][15] = [9] +edges[5][16] = [9] +edges[5][17] = [9, 17] +edges[5][18] = [9, 26, 14, 24, 6, 4] +edges[5][21] = [9] +edges[5][22] = [9] +edges[5][23] = [9] +edges[5][24] = [9] +edges[5][25] = [9] +edges[5][26] = [9] +edges[5][28] = [9] +edges[5][29] = [9, 17] +edges[5][31] = [9] +edges[5][32] = [9] +edges[5][37] = [9] +edges[6][6] = [4] +edges[6][7] = [5, 8, 21, 10, 4, 17] +edges[6][9] = [21, 5, 15, 4, 17] +edges[6][10] = [11, 5, 31] +edges[6][12] = [5, 4, 21, 10, 17] +edges[6][13] = [5] +edges[6][14] = [4, 21, 18] +edges[6][15] = [21, 4, 5] +edges[6][18] = [5, 4] +edges[6][19] = [5] +edges[6][20] = [5, 21] +edges[6][21] = [5] +edges[6][22] = [21] +edges[6][23] = [5] +edges[6][26] = [5] +edges[6][27] = [5] +edges[6][29] = [5, 4, 21, 8] +edges[6][35] = [21, 5] +edges[6][37] = [5, 31, 4] +edges[6][39] = [5, 21] +edges[6][40] = [5] +edges[6][41] = [5] +edges[7][6] = [4, 8, 5, 21, 28, 17] +edges[7][7] = [7, 8, 4, 5, 10, 21, 15, 12, 31, 30, 17] +edges[7][8] = [4, 20] +edges[7][9] = [4, 8, 21, 5, 6, 17, 7] +edges[7][10] = [11, 4, 5, 8, 20, 31, 7, 21] +edges[7][11] = [4, 20, 30] +edges[7][12] = [4, 5, 7, 8] +edges[7][13] = [4, 8, 20, 14, 5] +edges[7][14] = [4, 18, 16] +edges[7][15] = [4, 19, 21] +edges[7][16] = [4, 20] +edges[7][17] = [14, 4, 20, 7] +edges[7][18] = [4, 8, 20, 5, 7, 10, 14, 21] +edges[7][19] = [4, 5, 10] +edges[7][20] = [4, 5] +edges[7][21] = [4] +edges[7][22] = [4] +edges[7][23] = [4] +edges[7][24] = [4, 20] +edges[7][26] = [4, 5] +edges[7][27] = [8, 7, 4, 5] +edges[7][28] = [4, 20] +edges[7][29] = [4, 5, 8, 7] +edges[7][31] = [4] +edges[7][32] = [4] +edges[7][34] = [4] +edges[7][37] = [4, 7, 8, 31, 5, 21] +edges[7][39] = [4, 8, 7] +edges[7][40] = [4] +edges[7][41] = [4] +edges[8][6] = [4, 5, 15, 21] +edges[8][7] = [6, 10, 12, 4, 15, 30] +edges[8][8] = [10, 20, 6, 13, 4, 30] +edges[8][9] = [10, 15, 6, 12, 4, 5] +edges[8][10] = [11, 15, 6, 4, 14, 12, 5, 20, 10, 31, 30] +edges[8][11] = [20, 10, 6, 4, 30] +edges[8][12] = [4, 10, 6, 12] +edges[8][13] = [20, 14, 4, 15, 12, 10] +edges[8][14] = [4, 16, 18, 23, 10, 5, 19] +edges[8][15] = [4, 15, 5, 20, 30, 19] +edges[8][16] = [20] +edges[8][17] = [14, 20, 6, 4, 10] +edges[8][18] = [4, 6, 12, 10, 20, 15, 5, 14] +edges[8][19] = [10, 12, 6, 4, 15, 30] +edges[8][20] = [12, 10, 4] +edges[8][21] = [6, 15, 10] +edges[8][22] = [19, 4] +edges[8][23] = [20, 4] +edges[8][24] = [20, 10, 30] +edges[8][25] = [22] +edges[8][26] = [10, 12, 6, 4] +edges[8][27] = [6, 4, 10] +edges[8][28] = [13, 20, 30] +edges[8][29] = [4, 12, 10, 6] +edges[8][31] = [4] +edges[8][32] = [30] +edges[8][33] = [6] +edges[8][34] = [4] +edges[8][37] = [30, 10, 6, 4, 31, 12] +edges[8][38] = [6] +edges[8][39] = [6, 4] +edges[8][40] = [4, 30] +edges[9][6] = [4, 5, 28, 21] +edges[9][7] = [12, 7, 5, 8, 4, 10, 6, 21] +edges[9][8] = [20, 4] +edges[9][9] = [4, 21] +edges[9][10] = [11, 21, 25, 4] +edges[9][11] = [20, 4] +edges[9][12] = [5, 4] +edges[9][13] = [4] +edges[9][14] = [4, 18] +edges[9][15] = [4] +edges[9][17] = [14] +edges[9][18] = [20, 5, 4] +edges[9][19] = [4, 12, 5] +edges[9][20] = [5] +edges[9][21] = [4] +edges[9][22] = [19, 4] +edges[9][23] = [4] +edges[9][24] = [20, 4] +edges[9][26] = [12, 5] +edges[9][27] = [8] +edges[9][29] = [5] +edges[9][31] = [4] +edges[9][37] = [4, 8] +edges[10][6] = [17, 4] +edges[10][7] = [4, 6, 17, 10, 21, 8, 5, 12] +edges[10][8] = [17, 4] +edges[10][9] = [17, 4, 6, 21] +edges[10][10] = [11, 17, 4, 31, 9] +edges[10][11] = [17, 4] +edges[10][12] = [21, 17, 6, 12] +edges[10][13] = [17, 4] +edges[10][14] = [17, 4] +edges[10][15] = [17, 4] +edges[10][16] = [17] +edges[10][17] = [17] +edges[10][18] = [17, 4, 21] +edges[10][19] = [10] +edges[10][20] = [17] +edges[10][21] = [17, 4] +edges[10][22] = [19, 4, 17] +edges[10][23] = [17] +edges[10][24] = [17] +edges[10][25] = [22] +edges[10][26] = [6] +edges[10][27] = [17, 21, 4, 5] +edges[10][28] = [17] +edges[10][29] = [17] +edges[10][30] = [17] +edges[10][31] = [17] +edges[10][32] = [17] +edges[10][37] = [21, 8, 17, 31, 6, 5, 4] +edges[10][40] = [4] +edges[11][6] = [5, 4, 21, 15] +edges[11][7] = [15, 6, 10, 12, 4, 30] +edges[11][8] = [20, 10, 6, 4, 30] +edges[11][9] = [6, 15, 12, 10, 5, 4] +edges[11][10] = [11, 6, 15, 10, 12, 5, 4, 20, 8, 31] +edges[11][11] = [20, 6, 4, 10, 30] +edges[11][12] = [12, 6, 10, 4, 15, 30] +edges[11][13] = [15, 20, 6, 14, 4, 10] +edges[11][14] = [4, 18, 16, 10, 29, 5, 15, 19] +edges[11][15] = [5, 4, 15, 12, 10] +edges[11][16] = [20, 6] +edges[11][17] = [14, 6, 20, 4, 10] +edges[11][18] = [4, 15, 10, 6, 20, 5, 12, 14] +edges[11][19] = [12, 10, 6, 15, 4] +edges[11][20] = [12, 4, 10] +edges[11][21] = [12, 6, 15] +edges[11][22] = [19, 4, 6, 20] +edges[11][23] = [6, 20] +edges[11][24] = [20, 6, 30, 4] +edges[11][26] = [10, 6, 12, 4, 15] +edges[11][27] = [4, 5, 6, 10] +edges[11][28] = [20, 4, 10] +edges[11][29] = [6, 12, 10, 15] +edges[11][31] = [4] +edges[11][32] = [14, 20] +edges[11][33] = [6, 4] +edges[11][34] = [4] +edges[11][36] = [15, 4] +edges[11][37] = [15, 6, 31, 4, 12, 10] +edges[11][40] = [4] +edges[12][6] = [4, 5] +edges[12][7] = [5, 21, 4, 17, 10] +edges[12][8] = [4, 20] +edges[12][9] = [5, 4, 21] +edges[12][10] = [11, 5, 21, 31] +edges[12][11] = [4, 20] +edges[12][12] = [4, 21] +edges[12][13] = [4, 5, 20] +edges[12][14] = [4] +edges[12][15] = [4] +edges[12][18] = [5] +edges[12][19] = [5] +edges[12][21] = [4] +edges[12][23] = [4] +edges[12][24] = [20] +edges[12][26] = [5] +edges[12][27] = [21, 5, 4] +edges[12][29] = [5] +edges[12][37] = [5, 21] +edges[13][6] = [4, 5, 28] +edges[13][7] = [6, 12, 15, 4, 5, 8] +edges[13][8] = [13, 20] +edges[13][9] = [6, 4, 12] +edges[13][10] = [11, 5, 12, 6, 28, 4] +edges[13][11] = [13, 20] +edges[13][12] = [6, 4] +edges[13][14] = [4, 18] +edges[13][15] = [4, 5, 21] +edges[13][17] = [13, 4] +edges[13][18] = [6, 12, 4, 5, 28] +edges[13][19] = [12, 6, 4] +edges[13][20] = [12] +edges[13][22] = [19, 4] +edges[13][24] = [6] +edges[13][26] = [12] +edges[13][27] = [4] +edges[13][28] = [13] +edges[13][29] = [12, 6] +edges[13][31] = [4] +edges[13][32] = [13, 4] +edges[13][37] = [12, 4, 31, 6] +edges[14][6] = [4, 17, 21] +edges[14][7] = [17, 21, 5, 4, 6] +edges[14][8] = [20] +edges[14][9] = [17] +edges[14][10] = [11] +edges[14][14] = [4, 21, 18] +edges[14][15] = [21, 5, 4] +edges[14][17] = [14] +edges[14][22] = [21, 4] +edges[14][25] = [22] +edges[15][6] = [4, 21, 5] +edges[15][7] = [4, 6, 17, 5] +edges[15][8] = [20, 4] +edges[15][10] = [11, 14, 20] +edges[15][11] = [4, 20] +edges[15][13] = [21, 20] +edges[15][14] = [4, 21, 18] +edges[15][15] = [4, 21, 5] +edges[15][16] = [20] +edges[15][17] = [14, 20] +edges[15][18] = [20, 14, 5, 21, 4] +edges[15][22] = [19, 4] +edges[15][23] = [20] +edges[15][24] = [20, 4] +edges[15][26] = [4, 12] +edges[15][28] = [13, 20] +edges[16][6] = [4] +edges[16][7] = [6, 4] +edges[16][8] = [13] +edges[16][9] = [6] +edges[16][10] = [11, 4, 14] +edges[16][12] = [6] +edges[16][13] = [14] +edges[16][14] = [4, 16, 18] +edges[16][15] = [4] +edges[16][17] = [14] +edges[16][18] = [14, 4, 6] +edges[16][19] = [6] +edges[16][22] = [4, 19] +edges[16][25] = [22] +edges[16][26] = [6] +edges[16][29] = [6] +edges[16][37] = [6, 4] +edges[17][6] = [4, 5, 12, 15, 21] +edges[17][7] = [10, 12, 4, 15, 6, 5] +edges[17][8] = [20, 10] +edges[17][9] = [15, 6, 12, 10, 5, 4] +edges[17][10] = [11, 10, 15, 4, 20, 5, 31] +edges[17][11] = [20, 10, 4, 30, 21] +edges[17][12] = [4, 10, 12, 6] +edges[17][13] = [10, 4, 20] +edges[17][14] = [16, 18, 4, 10, 21] +edges[17][15] = [4, 15, 5] +edges[17][17] = [14] +edges[17][18] = [20, 10, 4, 6, 12, 5, 15] +edges[17][19] = [10, 4, 12, 15, 6, 5] +edges[17][20] = [12, 10, 4] +edges[17][22] = [4, 19] +edges[17][23] = [10, 20] +edges[17][24] = [10, 20] +edges[17][26] = [10, 12, 5, 4, 6] +edges[17][27] = [4, 12] +edges[17][28] = [13] +edges[17][29] = [10, 12, 15] +edges[17][31] = [4] +edges[17][34] = [4] +edges[17][37] = [10, 12, 31] +edges[18][6] = [4, 28, 17, 5] +edges[18][7] = [17, 6, 5, 4, 10, 8, 12, 7, 31] +edges[18][8] = [17, 4, 13] +edges[18][9] = [17, 6, 4, 8, 5] +edges[18][10] = [11, 17, 6, 4, 31, 24, 10] +edges[18][11] = [17, 13, 4, 5, 20] +edges[18][12] = [17, 4, 6, 7, 10] +edges[18][13] = [4, 17] +edges[18][14] = [4, 16, 17, 23, 27] +edges[18][15] = [4, 17, 5] +edges[18][16] = [17] +edges[18][17] = [17, 14, 13] +edges[18][18] = [27, 21, 17, 6, 4, 10, 7, 5] +edges[18][19] = [4, 6, 10, 17] +edges[18][20] = [17] +edges[18][21] = [4, 17] +edges[18][22] = [19, 4, 21, 17] +edges[18][23] = [17, 4] +edges[18][24] = [17, 6] +edges[18][26] = [17, 6, 10] +edges[18][27] = [4, 17, 21] +edges[18][28] = [17, 13] +edges[18][29] = [17, 6, 9, 10] +edges[18][31] = [4, 17] +edges[18][32] = [17] +edges[18][37] = [17, 6, 4, 31, 5, 10] +edges[18][39] = [17] +edges[18][40] = [4] +edges[19][6] = [4] +edges[19][7] = [4, 17, 7] +edges[19][9] = [4] +edges[19][10] = [11] +edges[19][13] = [4] +edges[19][14] = [4] +edges[19][15] = [4] +edges[19][18] = [4] +edges[19][38] = [4] +edges[20][8] = [4] +edges[20][9] = [4] +edges[20][10] = [11] +edges[20][15] = [4] +edges[20][18] = [4] +edges[21][6] = [5, 4, 23] +edges[21][7] = [10, 12, 15, 4] +edges[21][8] = [20] +edges[21][9] = [4] +edges[21][10] = [10, 11] +edges[21][11] = [20] +edges[21][12] = [12, 10] +edges[21][14] = [16, 4] +edges[21][15] = [4, 5] +edges[21][17] = [14] +edges[21][18] = [12, 10, 4, 5] +edges[21][19] = [10, 12, 4] +edges[21][20] = [12] +edges[21][26] = [12] +edges[21][29] = [10, 12] +edges[21][37] = [12, 10] +edges[22][8] = [20] +edges[22][10] = [14, 11] +edges[22][11] = [20] +edges[22][13] = [20] +edges[22][14] = [4] +edges[22][15] = [20] +edges[22][17] = [14, 20] +edges[22][18] = [20, 14] +edges[22][23] = [20] +edges[22][24] = [14, 20] +edges[22][25] = [22] +edges[22][28] = [20] +edges[22][31] = [20] +edges[23][6] = [4, 5, 17] +edges[23][7] = [10, 12, 4, 5] +edges[23][8] = [20, 10] +edges[23][9] = [10, 4, 12] +edges[23][10] = [11, 5, 10] +edges[23][11] = [20, 10] +edges[23][12] = [10, 4, 12] +edges[23][13] = [20] +edges[23][14] = [18, 4, 16, 23] +edges[23][15] = [4, 5] +edges[23][17] = [14] +edges[23][18] = [10, 20, 4, 5] +edges[23][19] = [10, 12] +edges[23][22] = [4, 19] +edges[23][26] = [10, 4, 12] +edges[23][29] = [10] +edges[23][31] = [4] +edges[23][32] = [4] +edges[23][37] = [10, 31] +edges[24][6] = [4, 5, 15] +edges[24][7] = [6, 15, 12, 4] +edges[24][8] = [13, 6, 20] +edges[24][9] = [15, 6, 4, 5] +edges[24][10] = [11, 6, 24, 31, 15] +edges[24][11] = [6, 13, 20, 4] +edges[24][12] = [12, 4, 15, 6] +edges[24][13] = [20, 15] +edges[24][14] = [18, 4, 23, 16] +edges[24][15] = [4, 5, 15] +edges[24][17] = [14, 6] +edges[24][18] = [6, 12, 15, 4, 14] +edges[24][19] = [12, 6] +edges[24][21] = [15] +edges[24][22] = [4, 19] +edges[24][24] = [20] +edges[24][26] = [12, 6, 15] +edges[24][28] = [13] +edges[24][29] = [12, 6, 15] +edges[24][31] = [4] +edges[24][33] = [6] +edges[24][34] = [4] +edges[24][37] = [4, 15] +edges[24][40] = [4, 6] +edges[25][6] = [4, 5] +edges[25][8] = [13] +edges[25][10] = [11] +edges[26][7] = [7, 4] +edges[26][9] = [4] +edges[26][10] = [11] +edges[26][12] = [4] +edges[26][14] = [4] +edges[26][38] = [4] +edges[27][6] = [4] +edges[27][7] = [4, 7, 5, 8, 10] +edges[27][9] = [4, 8] +edges[27][10] = [25, 11, 21, 5, 4] +edges[27][13] = [4] +edges[27][14] = [4] +edges[27][18] = [4, 5] +edges[27][19] = [4] +edges[27][21] = [4] +edges[27][26] = [5] +edges[27][27] = [5, 4, 21] +edges[27][29] = [17, 5] +edges[27][37] = [4, 8, 7] +edges[28][6] = [4, 5, 21] +edges[28][7] = [6, 15, 12, 4] +edges[28][8] = [4] +edges[28][9] = [15, 4, 6] +edges[28][10] = [11, 15, 4] +edges[28][12] = [15, 6] +edges[28][13] = [5] +edges[28][14] = [18, 4, 29] +edges[28][15] = [4, 5, 15] +edges[28][17] = [14] +edges[28][18] = [6, 19, 15] +edges[28][19] = [6] +edges[28][20] = [15] +edges[28][22] = [4, 19] +edges[28][26] = [6, 12] +edges[28][29] = [6] +edges[28][31] = [4] +edges[28][34] = [4] +edges[28][37] = [15, 6] +edges[29][6] = [4, 5, 28, 21] +edges[29][7] = [10, 6, 12, 15, 8, 4, 5] +edges[29][8] = [20, 4] +edges[29][9] = [4, 6, 10, 15, 12] +edges[29][10] = [11, 31, 24, 10, 20] +edges[29][11] = [20, 4, 10] +edges[29][12] = [10, 6, 12] +edges[29][13] = [10, 15, 4, 20] +edges[29][14] = [16, 4, 18] +edges[29][15] = [5, 4] +edges[29][17] = [20, 14, 4] +edges[29][18] = [10, 5, 4, 12, 6] +edges[29][19] = [10, 12, 6, 4] +edges[29][20] = [12] +edges[29][21] = [4] +edges[29][22] = [4] +edges[29][24] = [4] +edges[29][26] = [10, 12] +edges[29][27] = [10, 4] +edges[29][29] = [10, 12] +edges[29][31] = [4] +edges[29][37] = [10, 12, 31, 4, 6] +edges[29][39] = [12] +edges[31][6] = [5, 4] +edges[31][7] = [10, 12, 4, 15] +edges[31][8] = [10, 20] +edges[31][9] = [4, 5] +edges[31][10] = [11, 10, 24, 31, 17, 9] +edges[31][11] = [20, 30] +edges[31][12] = [10, 12] +edges[31][13] = [20] +edges[31][14] = [16, 4, 18, 5] +edges[31][15] = [4, 5] +edges[31][17] = [14, 20] +edges[31][18] = [10, 12, 20, 5, 17] +edges[31][19] = [12, 10] +edges[31][20] = [12] +edges[31][22] = [4] +edges[31][24] = [20] +edges[31][27] = [10] +edges[31][29] = [10] +edges[31][37] = [10, 4, 31] +edges[32][6] = [5, 4] +edges[32][7] = [4, 10, 12] +edges[32][8] = [20, 10] +edges[32][9] = [15, 4] +edges[32][10] = [4, 11, 24, 31, 10] +edges[32][11] = [20, 10] +edges[32][12] = [10, 4] +edges[32][13] = [20] +edges[32][14] = [4, 18, 16] +edges[32][15] = [4, 5] +edges[32][17] = [14, 20] +edges[32][18] = [12, 10, 4, 5] +edges[32][19] = [10, 4, 12] +edges[32][20] = [4, 12, 10] +edges[32][22] = [4] +edges[32][26] = [12, 4, 10, 5] +edges[32][27] = [10] +edges[32][28] = [10] +edges[32][31] = [4] +edges[32][37] = [4, 31, 12] +edges[33][9] = [4] +edges[33][10] = [11] +edges[34][6] = [5] +edges[34][7] = [10, 4] +edges[34][8] = [10] +edges[34][10] = [11] +edges[34][14] = [18, 4, 16] +edges[34][15] = [4] +edges[34][19] = [10] +edges[35][10] = [11] +edges[35][15] = [4] +edges[36][6] = [4, 5] +edges[37][6] = [4, 5] +edges[37][7] = [4, 7, 8, 5, 21, 6] +edges[37][8] = [4, 10] +edges[37][9] = [4, 21] +edges[37][10] = [21, 11, 25, 8, 4] +edges[37][12] = [4, 21] +edges[37][14] = [4] +edges[37][15] = [8, 4] +edges[37][18] = [4] +edges[37][21] = [4] +edges[37][27] = [21, 5] +edges[37][29] = [4] +edges[37][32] = [4] +edges[37][37] = [8, 21, 4, 5, 7, 17] +edges[37][39] = [8] +edges[37][40] = [4] +edges[39][6] = [21] +edges[39][7] = [8] +edges[39][10] = [11] +edges[39][14] = [4] +edges[39][37] = [8] +edges[40][10] = [11] +edges[41][10] = [11] +edges[41][41] = [21] +def = [4] diff --git a/dependencyParser/experimental/examples/is output.txt b/dependencyParser/experimental/examples/is output.txt new file mode 100644 index 0000000..24e879b --- /dev/null +++ b/dependencyParser/experimental/examples/is output.txt @@ -0,0 +1,199 @@ +-----m_encoder----- +m_featureSets[WORD] = {przestępca: 2237, sypiała: 40681, postawny: 28676, chrzcielnicy: 33013, rodzinne: 17265, rodzinna: 39199, uwięzić: 27792, bieganiu: 27332, zmienione: 18988, bootującej: 16343, przestępcy: 2234, flegmę: 4944, Funkcjonariusze: 17882, wierzchołki: 31813, zmieniona: 36337, odwieźć: 8897, posiłek: 2576, Aaa: 39718, !: 358, ": 5927, wprowadzone: 32738, obłożyło: 26137, BCC: 25412, $: 34107, %: 34067, ': 33700, kategoriach: 37908, (: 2598, wprowadzono: 17264, opiekuje: 10886, ): 2601, kalendarzu: 5441, +: 38035, ,: 27, -: 185, modułu: 37422, .: 16, /: 33255, krytyka: 15299, bliskich: 12516, postawić: 2018, Dorohusk: 9491, zmieniony: 14640, poddawane: 35462, krytyki: 45132, pacjent: 7540, poddawano: 43369, :: 33240, wzór: 977, ;: 4750, wiązać: 9099, chrzcielnica: 33014, ?: 188, A: 990, B: 14265, inwalidę: 33654, C: 26676, utopić: 7389, D: 21028, Faktycznie: 31464, E: 45436, piękne: 17211, G: 2424, H: 10704, odmaterializować: 32056, I: 597, Zanim: 20233, J: 10708, K: 14645, botanik: 32047, piękno: 29553, pokonywania: 34247, L: 39989, M: 1128, N: 10706, O: 2903, P: 13636, podpunkt: 39316, Q: 27885, Pięcioletnia: 18978, piękny: 2167, R: 3578, S: 1894, T: 23370, U: 8598, techniki: 15595, Właścicielką: 2109, V: 42064, W: 24, X: 8522, Aby: 6473, Z: 164, [: 34398, zgłaszających: 28593, poświęcony: 19835, ]: 34399, technika: 15597, zwalczać: 52, zarys: 16637, a: 1000, b: 38728, c: 45216, d: 44297, e: 44042, rodzinny: 6233, Francesca: 33146, g: 38126, Ach: 40856, i: 118, Układy: 14877, j: 40762, rozczarować: 3772, postawił: 14574, choćby: 17341, l: 36850, m: 312, zlikwidujmy: 44456, o: 208, p: 15743, bliskiej: 10632, r: 3158, osadzono: 26935, s: 35796, Act: 37911, u: 346, mięśni: 16459, w: 18, piękna: 2164, z: 35, wzgórza: 26972, wzgórze: 16580, socjusza: 929, Pomorskim: 32111, ochroniarzami: 26672, Ade: 32920, postawną: 28671, włoszczowski: 27202, mówienia: 40887, kastrować: 17185, odreagowywać: 17465, BFR: 37902, bioderku: 28286, opiekuna: 11927, bioderko: 28287, położonych: 34242, Adu: 32916, zawisł: 10846, pasować: 8390, OHIM: 34517, Komendant: 24696, tradycyjnie: 17684, dopuszczony: 11012, misyjne: 23923, posprzątać: 39630, odczują: 11392, Dorucha: 20238, popędzić: 39459, wyluzowanego: 2299, Barcelona: 37732, piękną: 3560, Lodów: 20975, epitetów: 32976, brzucha: 5337, nagrobkiem: 25688, asfaltowej: 19742, efektywnej: 34887, specjalnego: 2172, wiązka: 37020, mikrogram: 37721, czapeczką: 30098, poświęcone: 6307, rozłożyła: 134, rodzinie: 14546, misyjny: 23924, przesadzasz: 24792, sposoby: 34918, »: 40902, umożliwiać: 7217, sposobu: 16316, ministerialny: 31704, Gemini: 18775, międzyrządowych: 26800, szklanki: 31359, Jeleni: 9055, Havlovej: 5342, konfiskatę: 31558, płucnego: 43458, salami: 6906, Aga: 28104, wabiąc: 30678, brzuchu: 37800, Wróblewski: 26732, BIC: 37311, walczyli: 37040, efektywnie: 41728, szklanka: 7907, trzymiesięcznej: 10550, BIG: 26309, dobrego: 10826, chmur: 40922, mniejszej: 38757, finiszowała: 31529, Lędziny: 22545, wyślizgnąć: 39457, ciągnie: 28040, karykatury: 39255, wyssać: 9381, pleść: 29367, monoetylowy: 35498, wodami: 35265, ciągnik: 21017, ściągnęli: 10648, milijednostka: 45203, szelmowskim: 35929, CANCIDAS: 43908, gruzów: 10400, Planował: 35070, rozstrzygania: 34787, utalentowanych: 43924, wiązał: 25080, potrzebujesz: 32483, spadochronowy: 3031, poniesionych: 44410, idziemy: 19257, kłopotliwy: 6355, [import]cie: 26420, karykatura: 31715, bogatsze: 6261, wanadowych: 18734, wyświadczyć: 42368, odymać: 22424, pozwoliły: 10795, benzo[a]pirenu: 35457, współczesność: 9110, suszyła: 25429, krytycy: 19412, koszt: 11264, Lipnik: 30001, prześliźnie: 30967, koszu: 17011, gęstnieć: 28811, czapeczka: 30102, obdarzyła: 43013, dumna: 23426, zrozumieć: 5867, władca: 33474, Partyzanci: 31227, wodach: 31986, sposobność: 25005, wylizać: 27337, starania: 42671, frontowy: 36080, pozwoliła: 6850, odesłać: 23040, standardowy: 39222, twardziel: 17457, tknąć: 20905, staranie: 4587, spacerujących: 29650, reform: 20473, homoseksualizm: 18945, Biodra: 32187, wydajniej: 22061, standardowo: 21153, efektowny: 22025, blasku: 25583, kładziesz: 39426, domowego: 16806, inseminatora: 23392, oczywisty: 11577, złożyć: 4473, ń: 19637, czatowali: 32624, Wycelowała: 13004, Estonii: 32334, opiekują: 19124, snów: 21277, kosztowna: 43102, uważała: 25072, kosztowny: 8830, budowany: 15773, frontowe: 36077, Richard: 35355, pseudoeuropejczyków: 12477, szerokopasmowy: 43242, Treurnicht: 26639, Rybny: 33107, ś: 464, dłuższą: 4165, urzędniczki: 18365, mroźny: 21919, stanął: 1038, oskrzelowa: 16531, BMS: 34953, terytoriach: 38747, zaznaczyć: 15250, Akt: 25387, rozliczalność: 38124, urzędniczka: 18372, BMW: 25915, oczywiste: 11572, oskrzelowy: 16537, weryfikacyjnych: 43732, nastawionych: 28467, zagrożeniach: 35851, mogli: 1044, Garrett: 35309, Ala: 2394, Ale: 65, biologicznego: 36215, budowane: 31971, ż: 23896, Saladyn: 31188, nienawiści: 43362, dociera: 30039, Estonia: 32339, dumny: 21164, stypendium: 13287, włączając: 26727, Angeli: 4481, uzbrojenie: 35747, Alp: 30145, atakować: 2409, wydziału: 2173, Awiwie: 17076, Angela: 4484, Zatrzymanym: 2239, promocyjny: 22286, Singapurze: 21806, Organizatorzy: 7931, MODUł: 37957, Jerozolimski: 31189, szklankę: 7905, Pluj: 25067, Nauki: 13611, przyniesiesz: 38787, artretyzm: 33648, Plus: 42683, warkoczyk: 15700, komórce: 38113, Śrem: 21288, Facet: 32705, nieformalny: 38084, wynagrodzenia: 23439, większej: 35518, nieobowiązkowy: 35340, zasad: 21652, sposobów: 32477, uniezależnić: 28118, wydaniem: 20301, wynagrodzenie: 23443, tabelaryczny: 43978, szerokopasmowa: 43237, Shimada: 23144, nieobowiązkowe: 35338, uzbrojeniu: 35746, Kambakhsha: 40354, żołnierzami: 5492, ruchem: 3794, zmienioną: 34400, Ani: 2797, stanąć: 1041, złożył: 12489, harcerz: 18915, Centralnego: 33835, białaczką: 17529, ważniejszych: 27342, zrozumiał: 5863, posiłki: 37034, Wyrzucili: 30085, dłuższy: 29997, efektowna: 22024, farmakodynamiczny: 37831, nieoficjalnych: 18845, popędzać: 24003, komórek: 14783, mikroprzedsiębiorstwo: 38224, przypadło: 43833, odesłał: 24701, popędzili: 39454, Tych: 12684, dzieciobójstwo: 41508, promocyjne: 40736, przypadły: 32145, kartuski: 13201, kotce: 10495, zapiaszczyć: 38649, niekonwencjonalnych: 29528, pasożytów: 44103, dzieciobójstwa: 41503, Olimpijskie: 9957, BRH: 7444, Koncepcja: 43996, pokrzyżować: 31707, oferent: 35914, strun: 15254, fluorytowy: 18580, Afrykańczyku: 3460, grzybów: 13232, pomocowego: 34648, nagrodzonych: 27252, zagrożeniami: 21381, niewyraźnym: 23125, zaopiekował: 41339, sprowadzenie: 1962, planujemy: 2276, Piotra: 5837, zatrzaśnięty: 1976, odpocząć: 7853, Zgodnie: 6953, woleć: 17913, niezrealizowane: 15016, Asuan: 20901, Tegoroczną: 21140, zatwierdzony: 6780, wymieszać: 19898, Pierwsi: 36302, kamieniarze: 23698, powstanie: 8549, Podpisał: 19215, Spanikowani: 28196, Karaibów: 43788, obejrzał: 9420, starym: 7466, zdołali: 31631, gwiazdy: 8905, dźwigać: 28848, bezpieczną: 14012, powstaniu: 8544, powstrzyma: 35683, Zamaskowany: 1278, umacnianiu: 40842, Trójstronnej: 16714, pokrzyżował: 31706, zatwierdzona: 42812, zadźgać: 14794, lokatorskiej: 29786, zatwierdzone: 42479, Art: 35878, karami: 10602, rzępolić: 11410, powtarzać: 11367, bankowość: 28460, Dante: 43453, Słyszała: 22616, Zgłoszony: 41049, towarzyski: 6270, wolał: 17910, nieformalne: 39775, zaopiekować: 15763, Przerwała: 33451, powstania: 6800, szałasy: 28199, wybaczysz: 38404, uczulać: 16550, Spójrz: 30877, dinozaur: 44030, komórka: 3418, reporter: 23991, obejrzeć: 2436, Wpełzł: 34447, Gazprom: 37514, marketing: 45437, Assicurazioni: 38378, zaimprowizowanych: 22676, naczynku: 36254, Niemniej: 36996, dźwigał: 28846, Milkowszczyzna: 16595, połowach: 33261, poczerwieniała: 24193, uzgadniania: 43867, tortura: 24499, naczynko: 10717, Częstochowy: 15811, Świetnie: 44311, Podlaski: 30768, rysowali: 32697, chińskimi: 41670, naczynie: 13542, sparaliżowany: 1214, naczynia: 13536, zajść: 24383, namysłu: 18126, zoologiczny: 10740, przeważającą: 38513, Pomagasz: 22889, Zgięła: 33980, narodowość: 43685, zbadać: 24138, biznes: 14294, komórki: 3416, biurowiec: 13194, tereny: 45036, Podlaska: 13657, powtarzał: 18223, Początek: 6244, szklanym: 34239, terenu: 6971, sądowych: 45025, karani: 4610, władać: 23215, Bydgoszczanin: 7094, wyliczenie: 21227, białaczki: 38868, pleśniowych: 16482, bydgoszczanin: 7099, białaczka: 17532, Postanowił: 5119, Konwój: 3285, Milkowszczyznę: 16594, sporze: 14174, sforsować: 9458, Paulauskasowi: 23585, Załamała: 13067, rozejrzał: 29663, nawracać: 21769, skrypt: 35056, naczyniu: 44191, ssak: 27790, wymaga: 5691, wyminął: 32521, odmianami: 33643, Jugosławia: 22302, Pańskie: 25998, Barnard: 35078, gwiazda: 916, kompletnym: 40096, wycinać: 35720, zamilknąć: 5108, Jugosławii: 22299, przednich: 34735, Pańskim: 25995, organizatorzy: 23778, obóz: 22188, narkotyki: 12397, zaangażowanych: 36502, 241mg: 41289, postulowanego: 2892, podmiotów: 17436, Odpoczywał: 34842, objeść: 28867, odrobiła: 40754, obój: 17566, wyposażane: 42604, ugodowość: 26636, wybitny: 16171, brazylijski: 41112, Tamalana: 37596, Lyonie: 38549, zasobów: 16773, starsi: 7630, wycinek: 21081, powierzone: 44432, wydawnictw: 16782, Grozi: 9279, sprzedaży: 10599, Grozd: 8860, gimnastycznymi: 6907, wybitni: 38184, rozejrzeć: 15104, Widocznie: 10231, potwierdzającym: 42988, brazylijska: 41111, położyli: 5150, INFORMACYJNE: 37963, czasu: 3265, Ambulatorium: 24976, skrawek: 10746, tradycyjnej: 42173, wykrywa: 18063, Wstyd: 15130, porównywał: 26403, Amber: 45043, BBWR: 5642, potrzebujemy: 3957, Cegielskiego: 16900, podpisany: 27566, pomysłowy: 38585, inwalida: 3767, lotniczych: 36995, wpojono: 23593, Wyłączyła: 4957, ssać: 16919, Danny: 42217, donosów: 13793, Pomagają: 11401, karate: 13884, psychol: 32704, kanalizacja: 6837, darczyńcy: 44531, obdarzy: 44336, czasy: 7365, podpisane: 12856, Chcąc: 27894, charakter: 5179, psychoanalityk: 16245, zielonkawy: 17509, steroid: 16507, kokieteria: 11674, umrze: 37658, czaru: 11669, robimy: 26057, pomysłowa: 38583, drżące: 23773, darczyńca: 44536, gospodarczego: 19318, kokieterii: 11671, zaplanuję: 38954, wolną: 6490, zazdrośnie: 26335, schowana: 5655, bohater: 12527, Rysunek: 42589, codziennego: 41402, ogłaszaną: 20578, paradować: 38016, konkretnych: 23738, rejsowym: 2187, wyrobów: 12864, uwzględniających: 38450, formularzach: 38656, Państwowy: 12941, rozpoznawać: 39288, niezamierzony: 36873, przekroczyć: 8540, wyklucza: 13082, zawyżyć: 5712, Given: 39394, zmienionej: 36646, wynieść: 12369, porównywać: 26405, aktualizacji: 40966, kryteriach: 42686, publikowanie: 33855, Ponieważ: 2132, holdingu: 1860, aktualizacja: 40967, przytaczać: 45505, niezamierzone: 36864, czaty: 21041, wyminąć: 32522, współpracowników: 27674, zgłaszającymi: 43011, migracja: 38700, Częstochowa: 15813, bożych: 13380, puszczamy: 10477, Dojedli: 20970, migracji: 38697, zniszczyła: 32100, współgrać: 32075, Lubuscy: 2769, umożliwiał: 40853, minnesang: 20833, zniszczyły: 43598, pańskiego: 37486, Państwowa: 14495, zarabiać: 10883, zmartwić: 44568, przekroczył: 25916, inhibitorów: 37030, nagrodami: 7010, sekretów: 35451, Mocka: 7548, wolna: 218, stryj: 11451, tętnicy: 3859, wolne: 24619, BYĆ: 17813, wolni: 27864, zbliżony: 12433, Kompanii: 1858, wyposażać: 42605, wolno: 939, zwrot: 2507, kosić: 32323, używanych: 37700, wolny: 226, eksperymentów: 18388, powtarzaj: 19997, tętnica: 3868, wykryta: 31192, czaić: 38918, Dania: 17508, terytoriami: 44704, nieprzytomny: 2402, Tamalanę: 37594, CAI: 33848, przygody: 16862, przyroda: 38563, Albania: 5497, Pękali: 12145, przygoda: 11913, Jagienka: 22848, zbliżona: 40939, Zaleskiego: 1767, Danii: 17507, mających: 19186, fachowi: 13585, przyrody: 41323, Dramatyczny: 19826, większym: 9696, Emil: 25723, języku: 38087, wykryty: 6081, zmierzające: 45103, kłamiesz: 24052, fachowy: 13587, wierzchołek: 12285, emerytalnym: 9224, odporność: 16472, wprowadzony: 36633, języka: 4524, antagonista: 23548, pałeczka: 18951, podpisali: 1522, wykryte: 42250, języki: 10775, chińskich: 36796, skrawać: 14896, skrupuł: 29020, korytarzykiem: 20659, Astry: 9666, dorzecze: 35267, CCD: 41468, krytykę: 15292, siedziała: 25249, ulegająca: 36492, Navarro: 8460, uskakuje: 3516, informując: 7069, doręczyć: 8304, weteran: 30250, Bar: 7854, Badanym: 25111, ścianami: 37609, kupowali: 26036, zatelefonować: 28657, zużyć: 18727, teatrze: 1209, dzieckiem: 9588, radości: 10292, Dumnie: 30538, kinematograficznych: 44918, niewyraźnie: 22008, lekarzem: 17721, odtajnić: 21396, biolog: 27782, homoseksualista: 22929, naciągać: 15268, mydlany: 1117, Zamek: 23380, przeczulony: 14258, łydka: 12996, stres: 17464, mydlana: 1114, macicę: 23363, widowisk: 18589, Simon: 43518, stref: 13115, łydki: 12990, Bogiem: 11215, oprzytomnieć: 32767, zbliżoną: 12429, lateksowych: 44486, Wogau: 44473, palec: 5165, żywności: 7816, futerko: 33155, towarzyszą: 7241, nakładać: 32122, przyłączyć: 16444, hydrauliczny: 20201, zbóż: 27216, obejmować: 9759, instytucjonalny: 37761, zyskania: 36232, seksaferze: 13790, Regis: 24230, rozproszonych: 43661, Zeznania: 18364, punktualność: 12014, mierzynka: 15505, Manifestanci: 5284, cieszył: 29827, podpałka: 14510, ściąga: 32730, kreślić: 32749, przemawiające: 40785, Atalanta: 43294, podpałki: 14509, rodzinnym: 6230, wygramolić: 39232, kwadratowy: 8774, budynkach: 1857, Kierownik: 40864, Szujskiego: 4276, unikają: 1372, ekipie: 8126, MIESZANINACH: 33786, Zwiększyli: 38191, Wybierz: 9948, antykoncentracyjny: 22994, spowodowało: 10753, wstawię: 32470, skrawku: 38436, Nasze: 2058, kanalizację: 6831, hydroliza: 37190, wysięgnik: 3185, polepszyła: 39424, spowodowały: 18700, złożonej: 43554, ogrodowy: 13504, odbijać: 4701, Nasza: 38582, rżniętych: 28912, obracało: 44711, zobaczenia: 17205, najwięcej: 31014, nieznośnie: 6349, wstawić: 20937, Jiang: 26653, antykoncentracyjne: 22992, palca: 9378, nieśli: 30518, Przyznał: 37290, business: 37913, palce: 5162, rozliczyć: 22198, tekstu: 22001, profesora: 3077, obrazkowy: 40194, obiecuje: 33179, hydrolizy: 37181, teksty: 15654, nauczycielski: 42214, Towarzystwie: 22246, cieszyć: 1541, Dokładny: 36392, Stanowi: 26911, statku: 30542, niektórych: 16154, Bez: 5949, papierosach: 43936, robisz: 29518, gangów: 45244, klient: 4457, Kryminalnego: 23188, radykałami: 27974, polepszyły: 33861, statki: 26463, mierzynek: 15507, Źródła: 22803, odbijał: 31172, przenikliwy: 25139, wycieńczony: 2201, Dzianinę: 24205, eksploatację: 39636, nakładki: 23864, baba: 4251, kawalerię: 36061, tężeć: 17879, Algorytm: 9877, oburzeniem: 21840, Natan: 14816, mówiono: 26096, nakładka: 23871, skuteczną: 35848, oddelegowało: 19659, prawdopodobne: 22949, Źródło: 7187, oznakowane: 18517, istotna: 10895, CIF: 34658, 69-letni: 14209, czterdziestkę: 20895, istotne: 4174, Nietypowe: 26795, dzisiejszy: 9997, Krzysztofa: 2934, gospodarstwie: 17727, parafialnych: 6786, publicznie: 18013, obracała: 4907, wspiąć: 3425, gwiazdkowy: 44599, bagażem: 12812, strat: 8256, opłakanym: 7667, Naszą: 44927, gwiazdkowe: 45522, Chorób: 39881, istotny: 4183, rodowy: 9483, gminnymi: 25367, szczytowej: 38987, pikować: 41643, Muszę: 15313, czystej: 38281, wprowadziła: 8334, zamierzali: 28189, linkach: 37806, Muszą: 42610, Tramwaj: 30070, Roztwór: 44500, zwycięski: 17717, czeremchy: 8535, pasterz: 19593, Zamku: 36828, bada: 3573, kraksa: 20096, Eliza: 30786, wyrażonym: 18224, CBŚ: 11774, pozwolono: 36396, skrzyń: 41001, zelektryzować: 15573, dopełnić: 28211, ostrożnościowy: 44423, okresowy: 34835, PRZEGRAŁ: 19077, nizina: 20530, przypaść: 32147, przód: 11722, przeliczeniowym: 40458, Określona: 35687, prelekcji: 10135, wspiął: 3422, półtoraroczny: 26046, utrzyma: 10569, prestiżowi: 40704, wspomniano: 45048, nadchodzące: 27092, uwagach: 43151, zmaterializować: 41229, Halina: 23764, węglowodory: 37124, wprowadziło: 22552, morskiego: 7492, rozesłali: 2534, prelekcja: 10137, zwycięsko: 27984, wspomniane: 37836, czeremcha: 8538, baby: 4249, Kubusia: 24662, Towarzystwem: 19674, koordynatora: 42786, prestiżowy: 24999, kraksy: 20095, wspomniana: 32664, prestiżową: 24998, Gabrieli: 805, pozorować: 9455, zostawionych: 13349, niedozwolone: 34917, poczekalni: 30722, Południową: 35075, szpital: 1698, hamulcowe: 23865, dzwoneczków: 37243, nurtu: 45066, Porucznik: 15842, wyładowanie: 41678, dogmatyk: 39550, wyładowania: 43495, nihilizmu: 39373, Andyjskiego: 39920, hamulcowy: 23872, Dolnym: 5054, przeniesie: 2289, obrachunkowych: 34434, skrzynkach: 14693, CML: 41454, filmem: 32234, genetyczne: 31176, bezbożnica: 24241, miauknął: 7340, ChNP: 34171, genetyczna: 39343, zamienić: 3338, emerytowanych: 37414, reflektorów: 23909, Róża: 14273, genetyczny: 18392, goleniowski: 29139, maniak: 31798, Przyznam: 10020, Gabriela: 808, goleniowska: 29158, naszymi: 33195, maniackiej: 43569, niedozwolony: 34920, Spale: 19197, kontrolował: 36383, ChOG: 34173, jeżeliby: 21389, statut: 4650, wychowanek: 6614, status: 18588, zaraz: 4142, Przeważnie: 23001, wychowanie: 17384, kolorów: 35803, CO2: 33590, wstawać: 8379, kominowej: 29858, kazanie: 30321, wychowania: 22248, zaprojektowane: 36400, Izby: 8163, rozpad: 36498, dumpingu: 34655, paliw: 22939, serwisować: 40911, hotelach: 16215, wychodzić: 4730, nieporadnie: 35758, publicznej: 17849, palio: 25826, strop: 27879, stron: 4590,...} (exceeds maximum print length) +m_featureSets[D] = {LA: 1, <None>: 0, RA: 2} +m_featureSets[POS] = {aglt: 25, pant: 34, adjp: 35, conj: 18, ppas: 13, num: 12, <None>: 0, STPOS: 4, fin: 11, bedzie: 28, STR: 2, ign: 37, praet: 8, ger: 29, pred: 24, imps: 23, pact: 21, impt: 32, prep: 6, inf: 17, ppron12: 26, comp: 22, numcol: 38, burk: 39, interp: 10, pcon: 31, adj: 9, MID: 1, subst: 7, depr: 33, <root-POS>: 5, brev: 27, adjc: 36, adv: 15, adja: 30, xxx: 41, END: 3, siebie: 20, ppron3: 19, winien: 16, qub: 14, interj: 40} +m_featureSets[DIST] = {0: 1, 1: 2, 2: 3, 3: 4, 4: 5, 5: 6, <None>: 0, 10: 7} +m_featureSets[F] = {com: 25, acc: 2, loc: 12, agl: 34, pun: 31, npraep: 27, <None>: 0, congr: 22, voc: 38, nom: 6, sup: 35, sec: 32, neg: 37, gen: 10, rec: 18, wok: 3, sg: 4, pos: 11, praep: 24, nwok: 13, dat: 21, perf: 8, aff: 19, ter: 16, m1: 7, m2: 33, f: 9, m3: 5, pri: 28, NOFEAT: 1, npun: 36, nagl: 29, imperf: 17, n: 15, p: 30, inst: 20, akc: 23, nakc: 26, pl: 14} +m_featureSets[REL] = {<root-type>: 2, aglt: 22, aux: 13, <None>: 0, refl: 16, cond: 23, imp: 29, comp_inf: 14, neg: 18, adjunct_qt: 30, coord: 26, pred: 9, pre_coord: 27, coord_punct: 24, conjunct: 17, punct: 11, subj: 6, adjunct: 4, app: 7, comp: 5, item: 31, comp_fin: 20, complm: 19, <no-type>: 3, comp_ag: 28, pd: 15, obj: 10, ne: 8, mwe: 21, END: 1, abbrev_punct: 25, obj_th: 12} +m_featureSets[SP] = {STR: 1, <None>: 0, END: 2} +m_featureSets[TYPE] = {F21: 24, F20: 23, F23: 26, F22: 25, F25: 28, F120: 123, F24: 27, F121: 124, F27: 30, F122: 125, F26: 29, F123: 126, F29: 32, F124: 127, F28: 31, F125: 128, F126: 129, F127: 130, F128: 131, F129: 132, F30: 33, F32: 35, F31: 34, F34: 37, F33: 36, F36: 39, F35: 38, F110: 113, F38: 41, F111: 114, F37: 40, F112: 115, F113: 116, F39: 42, F114: 117, F115: 118, F116: 119, F117: 120, F118: 121, F119: 122, POS: 1, F41: 44, F40: 43, F43: 46, F42: 45, F: 2, F45: 48, F140: 143, F44: 47, F141: 144, F47: 50, F142: 145, F46: 49, F143: 146, F49: 52, F144: 147, F48: 51, F145: 148, F146: 149, F147: 150, F148: 151, F149: 152, F50: 53, F52: 55, F51: 54, F54: 57, F53: 56, F56: 59, F55: 58, F130: 133, F58: 61, F131: 134, F57: 60, F132: 135, F133: 136, F59: 62, F134: 137, F135: 138, F136: 139, F137: 140, F138: 141, F139: 142, F61: 64, F60: 63, F63: 66, F62: 65, F65: 68, F64: 67, F67: 70, F66: 69, F69: 72, F68: 71, F70: 73, F72: 75, F71: 74, F74: 77, F73: 76, F76: 79, F75: 78, F78: 81, F77: 80, F79: 82, F0: 3, F1: 4, F2: 5, F3: 6, F4: 7, F5: 8, F6: 9, F7: 10, F8: 11, F9: 12, F81: 84, F80: 83, F83: 86, F82: 85, F85: 88, F84: 87, F87: 90, F86: 89, F89: 92, F88: 91, <None>: 0, F100: 103, F101: 104, F102: 105, F103: 106, F104: 107, F105: 108, F106: 109, F107: 110, F108: 111, F109: 112, F90: 93, F92: 95, F91: 94, F94: 97, F93: 96, F96: 99, F95: 98, F10: 13, F98: 101, F97: 100, F12: 15, F11: 14, F99: 102, F14: 17, F13: 16, F16: 19, F15: 18, F18: 21, F17: 20, F19: 22} +m_featureCounters = {WORD: 45576, D: 3, POS: 42, DIST: 8, F: 39, REL: 32, SP: 3, TYPE: 153} +m_featureBits = {WORD: 16, D: 2, POS: 6, DIST: 4, F: 6, REL: 6, SP: 2, TYPE: 8} +count = 8 +stop = false +------------------- +size = 1 +capacity = 1 +forms[0][0] = 2 +forms[0][1] = 3 +forms[0][2] = 4 +forms[0][3] = 5 +forms[0][4] = 6 +forms[0][5] = 7 +forms[0][6] = 8 +forms[0][7] = 9 +forms[0][8] = 10 +forms[0][9] = 11 +forms[0][10] = 12 +forms[0][11] = 13 +forms[0][12] = 14 +forms[0][13] = 15 +forms[0][14] = 16 +plemmas[0][0] = 17 +plemmas[0][1] = 18 +plemmas[0][2] = 4 +plemmas[0][3] = 5 +plemmas[0][4] = 6 +plemmas[0][5] = 7 +plemmas[0][6] = 19 +plemmas[0][7] = 20 +plemmas[0][8] = 10 +plemmas[0][9] = 21 +plemmas[0][10] = 22 +plemmas[0][11] = 13 +plemmas[0][12] = 23 +plemmas[0][13] = 15 +plemmas[0][14] = 16 +glemmas[0][0] = 17 +glemmas[0][1] = 18 +glemmas[0][2] = 4 +glemmas[0][3] = 5 +glemmas[0][4] = 6 +glemmas[0][5] = 7 +glemmas[0][6] = 19 +glemmas[0][7] = 20 +glemmas[0][8] = 10 +glemmas[0][9] = 21 +glemmas[0][10] = 22 +glemmas[0][11] = 13 +glemmas[0][12] = 23 +glemmas[0][13] = 15 +glemmas[0][14] = 16 +heads[0][0] = -1 +heads[0][1] = -1 +heads[0][2] = -1 +heads[0][3] = -1 +heads[0][4] = -1 +heads[0][5] = -1 +heads[0][6] = -1 +heads[0][7] = -1 +heads[0][8] = -1 +heads[0][9] = -1 +heads[0][10] = -1 +heads[0][11] = -1 +heads[0][12] = -1 +heads[0][13] = -1 +heads[0][14] = -1 +pheads[0][0] = -1 +pheads[0][1] = -1 +pheads[0][2] = -1 +pheads[0][3] = -1 +pheads[0][4] = -1 +pheads[0][5] = -1 +pheads[0][6] = -1 +pheads[0][7] = -1 +pheads[0][8] = -1 +pheads[0][9] = -1 +pheads[0][10] = -1 +pheads[0][11] = -1 +pheads[0][12] = -1 +pheads[0][13] = -1 +pheads[0][14] = -1 +labels[0][0] = 3 +labels[0][1] = -1 +labels[0][2] = -1 +labels[0][3] = -1 +labels[0][4] = -1 +labels[0][5] = -1 +labels[0][6] = -1 +labels[0][7] = -1 +labels[0][8] = -1 +labels[0][9] = -1 +labels[0][10] = -1 +labels[0][11] = -1 +labels[0][12] = -1 +labels[0][13] = -1 +labels[0][14] = -1 +plabels[0][0] = 3 +plabels[0][1] = -1 +plabels[0][2] = -1 +plabels[0][3] = -1 +plabels[0][4] = -1 +plabels[0][5] = -1 +plabels[0][6] = -1 +plabels[0][7] = -1 +plabels[0][8] = -1 +plabels[0][9] = -1 +plabels[0][10] = -1 +plabels[0][11] = -1 +plabels[0][12] = -1 +plabels[0][13] = -1 +plabels[0][14] = -1 +gpos[0][0] = 5 +gpos[0][1] = 6 +gpos[0][2] = 7 +gpos[0][3] = 7 +gpos[0][4] = 7 +gpos[0][5] = 7 +gpos[0][6] = 8 +gpos[0][7] = 7 +gpos[0][8] = 6 +gpos[0][9] = 7 +gpos[0][10] = 9 +gpos[0][11] = 7 +gpos[0][12] = 7 +gpos[0][13] = 7 +gpos[0][14] = 10 +pposs[0][0] = 5 +pposs[0][1] = 6 +pposs[0][2] = 7 +pposs[0][3] = 7 +pposs[0][4] = 7 +pposs[0][5] = 7 +pposs[0][6] = 8 +pposs[0][7] = 7 +pposs[0][8] = 6 +pposs[0][9] = 7 +pposs[0][10] = 9 +pposs[0][11] = 7 +pposs[0][12] = 7 +pposs[0][13] = 7 +pposs[0][14] = 10 +feats[0][1] = [2, 3] +feats[0][2] = [4, 2, 5] +feats[0][3] = [4, 6, 7] +feats[0][4] = [4, 6, 7] +feats[0][5] = [4, 6, 7] +feats[0][6] = [4, 7, 8] +feats[0][7] = [4, 2, 9] +feats[0][8] = [10] +feats[0][9] = [4, 10, 7] +feats[0][10] = [4, 10, 7, 11] +feats[0][11] = [4, 10, 5] +feats[0][12] = [4, 10, 9] +feats[0][13] = [4, 10, 9] +pfill [0] = {} +gfeats[0][0] = -1 +gfeats[0][1] = -1 +gfeats[0][2] = -1 +gfeats[0][3] = -1 +gfeats[0][4] = -1 +gfeats[0][5] = -1 +gfeats[0][6] = -1 +gfeats[0][7] = -1 +gfeats[0][8] = -1 +gfeats[0][9] = -1 +gfeats[0][10] = -1 +gfeats[0][11] = -1 +gfeats[0][12] = -1 +gfeats[0][13] = -1 +gfeats[0][14] = -1 +pfeats[0][0] = 0 +pfeats[0][1] = -1 +pfeats[0][2] = -1 +pfeats[0][3] = -1 +pfeats[0][4] = -1 +pfeats[0][5] = -1 +pfeats[0][6] = -1 +pfeats[0][7] = -1 +pfeats[0][8] = -1 +pfeats[0][9] = -1 +pfeats[0][10] = -1 +pfeats[0][11] = -1 +pfeats[0][12] = -1 +pfeats[0][13] = -1 +pfeats[0][14] = 0 +m_unkown = 0 +m_count = 15 +m_report = false +m_found = false diff --git a/dependencyParser/experimental/examples/test.csv b/dependencyParser/experimental/examples/test.csv new file mode 100644 index 0000000..4d1eba0 --- /dev/null +++ b/dependencyParser/experimental/examples/test.csv @@ -0,0 +1,14 @@ +1 We w w prep prep acc|wok acc|wok _ _ _ _ _ _ +2 wtorek wtorek wtorek subst subst sg|acc|m3 sg|acc|m3 _ _ _ _ _ _ +3 prezydent prezydent prezydent subst subst sg|nom|m1 sg|nom|m1 _ _ _ _ _ _ +4 Robert Robert Robert subst subst sg|nom|m1 sg|nom|m1 _ _ _ _ _ _ +5 Choma Choma Choma subst subst sg|nom|m1 sg|nom|m1 _ _ _ _ _ _ +6 skierował skierować skierować praet praet sg|m1|perf sg|m1|perf _ _ _ _ _ _ +7 sprawę sprawa sprawa subst subst sg|acc|f sg|acc|f _ _ _ _ _ _ +8 do do do prep prep gen gen _ _ _ _ _ _ +9 rzecznika rzecznik rzecznik subst subst sg|gen|m1 sg|gen|m1 _ _ _ _ _ _ +10 dyscyplinarnego dyscyplinarny dyscyplinarny adj adj sg|gen|m1|pos sg|gen|m1|pos _ _ _ _ _ _ +11 UM UM UM subst subst sg|gen|m3 sg|gen|m3 _ _ _ _ _ _ +12 Danuty Danuta Danuta subst subst sg|gen|f sg|gen|f _ _ _ _ _ _ +13 Wiech Wiech Wiech subst subst sg|gen|f sg|gen|f _ _ _ _ _ _ +14 . . . interp interp _ _ _ _ _ _ _ _ diff --git a/dependencyParser/experimental/examples/test.out b/dependencyParser/experimental/examples/test.out new file mode 100644 index 0000000..51d709f --- /dev/null +++ b/dependencyParser/experimental/examples/test.out @@ -0,0 +1,210 @@ +1 We w w prep prep acc|wok acc|wok -1 0 _ pred _ _ +2 wtorek wtorek wtorek subst subst sg|acc|m3 sg|acc|m3 -1 1 _ comp _ _ +3 prezydent prezydent prezydent subst subst sg|nom|m1 sg|nom|m1 -1 6 _ subj _ _ +4 Robert Robert Robert subst subst sg|nom|m1 sg|nom|m1 -1 3 _ app _ _ +5 Choma Choma Choma subst subst sg|nom|m1 sg|nom|m1 -1 4 _ ne _ _ +6 skierował skierować skierować praet praet sg|m1|perf sg|m1|perf -1 1 _ adjunct _ _ +7 sprawę sprawa sprawa subst subst sg|acc|f sg|acc|f -1 6 _ obj _ _ +8 do do do prep prep gen gen -1 6 _ comp _ _ +9 rzecznika rzecznik rzecznik subst subst sg|gen|m1 sg|gen|m1 -1 8 _ comp _ _ +10 dyscyplinarnego dyscyplinarny dyscyplinarny adj adj sg|gen|m1|pos sg|gen|m1|pos -1 9 _ adjunct _ _ +11 UM UM UM subst subst sg|gen|m3 sg|gen|m3 -1 9 _ adjunct _ _ +12 Danuty Danuta Danuta subst subst sg|gen|f sg|gen|f -1 9 _ app _ _ +13 Wiech Wiech Wiech subst subst sg|gen|f sg|gen|f -1 12 _ ne _ _ +14 . . . interp interp _ _ -1 1 _ punct _ _ + +1 We w w prep prep acc|wok acc|wok -1 6 _ adjunct _ _ +2 wtorek wtorek wtorek subst subst sg|acc|m3 sg|acc|m3 -1 0 _ pred _ _ +3 prezydent prezydent prezydent subst subst sg|nom|m1 sg|nom|m1 -1 6 _ subj _ _ +4 Robert Robert Robert subst subst sg|nom|m1 sg|nom|m1 -1 3 _ app _ _ +5 Choma Choma Choma subst subst sg|nom|m1 sg|nom|m1 -1 4 _ ne _ _ +6 skierował skierować skierować praet praet sg|m1|perf sg|m1|perf -1 2 _ adjunct _ _ +7 sprawę sprawa sprawa subst subst sg|acc|f sg|acc|f -1 6 _ obj _ _ +8 do do do prep prep gen gen -1 6 _ comp _ _ +9 rzecznika rzecznik rzecznik subst subst sg|gen|m1 sg|gen|m1 -1 8 _ comp _ _ +10 dyscyplinarnego dyscyplinarny dyscyplinarny adj adj sg|gen|m1|pos sg|gen|m1|pos -1 9 _ adjunct _ _ +11 UM UM UM subst subst sg|gen|m3 sg|gen|m3 -1 9 _ adjunct _ _ +12 Danuty Danuta Danuta subst subst sg|gen|f sg|gen|f -1 9 _ app _ _ +13 Wiech Wiech Wiech subst subst sg|gen|f sg|gen|f -1 12 _ ne _ _ +14 . . . interp interp _ _ -1 2 _ punct _ _ + +1 We w w prep prep acc|wok acc|wok -1 6 _ adjunct _ _ +2 wtorek wtorek wtorek subst subst sg|acc|m3 sg|acc|m3 -1 1 _ comp _ _ +3 prezydent prezydent prezydent subst subst sg|nom|m1 sg|nom|m1 -1 0 _ pred _ _ +4 Robert Robert Robert subst subst sg|nom|m1 sg|nom|m1 -1 6 _ subj _ _ +5 Choma Choma Choma subst subst sg|nom|m1 sg|nom|m1 -1 4 _ ne _ _ +6 skierował skierować skierować praet praet sg|m1|perf sg|m1|perf -1 3 _ adjunct _ _ +7 sprawę sprawa sprawa subst subst sg|acc|f sg|acc|f -1 6 _ obj _ _ +8 do do do prep prep gen gen -1 6 _ comp _ _ +9 rzecznika rzecznik rzecznik subst subst sg|gen|m1 sg|gen|m1 -1 8 _ comp _ _ +10 dyscyplinarnego dyscyplinarny dyscyplinarny adj adj sg|gen|m1|pos sg|gen|m1|pos -1 9 _ adjunct _ _ +11 UM UM UM subst subst sg|gen|m3 sg|gen|m3 -1 9 _ adjunct _ _ +12 Danuty Danuta Danuta subst subst sg|gen|f sg|gen|f -1 9 _ app _ _ +13 Wiech Wiech Wiech subst subst sg|gen|f sg|gen|f -1 12 _ ne _ _ +14 . . . interp interp _ _ -1 3 _ punct _ _ + +1 We w w prep prep acc|wok acc|wok -1 4 _ adjunct _ _ +2 wtorek wtorek wtorek subst subst sg|acc|m3 sg|acc|m3 -1 1 _ comp _ _ +3 prezydent prezydent prezydent subst subst sg|nom|m1 sg|nom|m1 -1 4 _ adjunct _ _ +4 Robert Robert Robert subst subst sg|nom|m1 sg|nom|m1 -1 0 _ pred _ _ +5 Choma Choma Choma subst subst sg|nom|m1 sg|nom|m1 -1 4 _ ne _ _ +6 skierował skierować skierować praet praet sg|m1|perf sg|m1|perf -1 4 _ comp_fin _ _ +7 sprawę sprawa sprawa subst subst sg|acc|f sg|acc|f -1 6 _ obj _ _ +8 do do do prep prep gen gen -1 6 _ comp _ _ +9 rzecznika rzecznik rzecznik subst subst sg|gen|m1 sg|gen|m1 -1 8 _ comp _ _ +10 dyscyplinarnego dyscyplinarny dyscyplinarny adj adj sg|gen|m1|pos sg|gen|m1|pos -1 9 _ adjunct _ _ +11 UM UM UM subst subst sg|gen|m3 sg|gen|m3 -1 9 _ adjunct _ _ +12 Danuty Danuta Danuta subst subst sg|gen|f sg|gen|f -1 9 _ app _ _ +13 Wiech Wiech Wiech subst subst sg|gen|f sg|gen|f -1 12 _ ne _ _ +14 . . . interp interp _ _ -1 4 _ punct _ _ + +1 We w w prep prep acc|wok acc|wok -1 6 _ adjunct _ _ +2 wtorek wtorek wtorek subst subst sg|acc|m3 sg|acc|m3 -1 1 _ comp _ _ +3 prezydent prezydent prezydent subst subst sg|nom|m1 sg|nom|m1 -1 6 _ subj _ _ +4 Robert Robert Robert subst subst sg|nom|m1 sg|nom|m1 -1 3 _ app _ _ +5 Choma Choma Choma subst subst sg|nom|m1 sg|nom|m1 -1 0 _ pred _ _ +6 skierował skierować skierować praet praet sg|m1|perf sg|m1|perf -1 5 _ comp_fin _ _ +7 sprawę sprawa sprawa subst subst sg|acc|f sg|acc|f -1 6 _ obj _ _ +8 do do do prep prep gen gen -1 6 _ comp _ _ +9 rzecznika rzecznik rzecznik subst subst sg|gen|m1 sg|gen|m1 -1 8 _ comp _ _ +10 dyscyplinarnego dyscyplinarny dyscyplinarny adj adj sg|gen|m1|pos sg|gen|m1|pos -1 9 _ adjunct _ _ +11 UM UM UM subst subst sg|gen|m3 sg|gen|m3 -1 9 _ adjunct _ _ +12 Danuty Danuta Danuta subst subst sg|gen|f sg|gen|f -1 9 _ app _ _ +13 Wiech Wiech Wiech subst subst sg|gen|f sg|gen|f -1 12 _ ne _ _ +14 . . . interp interp _ _ -1 5 _ punct _ _ + +1 We w w prep prep acc|wok acc|wok -1 6 _ adjunct _ _ +2 wtorek wtorek wtorek subst subst sg|acc|m3 sg|acc|m3 -1 1 _ comp _ _ +3 prezydent prezydent prezydent subst subst sg|nom|m1 sg|nom|m1 -1 6 _ subj _ _ +4 Robert Robert Robert subst subst sg|nom|m1 sg|nom|m1 -1 3 _ app _ _ +5 Choma Choma Choma subst subst sg|nom|m1 sg|nom|m1 -1 4 _ ne _ _ +6 skierował skierować skierować praet praet sg|m1|perf sg|m1|perf -1 0 _ pred _ _ +7 sprawę sprawa sprawa subst subst sg|acc|f sg|acc|f -1 6 _ obj _ _ +8 do do do prep prep gen gen -1 6 _ comp _ _ +9 rzecznika rzecznik rzecznik subst subst sg|gen|m1 sg|gen|m1 -1 8 _ comp _ _ +10 dyscyplinarnego dyscyplinarny dyscyplinarny adj adj sg|gen|m1|pos sg|gen|m1|pos -1 9 _ adjunct _ _ +11 UM UM UM subst subst sg|gen|m3 sg|gen|m3 -1 9 _ adjunct _ _ +12 Danuty Danuta Danuta subst subst sg|gen|f sg|gen|f -1 9 _ app _ _ +13 Wiech Wiech Wiech subst subst sg|gen|f sg|gen|f -1 12 _ ne _ _ +14 . . . interp interp _ _ -1 6 _ punct _ _ + +1 We w w prep prep acc|wok acc|wok -1 6 _ adjunct _ _ +2 wtorek wtorek wtorek subst subst sg|acc|m3 sg|acc|m3 -1 1 _ comp _ _ +3 prezydent prezydent prezydent subst subst sg|nom|m1 sg|nom|m1 -1 6 _ subj _ _ +4 Robert Robert Robert subst subst sg|nom|m1 sg|nom|m1 -1 3 _ app _ _ +5 Choma Choma Choma subst subst sg|nom|m1 sg|nom|m1 -1 4 _ ne _ _ +6 skierował skierować skierować praet praet sg|m1|perf sg|m1|perf -1 0 _ pred _ _ +7 sprawę sprawa sprawa subst subst sg|acc|f sg|acc|f -1 6 _ obj _ _ +8 do do do prep prep gen gen -1 6 _ comp _ _ +9 rzecznika rzecznik rzecznik subst subst sg|gen|m1 sg|gen|m1 -1 8 _ comp _ _ +10 dyscyplinarnego dyscyplinarny dyscyplinarny adj adj sg|gen|m1|pos sg|gen|m1|pos -1 9 _ adjunct _ _ +11 UM UM UM subst subst sg|gen|m3 sg|gen|m3 -1 9 _ adjunct _ _ +12 Danuty Danuta Danuta subst subst sg|gen|f sg|gen|f -1 9 _ app _ _ +13 Wiech Wiech Wiech subst subst sg|gen|f sg|gen|f -1 12 _ ne _ _ +14 . . . interp interp _ _ -1 6 _ punct _ _ + +1 We w w prep prep acc|wok acc|wok -1 6 _ adjunct _ _ +2 wtorek wtorek wtorek subst subst sg|acc|m3 sg|acc|m3 -1 1 _ comp _ _ +3 prezydent prezydent prezydent subst subst sg|nom|m1 sg|nom|m1 -1 6 _ subj _ _ +4 Robert Robert Robert subst subst sg|nom|m1 sg|nom|m1 -1 3 _ app _ _ +5 Choma Choma Choma subst subst sg|nom|m1 sg|nom|m1 -1 4 _ ne _ _ +6 skierował skierować skierować praet praet sg|m1|perf sg|m1|perf -1 0 _ pred _ _ +7 sprawę sprawa sprawa subst subst sg|acc|f sg|acc|f -1 6 _ obj _ _ +8 do do do prep prep gen gen -1 6 _ comp _ _ +9 rzecznika rzecznik rzecznik subst subst sg|gen|m1 sg|gen|m1 -1 8 _ comp _ _ +10 dyscyplinarnego dyscyplinarny dyscyplinarny adj adj sg|gen|m1|pos sg|gen|m1|pos -1 9 _ adjunct _ _ +11 UM UM UM subst subst sg|gen|m3 sg|gen|m3 -1 9 _ adjunct _ _ +12 Danuty Danuta Danuta subst subst sg|gen|f sg|gen|f -1 9 _ app _ _ +13 Wiech Wiech Wiech subst subst sg|gen|f sg|gen|f -1 12 _ ne _ _ +14 . . . interp interp _ _ -1 6 _ punct _ _ + +1 We w w prep prep acc|wok acc|wok -1 6 _ adjunct _ _ +2 wtorek wtorek wtorek subst subst sg|acc|m3 sg|acc|m3 -1 1 _ comp _ _ +3 prezydent prezydent prezydent subst subst sg|nom|m1 sg|nom|m1 -1 6 _ subj _ _ +4 Robert Robert Robert subst subst sg|nom|m1 sg|nom|m1 -1 3 _ app _ _ +5 Choma Choma Choma subst subst sg|nom|m1 sg|nom|m1 -1 4 _ ne _ _ +6 skierował skierować skierować praet praet sg|m1|perf sg|m1|perf -1 0 _ pred _ _ +7 sprawę sprawa sprawa subst subst sg|acc|f sg|acc|f -1 6 _ obj _ _ +8 do do do prep prep gen gen -1 6 _ comp _ _ +9 rzecznika rzecznik rzecznik subst subst sg|gen|m1 sg|gen|m1 -1 8 _ comp _ _ +10 dyscyplinarnego dyscyplinarny dyscyplinarny adj adj sg|gen|m1|pos sg|gen|m1|pos -1 9 _ adjunct _ _ +11 UM UM UM subst subst sg|gen|m3 sg|gen|m3 -1 9 _ adjunct _ _ +12 Danuty Danuta Danuta subst subst sg|gen|f sg|gen|f -1 9 _ app _ _ +13 Wiech Wiech Wiech subst subst sg|gen|f sg|gen|f -1 12 _ ne _ _ +14 . . . interp interp _ _ -1 6 _ punct _ _ + +1 We w w prep prep acc|wok acc|wok -1 6 _ adjunct _ _ +2 wtorek wtorek wtorek subst subst sg|acc|m3 sg|acc|m3 -1 1 _ comp _ _ +3 prezydent prezydent prezydent subst subst sg|nom|m1 sg|nom|m1 -1 6 _ subj _ _ +4 Robert Robert Robert subst subst sg|nom|m1 sg|nom|m1 -1 3 _ app _ _ +5 Choma Choma Choma subst subst sg|nom|m1 sg|nom|m1 -1 4 _ ne _ _ +6 skierował skierować skierować praet praet sg|m1|perf sg|m1|perf -1 0 _ pred _ _ +7 sprawę sprawa sprawa subst subst sg|acc|f sg|acc|f -1 6 _ obj _ _ +8 do do do prep prep gen gen -1 6 _ comp _ _ +9 rzecznika rzecznik rzecznik subst subst sg|gen|m1 sg|gen|m1 -1 8 _ comp _ _ +10 dyscyplinarnego dyscyplinarny dyscyplinarny adj adj sg|gen|m1|pos sg|gen|m1|pos -1 9 _ adjunct _ _ +11 UM UM UM subst subst sg|gen|m3 sg|gen|m3 -1 9 _ adjunct _ _ +12 Danuty Danuta Danuta subst subst sg|gen|f sg|gen|f -1 9 _ app _ _ +13 Wiech Wiech Wiech subst subst sg|gen|f sg|gen|f -1 12 _ ne _ _ +14 . . . interp interp _ _ -1 6 _ punct _ _ + +1 We w w prep prep acc|wok acc|wok -1 6 _ adjunct _ _ +2 wtorek wtorek wtorek subst subst sg|acc|m3 sg|acc|m3 -1 1 _ comp _ _ +3 prezydent prezydent prezydent subst subst sg|nom|m1 sg|nom|m1 -1 6 _ subj _ _ +4 Robert Robert Robert subst subst sg|nom|m1 sg|nom|m1 -1 3 _ app _ _ +5 Choma Choma Choma subst subst sg|nom|m1 sg|nom|m1 -1 4 _ ne _ _ +6 skierował skierować skierować praet praet sg|m1|perf sg|m1|perf -1 0 _ pred _ _ +7 sprawę sprawa sprawa subst subst sg|acc|f sg|acc|f -1 6 _ obj _ _ +8 do do do prep prep gen gen -1 6 _ comp _ _ +9 rzecznika rzecznik rzecznik subst subst sg|gen|m1 sg|gen|m1 -1 8 _ comp _ _ +10 dyscyplinarnego dyscyplinarny dyscyplinarny adj adj sg|gen|m1|pos sg|gen|m1|pos -1 9 _ adjunct _ _ +11 UM UM UM subst subst sg|gen|m3 sg|gen|m3 -1 9 _ app _ _ +12 Danuty Danuta Danuta subst subst sg|gen|f sg|gen|f -1 11 _ adjunct _ _ +13 Wiech Wiech Wiech subst subst sg|gen|f sg|gen|f -1 12 _ ne _ _ +14 . . . interp interp _ _ -1 6 _ punct _ _ + +1 We w w prep prep acc|wok acc|wok -1 6 _ adjunct _ _ +2 wtorek wtorek wtorek subst subst sg|acc|m3 sg|acc|m3 -1 1 _ comp _ _ +3 prezydent prezydent prezydent subst subst sg|nom|m1 sg|nom|m1 -1 6 _ subj _ _ +4 Robert Robert Robert subst subst sg|nom|m1 sg|nom|m1 -1 3 _ app _ _ +5 Choma Choma Choma subst subst sg|nom|m1 sg|nom|m1 -1 4 _ ne _ _ +6 skierował skierować skierować praet praet sg|m1|perf sg|m1|perf -1 0 _ pred _ _ +7 sprawę sprawa sprawa subst subst sg|acc|f sg|acc|f -1 6 _ obj _ _ +8 do do do prep prep gen gen -1 6 _ comp _ _ +9 rzecznika rzecznik rzecznik subst subst sg|gen|m1 sg|gen|m1 -1 8 _ comp _ _ +10 dyscyplinarnego dyscyplinarny dyscyplinarny adj adj sg|gen|m1|pos sg|gen|m1|pos -1 9 _ adjunct _ _ +11 UM UM UM subst subst sg|gen|m3 sg|gen|m3 -1 9 _ adjunct _ _ +12 Danuty Danuta Danuta subst subst sg|gen|f sg|gen|f -1 9 _ app _ _ +13 Wiech Wiech Wiech subst subst sg|gen|f sg|gen|f -1 12 _ ne _ _ +14 . . . interp interp _ _ -1 6 _ punct _ _ + +1 We w w prep prep acc|wok acc|wok -1 6 _ adjunct _ _ +2 wtorek wtorek wtorek subst subst sg|acc|m3 sg|acc|m3 -1 1 _ comp _ _ +3 prezydent prezydent prezydent subst subst sg|nom|m1 sg|nom|m1 -1 6 _ subj _ _ +4 Robert Robert Robert subst subst sg|nom|m1 sg|nom|m1 -1 3 _ app _ _ +5 Choma Choma Choma subst subst sg|nom|m1 sg|nom|m1 -1 4 _ ne _ _ +6 skierował skierować skierować praet praet sg|m1|perf sg|m1|perf -1 0 _ pred _ _ +7 sprawę sprawa sprawa subst subst sg|acc|f sg|acc|f -1 6 _ obj _ _ +8 do do do prep prep gen gen -1 6 _ comp _ _ +9 rzecznika rzecznik rzecznik subst subst sg|gen|m1 sg|gen|m1 -1 8 _ comp _ _ +10 dyscyplinarnego dyscyplinarny dyscyplinarny adj adj sg|gen|m1|pos sg|gen|m1|pos -1 9 _ adjunct _ _ +11 UM UM UM subst subst sg|gen|m3 sg|gen|m3 -1 9 _ adjunct _ _ +12 Danuty Danuta Danuta subst subst sg|gen|f sg|gen|f -1 9 _ app _ _ +13 Wiech Wiech Wiech subst subst sg|gen|f sg|gen|f -1 12 _ ne _ _ +14 . . . interp interp _ _ -1 6 _ punct _ _ + +1 We w w prep prep acc|wok acc|wok -1 6 _ adjunct _ _ +2 wtorek wtorek wtorek subst subst sg|acc|m3 sg|acc|m3 -1 1 _ comp _ _ +3 prezydent prezydent prezydent subst subst sg|nom|m1 sg|nom|m1 -1 6 _ subj _ _ +4 Robert Robert Robert subst subst sg|nom|m1 sg|nom|m1 -1 3 _ app _ _ +5 Choma Choma Choma subst subst sg|nom|m1 sg|nom|m1 -1 4 _ ne _ _ +6 skierował skierować skierować praet praet sg|m1|perf sg|m1|perf -1 14 _ conjunct _ _ +7 sprawę sprawa sprawa subst subst sg|acc|f sg|acc|f -1 6 _ obj _ _ +8 do do do prep prep gen gen -1 6 _ comp _ _ +9 rzecznika rzecznik rzecznik subst subst sg|gen|m1 sg|gen|m1 -1 8 _ comp _ _ +10 dyscyplinarnego dyscyplinarny dyscyplinarny adj adj sg|gen|m1|pos sg|gen|m1|pos -1 9 _ adjunct _ _ +11 UM UM UM subst subst sg|gen|m3 sg|gen|m3 -1 9 _ adjunct _ _ +12 Danuty Danuta Danuta subst subst sg|gen|f sg|gen|f -1 9 _ app _ _ +13 Wiech Wiech Wiech subst subst sg|gen|f sg|gen|f -1 12 _ ne _ _ +14 . . . interp interp _ _ -1 0 _ pred _ _ + diff --git a/dependencyParser/experimental/mate-tools/.classpath b/dependencyParser/experimental/mate-tools/.classpath new file mode 100644 index 0000000..4d8fea6 --- /dev/null +++ b/dependencyParser/experimental/mate-tools/.classpath @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="UTF-8"?> +<classpath> + <classpathentry kind="src" path="src"/> + <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/> + <classpathentry kind="lib" path="lib/commons-math-2.2.jar"/> + <classpathentry kind="lib" path="/home/masterofu/workspace/mate-tools/lib/trove-2.0.4.jar"/> + <classpathentry kind="output" path="classes"/> +</classpath> diff --git a/dependencyParser/experimental/mate-tools/.externalToolBuilders/New_Builder.launch b/dependencyParser/experimental/mate-tools/.externalToolBuilders/New_Builder.launch new file mode 100644 index 0000000..eca73f7 --- /dev/null +++ b/dependencyParser/experimental/mate-tools/.externalToolBuilders/New_Builder.launch @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="UTF-8"?> +<launchConfiguration type="org.eclipse.ui.externaltools.ProgramBuilderLaunchConfigurationType"> +<booleanAttribute key="org.eclipse.debug.ui.ATTR_LAUNCH_IN_BACKGROUND" value="false"/> +<stringAttribute key="org.eclipse.ui.externaltools.ATTR_LOCATION" value="${workspace_loc:/mate-tools/.project}"/> +<stringAttribute key="org.eclipse.ui.externaltools.ATTR_RUN_BUILD_KINDS" value="full,incremental,"/> +<booleanAttribute key="org.eclipse.ui.externaltools.ATTR_TRIGGERS_CONFIGURED" value="true"/> +<stringAttribute key="org.eclipse.ui.externaltools.ATTR_WORKING_DIRECTORY" value="${workspace_loc:/mate-tools}"/> +</launchConfiguration> diff --git a/dependencyParser/experimental/mate-tools/.externalToolBuilders/ana.launch b/dependencyParser/experimental/mate-tools/.externalToolBuilders/ana.launch new file mode 100644 index 0000000..09df90d --- /dev/null +++ b/dependencyParser/experimental/mate-tools/.externalToolBuilders/ana.launch @@ -0,0 +1,20 @@ +<?xml version="1.0" encoding="UTF-8"?> +<launchConfiguration type="org.eclipse.ant.AntBuilderLaunchConfigurationType"> +<booleanAttribute key="org.eclipse.ant.ui.ATTR_TARGETS_UPDATED" value="true"/> +<booleanAttribute key="org.eclipse.ant.ui.DEFAULT_VM_INSTALL" value="false"/> +<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS"> +<listEntry value="/mate-tools/scripts/build.xml"/> +</listAttribute> +<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES"> +<listEntry value="1"/> +</listAttribute> +<booleanAttribute key="org.eclipse.debug.ui.ATTR_LAUNCH_IN_BACKGROUND" value="false"/> +<stringAttribute key="org.eclipse.jdt.launching.CLASSPATH_PROVIDER" value="org.eclipse.ant.ui.AntClasspathProvider"/> +<booleanAttribute key="org.eclipse.jdt.launching.DEFAULT_CLASSPATH" value="true"/> +<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="mate-tools"/> +<booleanAttribute key="org.eclipse.ui.externaltools.ATTR_BUILDER_ENABLED" value="false"/> +<stringAttribute key="org.eclipse.ui.externaltools.ATTR_LOCATION" value="${workspace_loc:/mate-tools/scripts/build.xml}"/> +<stringAttribute key="org.eclipse.ui.externaltools.ATTR_RUN_BUILD_KINDS" value="full,incremental,"/> +<booleanAttribute key="org.eclipse.ui.externaltools.ATTR_TRIGGERS_CONFIGURED" value="true"/> +<stringAttribute key="org.eclipse.ui.externaltools.ATTR_WORKING_DIRECTORY" value="${workspace_loc:/mate-tools}"/> +</launchConfiguration> diff --git a/dependencyParser/experimental/mate-tools/.project b/dependencyParser/experimental/mate-tools/.project new file mode 100644 index 0000000..f813b9e --- /dev/null +++ b/dependencyParser/experimental/mate-tools/.project @@ -0,0 +1,17 @@ +<?xml version="1.0" encoding="UTF-8"?> +<projectDescription> + <name>mate-tools</name> + <comment></comment> + <projects> + </projects> + <buildSpec> + <buildCommand> + <name>org.eclipse.jdt.core.javabuilder</name> + <arguments> + </arguments> + </buildCommand> + </buildSpec> + <natures> + <nature>org.eclipse.jdt.core.javanature</nature> + </natures> +</projectDescription> diff --git a/dependencyParser/experimental/mate-tools/build.xml b/dependencyParser/experimental/mate-tools/build.xml new file mode 100644 index 0000000..c558279 --- /dev/null +++ b/dependencyParser/experimental/mate-tools/build.xml @@ -0,0 +1,64 @@ +<project name="analyse" default="compile" basedir="."> + <description> + The base ant build file. + </description> + + <!-- set global properties for this build --> + <property name="src" location="src"/> + <property name="classes" location="classes"/> + <property name="dist" location="dist"/> + <property name="include" location="include"/> + + + <target name="init" description="Clears the /class directory"> + <!-- Create the time stamp --> + <tstamp/> + <mkdir dir="dist"/> + <mkdir dir="javadoc"/> + <mkdir dir="classes"/> + </target> + + <target name="compile" depends="init" description="Compile the source" > + <!-- Compile the java code from ${src} into ${build} executable="javac" --> + + <javac srcdir="${src}" + destdir="${classes}" + includeantruntime="false" + executable="javac.exe" + optimize="true" + debug="off" + classpath=""/> + + </target> + + <target name="build" description="Build the distribution .jar file" > + <!-- Create the temporary distribution directory --> + <delete includeEmptyDirs="true"><fileset dir="dist" includes="**/*" excludes="gtc*.jar"/></delete> + <mkdir dir="${dist}/temp-${DSTAMP}"/> + <copy todir="${dist}/temp-${DSTAMP}"><fileset dir="${classes}" /></copy> + <copy todir="${dist}/temp-${DSTAMP}"><fileset dir="${include}" /></copy> + <!-- copy everything from /include/others to dist + <copy todir="${dist}/temp-${DSTAMP}"><fileset dir="${include}/others" /></copy>--> + <!-- copy everything from /include/classes to dist + <copy todir="${dist}/temp-${DSTAMP}"><fileset dir="${include}/classes" /></copy>--> + <!-- pack everything into a .jar file --> + <jar jarfile="${dist}/anna-3.5.jar" + basedir="${dist}/temp-${DSTAMP}"/> + <delete dir="${dist}/temp-{DSTAMP}" /> + </target> + + <target name="javadoc" depends="init" description="Create the javadoc API documentation" > + <delete includeEmptyDirs="true"><fileset dir="javadoc" includes="**/*"/></delete> + <!-- TODO: you might add new packages to packagenames --> + <javadoc destdir="javadoc" access="package" source="1.4" + use="false" notree="false" nonavbar="false" noindex="true" + splitindex="false" author="true" version="true" + nodeprecatedlist="true" nodeprecated="false" + packagenames="gtc.*.*" + sourcepath="src" classpath="class"/> + </target> + + + <target name="all" depends="init,compile,javadoc" description="Make all" /> +</project> + diff --git a/dependencyParser/experimental/mate-tools/classes/decoder/ParallelDecoder$DSet.class b/dependencyParser/experimental/mate-tools/classes/decoder/ParallelDecoder$DSet.class new file mode 100644 index 0000000..afd509c Binary files /dev/null and b/dependencyParser/experimental/mate-tools/classes/decoder/ParallelDecoder$DSet.class differ diff --git a/dependencyParser/experimental/mate-tools/classes/decoder/ParallelDecoder.class b/dependencyParser/experimental/mate-tools/classes/decoder/ParallelDecoder.class new file mode 100644 index 0000000..238fd06 Binary files /dev/null and b/dependencyParser/experimental/mate-tools/classes/decoder/ParallelDecoder.class differ diff --git a/dependencyParser/experimental/mate-tools/classes/decoder/ParallelRearrangeNBest$PA.class b/dependencyParser/experimental/mate-tools/classes/decoder/ParallelRearrangeNBest$PA.class new file mode 100644 index 0000000..3edcd6b Binary files /dev/null and b/dependencyParser/experimental/mate-tools/classes/decoder/ParallelRearrangeNBest$PA.class differ diff --git a/dependencyParser/experimental/mate-tools/classes/decoder/ParallelRearrangeNBest.class b/dependencyParser/experimental/mate-tools/classes/decoder/ParallelRearrangeNBest.class new file mode 100644 index 0000000..c604932 Binary files /dev/null and b/dependencyParser/experimental/mate-tools/classes/decoder/ParallelRearrangeNBest.class differ diff --git a/dependencyParser/experimental/mate-tools/classes/decoder/ParallelRearrangeNBest2$PA.class b/dependencyParser/experimental/mate-tools/classes/decoder/ParallelRearrangeNBest2$PA.class new file mode 100644 index 0000000..f1639e7 Binary files /dev/null and b/dependencyParser/experimental/mate-tools/classes/decoder/ParallelRearrangeNBest2$PA.class differ diff --git a/dependencyParser/experimental/mate-tools/classes/decoder/ParallelRearrangeNBest2.class b/dependencyParser/experimental/mate-tools/classes/decoder/ParallelRearrangeNBest2.class new file mode 100644 index 0000000..80e8921 Binary files /dev/null and b/dependencyParser/experimental/mate-tools/classes/decoder/ParallelRearrangeNBest2.class differ diff --git a/dependencyParser/experimental/mate-tools/classes/examples/DependencyParser.class b/dependencyParser/experimental/mate-tools/classes/examples/DependencyParser.class new file mode 100644 index 0000000..89ed2d4 Binary files /dev/null and b/dependencyParser/experimental/mate-tools/classes/examples/DependencyParser.class differ diff --git a/dependencyParser/experimental/mate-tools/classes/examples/FullPipelineSpanish.class b/dependencyParser/experimental/mate-tools/classes/examples/FullPipelineSpanish.class new file mode 100644 index 0000000..256caa9 Binary files /dev/null and b/dependencyParser/experimental/mate-tools/classes/examples/FullPipelineSpanish.class differ diff --git a/dependencyParser/experimental/mate-tools/classes/examples/FullPipelineTest.class b/dependencyParser/experimental/mate-tools/classes/examples/FullPipelineTest.class new file mode 100644 index 0000000..d76a879 Binary files /dev/null and b/dependencyParser/experimental/mate-tools/classes/examples/FullPipelineTest.class differ diff --git a/dependencyParser/experimental/mate-tools/classes/examples/MorphTagger.class b/dependencyParser/experimental/mate-tools/classes/examples/MorphTagger.class new file mode 100644 index 0000000..305225c Binary files /dev/null and b/dependencyParser/experimental/mate-tools/classes/examples/MorphTagger.class differ diff --git a/dependencyParser/experimental/mate-tools/classes/examples/ParseOnly.class b/dependencyParser/experimental/mate-tools/classes/examples/ParseOnly.class new file mode 100644 index 0000000..73a8f49 Binary files /dev/null and b/dependencyParser/experimental/mate-tools/classes/examples/ParseOnly.class differ diff --git a/dependencyParser/experimental/mate-tools/classes/examples/Pipeline.class b/dependencyParser/experimental/mate-tools/classes/examples/Pipeline.class new file mode 100644 index 0000000..b8631e1 Binary files /dev/null and b/dependencyParser/experimental/mate-tools/classes/examples/Pipeline.class differ diff --git a/dependencyParser/experimental/mate-tools/classes/extractors/Extractor.class b/dependencyParser/experimental/mate-tools/classes/extractors/Extractor.class new file mode 100644 index 0000000..47ad699 Binary files /dev/null and b/dependencyParser/experimental/mate-tools/classes/extractors/Extractor.class differ diff --git a/dependencyParser/experimental/mate-tools/classes/extractors/ExtractorClusterStacked.class b/dependencyParser/experimental/mate-tools/classes/extractors/ExtractorClusterStacked.class new file mode 100644 index 0000000..d8cc567 Binary files /dev/null and b/dependencyParser/experimental/mate-tools/classes/extractors/ExtractorClusterStacked.class differ diff --git a/dependencyParser/experimental/mate-tools/classes/extractors/ExtractorClusterStackedR2.class b/dependencyParser/experimental/mate-tools/classes/extractors/ExtractorClusterStackedR2.class new file mode 100644 index 0000000..2c32133 Binary files /dev/null and b/dependencyParser/experimental/mate-tools/classes/extractors/ExtractorClusterStackedR2.class differ diff --git a/dependencyParser/experimental/mate-tools/classes/extractors/ExtractorFactory.class b/dependencyParser/experimental/mate-tools/classes/extractors/ExtractorFactory.class new file mode 100644 index 0000000..9f8fa84 Binary files /dev/null and b/dependencyParser/experimental/mate-tools/classes/extractors/ExtractorFactory.class differ diff --git a/dependencyParser/experimental/mate-tools/classes/extractors/ExtractorReranker.class b/dependencyParser/experimental/mate-tools/classes/extractors/ExtractorReranker.class new file mode 100644 index 0000000..6173744 Binary files /dev/null and b/dependencyParser/experimental/mate-tools/classes/extractors/ExtractorReranker.class differ diff --git a/dependencyParser/experimental/mate-tools/classes/extractors/ParallelExtract$DSet.class b/dependencyParser/experimental/mate-tools/classes/extractors/ParallelExtract$DSet.class new file mode 100644 index 0000000..f7ef6bf Binary files /dev/null and b/dependencyParser/experimental/mate-tools/classes/extractors/ParallelExtract$DSet.class differ diff --git a/dependencyParser/experimental/mate-tools/classes/extractors/ParallelExtract.class b/dependencyParser/experimental/mate-tools/classes/extractors/ParallelExtract.class new file mode 100644 index 0000000..1ef577d Binary files /dev/null and b/dependencyParser/experimental/mate-tools/classes/extractors/ParallelExtract.class differ diff --git a/dependencyParser/experimental/mate-tools/classes/is2/data/Closed.class b/dependencyParser/experimental/mate-tools/classes/is2/data/Closed.class new file mode 100644 index 0000000..e7abce7 Binary files /dev/null and b/dependencyParser/experimental/mate-tools/classes/is2/data/Closed.class differ diff --git a/dependencyParser/experimental/mate-tools/classes/is2/data/Cluster.class b/dependencyParser/experimental/mate-tools/classes/is2/data/Cluster.class new file mode 100644 index 0000000..330151f Binary files /dev/null and b/dependencyParser/experimental/mate-tools/classes/is2/data/Cluster.class differ diff --git a/dependencyParser/experimental/mate-tools/classes/is2/data/D4.class b/dependencyParser/experimental/mate-tools/classes/is2/data/D4.class new file mode 100644 index 0000000..544eae0 Binary files /dev/null and b/dependencyParser/experimental/mate-tools/classes/is2/data/D4.class differ diff --git a/dependencyParser/experimental/mate-tools/classes/is2/data/D6.class b/dependencyParser/experimental/mate-tools/classes/is2/data/D6.class new file mode 100644 index 0000000..274867a Binary files /dev/null and b/dependencyParser/experimental/mate-tools/classes/is2/data/D6.class differ diff --git a/dependencyParser/experimental/mate-tools/classes/is2/data/D7.class b/dependencyParser/experimental/mate-tools/classes/is2/data/D7.class new file mode 100644 index 0000000..4cf1121 Binary files /dev/null and b/dependencyParser/experimental/mate-tools/classes/is2/data/D7.class differ diff --git a/dependencyParser/experimental/mate-tools/classes/is2/data/DPSTree.class b/dependencyParser/experimental/mate-tools/classes/is2/data/DPSTree.class new file mode 100644 index 0000000..c3cf0a4 Binary files /dev/null and b/dependencyParser/experimental/mate-tools/classes/is2/data/DPSTree.class differ diff --git a/dependencyParser/experimental/mate-tools/classes/is2/data/DX.class b/dependencyParser/experimental/mate-tools/classes/is2/data/DX.class new file mode 100644 index 0000000..773f0d7 Binary files /dev/null and b/dependencyParser/experimental/mate-tools/classes/is2/data/DX.class differ diff --git a/dependencyParser/experimental/mate-tools/classes/is2/data/DataF.class b/dependencyParser/experimental/mate-tools/classes/is2/data/DataF.class new file mode 100644 index 0000000..eb52b0e Binary files /dev/null and b/dependencyParser/experimental/mate-tools/classes/is2/data/DataF.class differ diff --git a/dependencyParser/experimental/mate-tools/classes/is2/data/DataFES.class b/dependencyParser/experimental/mate-tools/classes/is2/data/DataFES.class new file mode 100644 index 0000000..c4c1f7d Binary files /dev/null and b/dependencyParser/experimental/mate-tools/classes/is2/data/DataFES.class differ diff --git a/dependencyParser/experimental/mate-tools/classes/is2/data/DataT.class b/dependencyParser/experimental/mate-tools/classes/is2/data/DataT.class new file mode 100644 index 0000000..5ed10d3 Binary files /dev/null and b/dependencyParser/experimental/mate-tools/classes/is2/data/DataT.class differ diff --git a/dependencyParser/experimental/mate-tools/classes/is2/data/Edges$C.class b/dependencyParser/experimental/mate-tools/classes/is2/data/Edges$C.class new file mode 100644 index 0000000..b57036e Binary files /dev/null and b/dependencyParser/experimental/mate-tools/classes/is2/data/Edges$C.class differ diff --git a/dependencyParser/experimental/mate-tools/classes/is2/data/Edges.class b/dependencyParser/experimental/mate-tools/classes/is2/data/Edges.class new file mode 100644 index 0000000..e293bbe Binary files /dev/null and b/dependencyParser/experimental/mate-tools/classes/is2/data/Edges.class differ diff --git a/dependencyParser/experimental/mate-tools/classes/is2/data/F2S.class b/dependencyParser/experimental/mate-tools/classes/is2/data/F2S.class new file mode 100644 index 0000000..1c9ed89 Binary files /dev/null and b/dependencyParser/experimental/mate-tools/classes/is2/data/F2S.class differ diff --git a/dependencyParser/experimental/mate-tools/classes/is2/data/F2SD.class b/dependencyParser/experimental/mate-tools/classes/is2/data/F2SD.class new file mode 100644 index 0000000..a2b7a83 Binary files /dev/null and b/dependencyParser/experimental/mate-tools/classes/is2/data/F2SD.class differ diff --git a/dependencyParser/experimental/mate-tools/classes/is2/data/F2SF.class b/dependencyParser/experimental/mate-tools/classes/is2/data/F2SF.class new file mode 100644 index 0000000..f782eef Binary files /dev/null and b/dependencyParser/experimental/mate-tools/classes/is2/data/F2SF.class differ diff --git a/dependencyParser/experimental/mate-tools/classes/is2/data/F2SP.class b/dependencyParser/experimental/mate-tools/classes/is2/data/F2SP.class new file mode 100644 index 0000000..34b66e0 Binary files /dev/null and b/dependencyParser/experimental/mate-tools/classes/is2/data/F2SP.class differ diff --git a/dependencyParser/experimental/mate-tools/classes/is2/data/F2ST.class b/dependencyParser/experimental/mate-tools/classes/is2/data/F2ST.class new file mode 100644 index 0000000..a88c6a6 Binary files /dev/null and b/dependencyParser/experimental/mate-tools/classes/is2/data/F2ST.class differ diff --git a/dependencyParser/experimental/mate-tools/classes/is2/data/FV.class b/dependencyParser/experimental/mate-tools/classes/is2/data/FV.class new file mode 100644 index 0000000..b4c89d2 Binary files /dev/null and b/dependencyParser/experimental/mate-tools/classes/is2/data/FV.class differ diff --git a/dependencyParser/experimental/mate-tools/classes/is2/data/FVR.class b/dependencyParser/experimental/mate-tools/classes/is2/data/FVR.class new file mode 100644 index 0000000..9d75826 Binary files /dev/null and b/dependencyParser/experimental/mate-tools/classes/is2/data/FVR.class differ diff --git a/dependencyParser/experimental/mate-tools/classes/is2/data/IEncoder.class b/dependencyParser/experimental/mate-tools/classes/is2/data/IEncoder.class new file mode 100644 index 0000000..48b863c Binary files /dev/null and b/dependencyParser/experimental/mate-tools/classes/is2/data/IEncoder.class differ diff --git a/dependencyParser/experimental/mate-tools/classes/is2/data/IEncoderPlus.class b/dependencyParser/experimental/mate-tools/classes/is2/data/IEncoderPlus.class new file mode 100644 index 0000000..4ea4883 Binary files /dev/null and b/dependencyParser/experimental/mate-tools/classes/is2/data/IEncoderPlus.class differ diff --git a/dependencyParser/experimental/mate-tools/classes/is2/data/IFV.class b/dependencyParser/experimental/mate-tools/classes/is2/data/IFV.class new file mode 100644 index 0000000..652636d Binary files /dev/null and b/dependencyParser/experimental/mate-tools/classes/is2/data/IFV.class differ diff --git a/dependencyParser/experimental/mate-tools/classes/is2/data/Instances.class b/dependencyParser/experimental/mate-tools/classes/is2/data/Instances.class new file mode 100644 index 0000000..014416a Binary files /dev/null and b/dependencyParser/experimental/mate-tools/classes/is2/data/Instances.class differ diff --git a/dependencyParser/experimental/mate-tools/classes/is2/data/InstancesTagger.class b/dependencyParser/experimental/mate-tools/classes/is2/data/InstancesTagger.class new file mode 100644 index 0000000..dc155f8 Binary files /dev/null and b/dependencyParser/experimental/mate-tools/classes/is2/data/InstancesTagger.class differ diff --git a/dependencyParser/experimental/mate-tools/classes/is2/data/IntIntHash.class b/dependencyParser/experimental/mate-tools/classes/is2/data/IntIntHash.class new file mode 100644 index 0000000..246e0c9 Binary files /dev/null and b/dependencyParser/experimental/mate-tools/classes/is2/data/IntIntHash.class differ diff --git a/dependencyParser/experimental/mate-tools/classes/is2/data/Long2Int.class b/dependencyParser/experimental/mate-tools/classes/is2/data/Long2Int.class new file mode 100644 index 0000000..c11b75c Binary files /dev/null and b/dependencyParser/experimental/mate-tools/classes/is2/data/Long2Int.class differ diff --git a/dependencyParser/experimental/mate-tools/classes/is2/data/Long2IntExact.class b/dependencyParser/experimental/mate-tools/classes/is2/data/Long2IntExact.class new file mode 100644 index 0000000..830c90c Binary files /dev/null and b/dependencyParser/experimental/mate-tools/classes/is2/data/Long2IntExact.class differ diff --git a/dependencyParser/experimental/mate-tools/classes/is2/data/Long2IntInterface.class b/dependencyParser/experimental/mate-tools/classes/is2/data/Long2IntInterface.class new file mode 100644 index 0000000..af26b65 Binary files /dev/null and b/dependencyParser/experimental/mate-tools/classes/is2/data/Long2IntInterface.class differ diff --git a/dependencyParser/experimental/mate-tools/classes/is2/data/Long2IntQuick.class b/dependencyParser/experimental/mate-tools/classes/is2/data/Long2IntQuick.class new file mode 100644 index 0000000..054e0e2 Binary files /dev/null and b/dependencyParser/experimental/mate-tools/classes/is2/data/Long2IntQuick.class differ diff --git a/dependencyParser/experimental/mate-tools/classes/is2/data/MFB.class b/dependencyParser/experimental/mate-tools/classes/is2/data/MFB.class new file mode 100644 index 0000000..58aa597 Binary files /dev/null and b/dependencyParser/experimental/mate-tools/classes/is2/data/MFB.class differ diff --git a/dependencyParser/experimental/mate-tools/classes/is2/data/MFC.class b/dependencyParser/experimental/mate-tools/classes/is2/data/MFC.class new file mode 100644 index 0000000..fa3e098 Binary files /dev/null and b/dependencyParser/experimental/mate-tools/classes/is2/data/MFC.class differ diff --git a/dependencyParser/experimental/mate-tools/classes/is2/data/MFO$Data4.class b/dependencyParser/experimental/mate-tools/classes/is2/data/MFO$Data4.class new file mode 100644 index 0000000..dbc74bd Binary files /dev/null and b/dependencyParser/experimental/mate-tools/classes/is2/data/MFO$Data4.class differ diff --git a/dependencyParser/experimental/mate-tools/classes/is2/data/MFO.class b/dependencyParser/experimental/mate-tools/classes/is2/data/MFO.class new file mode 100644 index 0000000..1125008 Binary files /dev/null and b/dependencyParser/experimental/mate-tools/classes/is2/data/MFO.class differ diff --git a/dependencyParser/experimental/mate-tools/classes/is2/data/Open.class b/dependencyParser/experimental/mate-tools/classes/is2/data/Open.class new file mode 100644 index 0000000..a34e40f Binary files /dev/null and b/dependencyParser/experimental/mate-tools/classes/is2/data/Open.class differ diff --git a/dependencyParser/experimental/mate-tools/classes/is2/data/PSTree.class b/dependencyParser/experimental/mate-tools/classes/is2/data/PSTree.class new file mode 100644 index 0000000..3b68f29 Binary files /dev/null and b/dependencyParser/experimental/mate-tools/classes/is2/data/PSTree.class differ diff --git a/dependencyParser/experimental/mate-tools/classes/is2/data/Parameter.class b/dependencyParser/experimental/mate-tools/classes/is2/data/Parameter.class new file mode 100644 index 0000000..f9a70aa Binary files /dev/null and b/dependencyParser/experimental/mate-tools/classes/is2/data/Parameter.class differ diff --git a/dependencyParser/experimental/mate-tools/classes/is2/data/ParametersFloat.class b/dependencyParser/experimental/mate-tools/classes/is2/data/ParametersFloat.class new file mode 100644 index 0000000..53c3f0a Binary files /dev/null and b/dependencyParser/experimental/mate-tools/classes/is2/data/ParametersFloat.class differ diff --git a/dependencyParser/experimental/mate-tools/classes/is2/data/Parse.class b/dependencyParser/experimental/mate-tools/classes/is2/data/Parse.class new file mode 100644 index 0000000..bfec325 Binary files /dev/null and b/dependencyParser/experimental/mate-tools/classes/is2/data/Parse.class differ diff --git a/dependencyParser/experimental/mate-tools/classes/is2/data/ParseNBest.class b/dependencyParser/experimental/mate-tools/classes/is2/data/ParseNBest.class new file mode 100644 index 0000000..180e58c Binary files /dev/null and b/dependencyParser/experimental/mate-tools/classes/is2/data/ParseNBest.class differ diff --git a/dependencyParser/experimental/mate-tools/classes/is2/data/PipeGen.class b/dependencyParser/experimental/mate-tools/classes/is2/data/PipeGen.class new file mode 100644 index 0000000..d3400c4 Binary files /dev/null and b/dependencyParser/experimental/mate-tools/classes/is2/data/PipeGen.class differ diff --git a/dependencyParser/experimental/mate-tools/classes/is2/data/PrimeFinder.class b/dependencyParser/experimental/mate-tools/classes/is2/data/PrimeFinder.class new file mode 100644 index 0000000..ec51f13 Binary files /dev/null and b/dependencyParser/experimental/mate-tools/classes/is2/data/PrimeFinder.class differ diff --git a/dependencyParser/experimental/mate-tools/classes/is2/data/RandomIndex.class b/dependencyParser/experimental/mate-tools/classes/is2/data/RandomIndex.class new file mode 100644 index 0000000..954f57c Binary files /dev/null and b/dependencyParser/experimental/mate-tools/classes/is2/data/RandomIndex.class differ diff --git a/dependencyParser/experimental/mate-tools/classes/is2/data/SentenceData09.class b/dependencyParser/experimental/mate-tools/classes/is2/data/SentenceData09.class new file mode 100644 index 0000000..ee6d068 Binary files /dev/null and b/dependencyParser/experimental/mate-tools/classes/is2/data/SentenceData09.class differ diff --git a/dependencyParser/experimental/mate-tools/classes/is2/data/Thesaurus.class b/dependencyParser/experimental/mate-tools/classes/is2/data/Thesaurus.class new file mode 100644 index 0000000..a7d20d4 Binary files /dev/null and b/dependencyParser/experimental/mate-tools/classes/is2/data/Thesaurus.class differ diff --git a/dependencyParser/experimental/mate-tools/classes/is2/io/CONLLReader04.class b/dependencyParser/experimental/mate-tools/classes/is2/io/CONLLReader04.class new file mode 100644 index 0000000..3d0103f Binary files /dev/null and b/dependencyParser/experimental/mate-tools/classes/is2/io/CONLLReader04.class differ diff --git a/dependencyParser/experimental/mate-tools/classes/is2/io/CONLLReader06.class b/dependencyParser/experimental/mate-tools/classes/is2/io/CONLLReader06.class new file mode 100644 index 0000000..06f8226 Binary files /dev/null and b/dependencyParser/experimental/mate-tools/classes/is2/io/CONLLReader06.class differ diff --git a/dependencyParser/experimental/mate-tools/classes/is2/io/CONLLReader08.class b/dependencyParser/experimental/mate-tools/classes/is2/io/CONLLReader08.class new file mode 100644 index 0000000..b1c4919 Binary files /dev/null and b/dependencyParser/experimental/mate-tools/classes/is2/io/CONLLReader08.class differ diff --git a/dependencyParser/experimental/mate-tools/classes/is2/io/CONLLReader09.class b/dependencyParser/experimental/mate-tools/classes/is2/io/CONLLReader09.class new file mode 100644 index 0000000..98cbf01 Binary files /dev/null and b/dependencyParser/experimental/mate-tools/classes/is2/io/CONLLReader09.class differ diff --git a/dependencyParser/experimental/mate-tools/classes/is2/io/CONLLWriter06.class b/dependencyParser/experimental/mate-tools/classes/is2/io/CONLLWriter06.class new file mode 100644 index 0000000..e1cdf31 Binary files /dev/null and b/dependencyParser/experimental/mate-tools/classes/is2/io/CONLLWriter06.class differ diff --git a/dependencyParser/experimental/mate-tools/classes/is2/io/CONLLWriter09.class b/dependencyParser/experimental/mate-tools/classes/is2/io/CONLLWriter09.class new file mode 100644 index 0000000..2697f96 Binary files /dev/null and b/dependencyParser/experimental/mate-tools/classes/is2/io/CONLLWriter09.class differ diff --git a/dependencyParser/experimental/mate-tools/classes/is2/io/IOGenerals.class b/dependencyParser/experimental/mate-tools/classes/is2/io/IOGenerals.class new file mode 100644 index 0000000..5346483 Binary files /dev/null and b/dependencyParser/experimental/mate-tools/classes/is2/io/IOGenerals.class differ diff --git a/dependencyParser/experimental/mate-tools/classes/is2/io/PSReader.class b/dependencyParser/experimental/mate-tools/classes/is2/io/PSReader.class new file mode 100644 index 0000000..d197ad7 Binary files /dev/null and b/dependencyParser/experimental/mate-tools/classes/is2/io/PSReader.class differ diff --git a/dependencyParser/experimental/mate-tools/classes/is2/io/TigerReader$Line.class b/dependencyParser/experimental/mate-tools/classes/is2/io/TigerReader$Line.class new file mode 100644 index 0000000..7c14ffa Binary files /dev/null and b/dependencyParser/experimental/mate-tools/classes/is2/io/TigerReader$Line.class differ diff --git a/dependencyParser/experimental/mate-tools/classes/is2/io/TigerReader.class b/dependencyParser/experimental/mate-tools/classes/is2/io/TigerReader.class new file mode 100644 index 0000000..eb6aa37 Binary files /dev/null and b/dependencyParser/experimental/mate-tools/classes/is2/io/TigerReader.class differ diff --git a/dependencyParser/experimental/mate-tools/classes/is2/lemmatizer/Evaluator$1.class b/dependencyParser/experimental/mate-tools/classes/is2/lemmatizer/Evaluator$1.class new file mode 100644 index 0000000..e015840 Binary files /dev/null and b/dependencyParser/experimental/mate-tools/classes/is2/lemmatizer/Evaluator$1.class differ diff --git a/dependencyParser/experimental/mate-tools/classes/is2/lemmatizer/Evaluator.class b/dependencyParser/experimental/mate-tools/classes/is2/lemmatizer/Evaluator.class new file mode 100644 index 0000000..53e79f4 Binary files /dev/null and b/dependencyParser/experimental/mate-tools/classes/is2/lemmatizer/Evaluator.class differ diff --git a/dependencyParser/experimental/mate-tools/classes/is2/lemmatizer/Lemmatizer$1.class b/dependencyParser/experimental/mate-tools/classes/is2/lemmatizer/Lemmatizer$1.class new file mode 100644 index 0000000..fce30de Binary files /dev/null and b/dependencyParser/experimental/mate-tools/classes/is2/lemmatizer/Lemmatizer$1.class differ diff --git a/dependencyParser/experimental/mate-tools/classes/is2/lemmatizer/Lemmatizer.class b/dependencyParser/experimental/mate-tools/classes/is2/lemmatizer/Lemmatizer.class new file mode 100644 index 0000000..b6d3745 Binary files /dev/null and b/dependencyParser/experimental/mate-tools/classes/is2/lemmatizer/Lemmatizer.class differ diff --git a/dependencyParser/experimental/mate-tools/classes/is2/lemmatizer/MFO.class b/dependencyParser/experimental/mate-tools/classes/is2/lemmatizer/MFO.class new file mode 100644 index 0000000..651e2ae Binary files /dev/null and b/dependencyParser/experimental/mate-tools/classes/is2/lemmatizer/MFO.class differ diff --git a/dependencyParser/experimental/mate-tools/classes/is2/lemmatizer/Options.class b/dependencyParser/experimental/mate-tools/classes/is2/lemmatizer/Options.class new file mode 100644 index 0000000..cbe3419 Binary files /dev/null and b/dependencyParser/experimental/mate-tools/classes/is2/lemmatizer/Options.class differ diff --git a/dependencyParser/experimental/mate-tools/classes/is2/lemmatizer/Pipe$1.class b/dependencyParser/experimental/mate-tools/classes/is2/lemmatizer/Pipe$1.class new file mode 100644 index 0000000..b445f21 Binary files /dev/null and b/dependencyParser/experimental/mate-tools/classes/is2/lemmatizer/Pipe$1.class differ diff --git a/dependencyParser/experimental/mate-tools/classes/is2/lemmatizer/Pipe.class b/dependencyParser/experimental/mate-tools/classes/is2/lemmatizer/Pipe.class new file mode 100644 index 0000000..af22121 Binary files /dev/null and b/dependencyParser/experimental/mate-tools/classes/is2/lemmatizer/Pipe.class differ diff --git a/dependencyParser/experimental/mate-tools/classes/is2/lemmatizer/StringEdit.class b/dependencyParser/experimental/mate-tools/classes/is2/lemmatizer/StringEdit.class new file mode 100644 index 0000000..22ddb78 Binary files /dev/null and b/dependencyParser/experimental/mate-tools/classes/is2/lemmatizer/StringEdit.class differ diff --git a/dependencyParser/experimental/mate-tools/classes/is2/mtag/Convert.class b/dependencyParser/experimental/mate-tools/classes/is2/mtag/Convert.class new file mode 100644 index 0000000..6814212 Binary files /dev/null and b/dependencyParser/experimental/mate-tools/classes/is2/mtag/Convert.class differ diff --git a/dependencyParser/experimental/mate-tools/classes/is2/mtag/Evaluator$1.class b/dependencyParser/experimental/mate-tools/classes/is2/mtag/Evaluator$1.class new file mode 100644 index 0000000..9ad12ae Binary files /dev/null and b/dependencyParser/experimental/mate-tools/classes/is2/mtag/Evaluator$1.class differ diff --git a/dependencyParser/experimental/mate-tools/classes/is2/mtag/Evaluator.class b/dependencyParser/experimental/mate-tools/classes/is2/mtag/Evaluator.class new file mode 100644 index 0000000..5f05944 Binary files /dev/null and b/dependencyParser/experimental/mate-tools/classes/is2/mtag/Evaluator.class differ diff --git a/dependencyParser/experimental/mate-tools/classes/is2/mtag/ExtractorM.class b/dependencyParser/experimental/mate-tools/classes/is2/mtag/ExtractorM.class new file mode 100644 index 0000000..1dfb207 Binary files /dev/null and b/dependencyParser/experimental/mate-tools/classes/is2/mtag/ExtractorM.class differ diff --git a/dependencyParser/experimental/mate-tools/classes/is2/mtag/MFO$Data.class b/dependencyParser/experimental/mate-tools/classes/is2/mtag/MFO$Data.class new file mode 100644 index 0000000..fb46d59 Binary files /dev/null and b/dependencyParser/experimental/mate-tools/classes/is2/mtag/MFO$Data.class differ diff --git a/dependencyParser/experimental/mate-tools/classes/is2/mtag/MFO$Data4.class b/dependencyParser/experimental/mate-tools/classes/is2/mtag/MFO$Data4.class new file mode 100644 index 0000000..a3346d7 Binary files /dev/null and b/dependencyParser/experimental/mate-tools/classes/is2/mtag/MFO$Data4.class differ diff --git a/dependencyParser/experimental/mate-tools/classes/is2/mtag/MFO.class b/dependencyParser/experimental/mate-tools/classes/is2/mtag/MFO.class new file mode 100644 index 0000000..5014e54 Binary files /dev/null and b/dependencyParser/experimental/mate-tools/classes/is2/mtag/MFO.class differ diff --git a/dependencyParser/experimental/mate-tools/classes/is2/mtag/Options.class b/dependencyParser/experimental/mate-tools/classes/is2/mtag/Options.class new file mode 100644 index 0000000..a1ffdcb Binary files /dev/null and b/dependencyParser/experimental/mate-tools/classes/is2/mtag/Options.class differ diff --git a/dependencyParser/experimental/mate-tools/classes/is2/mtag/Pipe.class b/dependencyParser/experimental/mate-tools/classes/is2/mtag/Pipe.class new file mode 100644 index 0000000..4d3ae21 Binary files /dev/null and b/dependencyParser/experimental/mate-tools/classes/is2/mtag/Pipe.class differ diff --git a/dependencyParser/experimental/mate-tools/classes/is2/mtag/Tagger.class b/dependencyParser/experimental/mate-tools/classes/is2/mtag/Tagger.class new file mode 100644 index 0000000..37af1ef Binary files /dev/null and b/dependencyParser/experimental/mate-tools/classes/is2/mtag/Tagger.class differ diff --git a/dependencyParser/experimental/mate-tools/classes/is2/parser/Closed.class b/dependencyParser/experimental/mate-tools/classes/is2/parser/Closed.class new file mode 100644 index 0000000..7e6161a Binary files /dev/null and b/dependencyParser/experimental/mate-tools/classes/is2/parser/Closed.class differ diff --git a/dependencyParser/experimental/mate-tools/classes/is2/parser/D5.class b/dependencyParser/experimental/mate-tools/classes/is2/parser/D5.class new file mode 100644 index 0000000..11da4cc Binary files /dev/null and b/dependencyParser/experimental/mate-tools/classes/is2/parser/D5.class differ diff --git a/dependencyParser/experimental/mate-tools/classes/is2/parser/Decoder.class b/dependencyParser/experimental/mate-tools/classes/is2/parser/Decoder.class new file mode 100644 index 0000000..35fbe20 Binary files /dev/null and b/dependencyParser/experimental/mate-tools/classes/is2/parser/Decoder.class differ diff --git a/dependencyParser/experimental/mate-tools/classes/is2/parser/Edges$C.class b/dependencyParser/experimental/mate-tools/classes/is2/parser/Edges$C.class new file mode 100644 index 0000000..bcbfa2e Binary files /dev/null and b/dependencyParser/experimental/mate-tools/classes/is2/parser/Edges$C.class differ diff --git a/dependencyParser/experimental/mate-tools/classes/is2/parser/Edges.class b/dependencyParser/experimental/mate-tools/classes/is2/parser/Edges.class new file mode 100644 index 0000000..62f892e Binary files /dev/null and b/dependencyParser/experimental/mate-tools/classes/is2/parser/Edges.class differ diff --git a/dependencyParser/experimental/mate-tools/classes/is2/parser/Evaluator$Results.class b/dependencyParser/experimental/mate-tools/classes/is2/parser/Evaluator$Results.class new file mode 100644 index 0000000..52913a2 Binary files /dev/null and b/dependencyParser/experimental/mate-tools/classes/is2/parser/Evaluator$Results.class differ diff --git a/dependencyParser/experimental/mate-tools/classes/is2/parser/Evaluator.class b/dependencyParser/experimental/mate-tools/classes/is2/parser/Evaluator.class new file mode 100644 index 0000000..cd8680f Binary files /dev/null and b/dependencyParser/experimental/mate-tools/classes/is2/parser/Evaluator.class differ diff --git a/dependencyParser/experimental/mate-tools/classes/is2/parser/Extractor.class b/dependencyParser/experimental/mate-tools/classes/is2/parser/Extractor.class new file mode 100644 index 0000000..cb576f0 Binary files /dev/null and b/dependencyParser/experimental/mate-tools/classes/is2/parser/Extractor.class differ diff --git a/dependencyParser/experimental/mate-tools/classes/is2/parser/MFO.class b/dependencyParser/experimental/mate-tools/classes/is2/parser/MFO.class new file mode 100644 index 0000000..e2f5d9f Binary files /dev/null and b/dependencyParser/experimental/mate-tools/classes/is2/parser/MFO.class differ diff --git a/dependencyParser/experimental/mate-tools/classes/is2/parser/Open.class b/dependencyParser/experimental/mate-tools/classes/is2/parser/Open.class new file mode 100644 index 0000000..8d4ef9b Binary files /dev/null and b/dependencyParser/experimental/mate-tools/classes/is2/parser/Open.class differ diff --git a/dependencyParser/experimental/mate-tools/classes/is2/parser/Options.class b/dependencyParser/experimental/mate-tools/classes/is2/parser/Options.class new file mode 100644 index 0000000..806b3d0 Binary files /dev/null and b/dependencyParser/experimental/mate-tools/classes/is2/parser/Options.class differ diff --git a/dependencyParser/experimental/mate-tools/classes/is2/parser/ParallelDecoder$DSet.class b/dependencyParser/experimental/mate-tools/classes/is2/parser/ParallelDecoder$DSet.class new file mode 100644 index 0000000..534b87c Binary files /dev/null and b/dependencyParser/experimental/mate-tools/classes/is2/parser/ParallelDecoder$DSet.class differ diff --git a/dependencyParser/experimental/mate-tools/classes/is2/parser/ParallelDecoder.class b/dependencyParser/experimental/mate-tools/classes/is2/parser/ParallelDecoder.class new file mode 100644 index 0000000..dd112d0 Binary files /dev/null and b/dependencyParser/experimental/mate-tools/classes/is2/parser/ParallelDecoder.class differ diff --git a/dependencyParser/experimental/mate-tools/classes/is2/parser/ParallelExtract$DSet.class b/dependencyParser/experimental/mate-tools/classes/is2/parser/ParallelExtract$DSet.class new file mode 100644 index 0000000..823130d Binary files /dev/null and b/dependencyParser/experimental/mate-tools/classes/is2/parser/ParallelExtract$DSet.class differ diff --git a/dependencyParser/experimental/mate-tools/classes/is2/parser/ParallelExtract.class b/dependencyParser/experimental/mate-tools/classes/is2/parser/ParallelExtract.class new file mode 100644 index 0000000..7dfe35c Binary files /dev/null and b/dependencyParser/experimental/mate-tools/classes/is2/parser/ParallelExtract.class differ diff --git a/dependencyParser/experimental/mate-tools/classes/is2/parser/ParallelRearrange$PA.class b/dependencyParser/experimental/mate-tools/classes/is2/parser/ParallelRearrange$PA.class new file mode 100644 index 0000000..d1b8bfe Binary files /dev/null and b/dependencyParser/experimental/mate-tools/classes/is2/parser/ParallelRearrange$PA.class differ diff --git a/dependencyParser/experimental/mate-tools/classes/is2/parser/ParallelRearrange.class b/dependencyParser/experimental/mate-tools/classes/is2/parser/ParallelRearrange.class new file mode 100644 index 0000000..fcfed43 Binary files /dev/null and b/dependencyParser/experimental/mate-tools/classes/is2/parser/ParallelRearrange.class differ diff --git a/dependencyParser/experimental/mate-tools/classes/is2/parser/Parameters.class b/dependencyParser/experimental/mate-tools/classes/is2/parser/Parameters.class new file mode 100644 index 0000000..bc64375 Binary files /dev/null and b/dependencyParser/experimental/mate-tools/classes/is2/parser/Parameters.class differ diff --git a/dependencyParser/experimental/mate-tools/classes/is2/parser/ParametersFloat.class b/dependencyParser/experimental/mate-tools/classes/is2/parser/ParametersFloat.class new file mode 100644 index 0000000..524da17 Binary files /dev/null and b/dependencyParser/experimental/mate-tools/classes/is2/parser/ParametersFloat.class differ diff --git a/dependencyParser/experimental/mate-tools/classes/is2/parser/Parser.class b/dependencyParser/experimental/mate-tools/classes/is2/parser/Parser.class new file mode 100644 index 0000000..575c9da Binary files /dev/null and b/dependencyParser/experimental/mate-tools/classes/is2/parser/Parser.class differ diff --git a/dependencyParser/experimental/mate-tools/classes/is2/parser/Pipe.class b/dependencyParser/experimental/mate-tools/classes/is2/parser/Pipe.class new file mode 100644 index 0000000..ea909ad Binary files /dev/null and b/dependencyParser/experimental/mate-tools/classes/is2/parser/Pipe.class differ diff --git a/dependencyParser/experimental/mate-tools/classes/is2/parser/package.html b/dependencyParser/experimental/mate-tools/classes/is2/parser/package.html new file mode 100755 index 0000000..a4f40a2 --- /dev/null +++ b/dependencyParser/experimental/mate-tools/classes/is2/parser/package.html @@ -0,0 +1,11 @@ +Package info +<ul> + <li> separate cluster feature to keep speed since two many features in a function reduce speed drastically. </li> + <li> try second order stacking features </li> + <li> parser stacking features </li> + <li> lots of cluster features </li> + <li> Iteration over edges and not extraction of all edges each time </li> + <li> integrated new structurer writer </li> +</ul> + Change in FS, I observed lots of duplicated grand-children features +<br> \ No newline at end of file diff --git a/dependencyParser/experimental/mate-tools/classes/is2/parserR2/Decoder.class b/dependencyParser/experimental/mate-tools/classes/is2/parserR2/Decoder.class new file mode 100644 index 0000000..fd23b35 Binary files /dev/null and b/dependencyParser/experimental/mate-tools/classes/is2/parserR2/Decoder.class differ diff --git a/dependencyParser/experimental/mate-tools/classes/is2/parserR2/Options.class b/dependencyParser/experimental/mate-tools/classes/is2/parserR2/Options.class new file mode 100644 index 0000000..c36af6b Binary files /dev/null and b/dependencyParser/experimental/mate-tools/classes/is2/parserR2/Options.class differ diff --git a/dependencyParser/experimental/mate-tools/classes/is2/parserR2/Parameters.class b/dependencyParser/experimental/mate-tools/classes/is2/parserR2/Parameters.class new file mode 100644 index 0000000..3ff4ebe Binary files /dev/null and b/dependencyParser/experimental/mate-tools/classes/is2/parserR2/Parameters.class differ diff --git a/dependencyParser/experimental/mate-tools/classes/is2/parserR2/ParametersFloat.class b/dependencyParser/experimental/mate-tools/classes/is2/parserR2/ParametersFloat.class new file mode 100644 index 0000000..3837dc0 Binary files /dev/null and b/dependencyParser/experimental/mate-tools/classes/is2/parserR2/ParametersFloat.class differ diff --git a/dependencyParser/experimental/mate-tools/classes/is2/parserR2/Parser.class b/dependencyParser/experimental/mate-tools/classes/is2/parserR2/Parser.class new file mode 100644 index 0000000..2b1b742 Binary files /dev/null and b/dependencyParser/experimental/mate-tools/classes/is2/parserR2/Parser.class differ diff --git a/dependencyParser/experimental/mate-tools/classes/is2/parserR2/Pipe.class b/dependencyParser/experimental/mate-tools/classes/is2/parserR2/Pipe.class new file mode 100644 index 0000000..7067c95 Binary files /dev/null and b/dependencyParser/experimental/mate-tools/classes/is2/parserR2/Pipe.class differ diff --git a/dependencyParser/experimental/mate-tools/classes/is2/parserR2/PipeReranker.class b/dependencyParser/experimental/mate-tools/classes/is2/parserR2/PipeReranker.class new file mode 100644 index 0000000..fc6cb91 Binary files /dev/null and b/dependencyParser/experimental/mate-tools/classes/is2/parserR2/PipeReranker.class differ diff --git a/dependencyParser/experimental/mate-tools/classes/is2/parserR2/Reranker.class b/dependencyParser/experimental/mate-tools/classes/is2/parserR2/Reranker.class new file mode 100644 index 0000000..5177b92 Binary files /dev/null and b/dependencyParser/experimental/mate-tools/classes/is2/parserR2/Reranker.class differ diff --git a/dependencyParser/experimental/mate-tools/classes/is2/parserR2/package.html b/dependencyParser/experimental/mate-tools/classes/is2/parserR2/package.html new file mode 100755 index 0000000..6b06482 --- /dev/null +++ b/dependencyParser/experimental/mate-tools/classes/is2/parserR2/package.html @@ -0,0 +1,3 @@ +Package info + - n-best parser +<br> \ No newline at end of file diff --git a/dependencyParser/experimental/mate-tools/classes/is2/tag/ExtractorT2.class b/dependencyParser/experimental/mate-tools/classes/is2/tag/ExtractorT2.class new file mode 100644 index 0000000..44dba9e Binary files /dev/null and b/dependencyParser/experimental/mate-tools/classes/is2/tag/ExtractorT2.class differ diff --git a/dependencyParser/experimental/mate-tools/classes/is2/tag/Lexicon.class b/dependencyParser/experimental/mate-tools/classes/is2/tag/Lexicon.class new file mode 100644 index 0000000..1ea1e85 Binary files /dev/null and b/dependencyParser/experimental/mate-tools/classes/is2/tag/Lexicon.class differ diff --git a/dependencyParser/experimental/mate-tools/classes/is2/tag/MFO$Data4.class b/dependencyParser/experimental/mate-tools/classes/is2/tag/MFO$Data4.class new file mode 100644 index 0000000..3627f10 Binary files /dev/null and b/dependencyParser/experimental/mate-tools/classes/is2/tag/MFO$Data4.class differ diff --git a/dependencyParser/experimental/mate-tools/classes/is2/tag/MFO.class b/dependencyParser/experimental/mate-tools/classes/is2/tag/MFO.class new file mode 100644 index 0000000..10ea428 Binary files /dev/null and b/dependencyParser/experimental/mate-tools/classes/is2/tag/MFO.class differ diff --git a/dependencyParser/experimental/mate-tools/classes/is2/tag/Options.class b/dependencyParser/experimental/mate-tools/classes/is2/tag/Options.class new file mode 100644 index 0000000..e6ec2c0 Binary files /dev/null and b/dependencyParser/experimental/mate-tools/classes/is2/tag/Options.class differ diff --git a/dependencyParser/experimental/mate-tools/classes/is2/tag/POS.class b/dependencyParser/experimental/mate-tools/classes/is2/tag/POS.class new file mode 100644 index 0000000..8ea2052 Binary files /dev/null and b/dependencyParser/experimental/mate-tools/classes/is2/tag/POS.class differ diff --git a/dependencyParser/experimental/mate-tools/classes/is2/tag/Tagger.class b/dependencyParser/experimental/mate-tools/classes/is2/tag/Tagger.class new file mode 100644 index 0000000..11ac1aa Binary files /dev/null and b/dependencyParser/experimental/mate-tools/classes/is2/tag/Tagger.class differ diff --git a/dependencyParser/experimental/mate-tools/classes/is2/tag/package.html b/dependencyParser/experimental/mate-tools/classes/is2/tag/package.html new file mode 100644 index 0000000..469fdf6 --- /dev/null +++ b/dependencyParser/experimental/mate-tools/classes/is2/tag/package.html @@ -0,0 +1,4 @@ +Package info +<br><br> +This parser includes a tagger into the dependency parser +<br> \ No newline at end of file diff --git a/dependencyParser/experimental/mate-tools/classes/is2/tools/IPipe.class b/dependencyParser/experimental/mate-tools/classes/is2/tools/IPipe.class new file mode 100644 index 0000000..37a51d1 Binary files /dev/null and b/dependencyParser/experimental/mate-tools/classes/is2/tools/IPipe.class differ diff --git a/dependencyParser/experimental/mate-tools/classes/is2/tools/Retrainable.class b/dependencyParser/experimental/mate-tools/classes/is2/tools/Retrainable.class new file mode 100644 index 0000000..3675e0f Binary files /dev/null and b/dependencyParser/experimental/mate-tools/classes/is2/tools/Retrainable.class differ diff --git a/dependencyParser/experimental/mate-tools/classes/is2/tools/Tool.class b/dependencyParser/experimental/mate-tools/classes/is2/tools/Tool.class new file mode 100644 index 0000000..0ba217e Binary files /dev/null and b/dependencyParser/experimental/mate-tools/classes/is2/tools/Tool.class differ diff --git a/dependencyParser/experimental/mate-tools/classes/is2/tools/ToolIO.class b/dependencyParser/experimental/mate-tools/classes/is2/tools/ToolIO.class new file mode 100644 index 0000000..a6f87ab Binary files /dev/null and b/dependencyParser/experimental/mate-tools/classes/is2/tools/ToolIO.class differ diff --git a/dependencyParser/experimental/mate-tools/classes/is2/tools/Train.class b/dependencyParser/experimental/mate-tools/classes/is2/tools/Train.class new file mode 100644 index 0000000..0551298 Binary files /dev/null and b/dependencyParser/experimental/mate-tools/classes/is2/tools/Train.class differ diff --git a/dependencyParser/experimental/mate-tools/classes/is2/util/Convert.class b/dependencyParser/experimental/mate-tools/classes/is2/util/Convert.class new file mode 100644 index 0000000..cc00ef1 Binary files /dev/null and b/dependencyParser/experimental/mate-tools/classes/is2/util/Convert.class differ diff --git a/dependencyParser/experimental/mate-tools/classes/is2/util/Convert0409.class b/dependencyParser/experimental/mate-tools/classes/is2/util/Convert0409.class new file mode 100644 index 0000000..ded4be5 Binary files /dev/null and b/dependencyParser/experimental/mate-tools/classes/is2/util/Convert0409.class differ diff --git a/dependencyParser/experimental/mate-tools/classes/is2/util/ConvertADJ.class b/dependencyParser/experimental/mate-tools/classes/is2/util/ConvertADJ.class new file mode 100644 index 0000000..c080750 Binary files /dev/null and b/dependencyParser/experimental/mate-tools/classes/is2/util/ConvertADJ.class differ diff --git a/dependencyParser/experimental/mate-tools/classes/is2/util/ConvertLowerCase0909.class b/dependencyParser/experimental/mate-tools/classes/is2/util/ConvertLowerCase0909.class new file mode 100644 index 0000000..d2ffbf4 Binary files /dev/null and b/dependencyParser/experimental/mate-tools/classes/is2/util/ConvertLowerCase0909.class differ diff --git a/dependencyParser/experimental/mate-tools/classes/is2/util/ConvertTiger2CoNLL.class b/dependencyParser/experimental/mate-tools/classes/is2/util/ConvertTiger2CoNLL.class new file mode 100644 index 0000000..d9c9cdf Binary files /dev/null and b/dependencyParser/experimental/mate-tools/classes/is2/util/ConvertTiger2CoNLL.class differ diff --git a/dependencyParser/experimental/mate-tools/classes/is2/util/DB.class b/dependencyParser/experimental/mate-tools/classes/is2/util/DB.class new file mode 100644 index 0000000..50c83a6 Binary files /dev/null and b/dependencyParser/experimental/mate-tools/classes/is2/util/DB.class differ diff --git a/dependencyParser/experimental/mate-tools/classes/is2/util/Edges$C.class b/dependencyParser/experimental/mate-tools/classes/is2/util/Edges$C.class new file mode 100644 index 0000000..e3c539b Binary files /dev/null and b/dependencyParser/experimental/mate-tools/classes/is2/util/Edges$C.class differ diff --git a/dependencyParser/experimental/mate-tools/classes/is2/util/Edges.class b/dependencyParser/experimental/mate-tools/classes/is2/util/Edges.class new file mode 100644 index 0000000..6fd6eeb Binary files /dev/null and b/dependencyParser/experimental/mate-tools/classes/is2/util/Edges.class differ diff --git a/dependencyParser/experimental/mate-tools/classes/is2/util/Evaluator$1.class b/dependencyParser/experimental/mate-tools/classes/is2/util/Evaluator$1.class new file mode 100644 index 0000000..11c15b6 Binary files /dev/null and b/dependencyParser/experimental/mate-tools/classes/is2/util/Evaluator$1.class differ diff --git a/dependencyParser/experimental/mate-tools/classes/is2/util/Evaluator$Results.class b/dependencyParser/experimental/mate-tools/classes/is2/util/Evaluator$Results.class new file mode 100644 index 0000000..c8a450a Binary files /dev/null and b/dependencyParser/experimental/mate-tools/classes/is2/util/Evaluator$Results.class differ diff --git a/dependencyParser/experimental/mate-tools/classes/is2/util/Evaluator.class b/dependencyParser/experimental/mate-tools/classes/is2/util/Evaluator.class new file mode 100644 index 0000000..c9a50ff Binary files /dev/null and b/dependencyParser/experimental/mate-tools/classes/is2/util/Evaluator.class differ diff --git a/dependencyParser/experimental/mate-tools/classes/is2/util/EvaluatorTagger$1.class b/dependencyParser/experimental/mate-tools/classes/is2/util/EvaluatorTagger$1.class new file mode 100644 index 0000000..129c2f1 Binary files /dev/null and b/dependencyParser/experimental/mate-tools/classes/is2/util/EvaluatorTagger$1.class differ diff --git a/dependencyParser/experimental/mate-tools/classes/is2/util/EvaluatorTagger$2.class b/dependencyParser/experimental/mate-tools/classes/is2/util/EvaluatorTagger$2.class new file mode 100644 index 0000000..7a634d1 Binary files /dev/null and b/dependencyParser/experimental/mate-tools/classes/is2/util/EvaluatorTagger$2.class differ diff --git a/dependencyParser/experimental/mate-tools/classes/is2/util/EvaluatorTagger$Results.class b/dependencyParser/experimental/mate-tools/classes/is2/util/EvaluatorTagger$Results.class new file mode 100644 index 0000000..fc57ccc Binary files /dev/null and b/dependencyParser/experimental/mate-tools/classes/is2/util/EvaluatorTagger$Results.class differ diff --git a/dependencyParser/experimental/mate-tools/classes/is2/util/EvaluatorTagger.class b/dependencyParser/experimental/mate-tools/classes/is2/util/EvaluatorTagger.class new file mode 100644 index 0000000..20d5d22 Binary files /dev/null and b/dependencyParser/experimental/mate-tools/classes/is2/util/EvaluatorTagger.class differ diff --git a/dependencyParser/experimental/mate-tools/classes/is2/util/ExtractParagraphs.class b/dependencyParser/experimental/mate-tools/classes/is2/util/ExtractParagraphs.class new file mode 100644 index 0000000..dc00415 Binary files /dev/null and b/dependencyParser/experimental/mate-tools/classes/is2/util/ExtractParagraphs.class differ diff --git a/dependencyParser/experimental/mate-tools/classes/is2/util/IntStack.class b/dependencyParser/experimental/mate-tools/classes/is2/util/IntStack.class new file mode 100644 index 0000000..4af4316 Binary files /dev/null and b/dependencyParser/experimental/mate-tools/classes/is2/util/IntStack.class differ diff --git a/dependencyParser/experimental/mate-tools/classes/is2/util/Long2Int.class b/dependencyParser/experimental/mate-tools/classes/is2/util/Long2Int.class new file mode 100644 index 0000000..c816fd5 Binary files /dev/null and b/dependencyParser/experimental/mate-tools/classes/is2/util/Long2Int.class differ diff --git a/dependencyParser/experimental/mate-tools/classes/is2/util/Options.class b/dependencyParser/experimental/mate-tools/classes/is2/util/Options.class new file mode 100644 index 0000000..8071ebb Binary files /dev/null and b/dependencyParser/experimental/mate-tools/classes/is2/util/Options.class differ diff --git a/dependencyParser/experimental/mate-tools/classes/is2/util/OptionsSuper.class b/dependencyParser/experimental/mate-tools/classes/is2/util/OptionsSuper.class new file mode 100644 index 0000000..8f8a181 Binary files /dev/null and b/dependencyParser/experimental/mate-tools/classes/is2/util/OptionsSuper.class differ diff --git a/dependencyParser/experimental/mate-tools/classes/is2/util/ParserEvaluator$Results.class b/dependencyParser/experimental/mate-tools/classes/is2/util/ParserEvaluator$Results.class new file mode 100644 index 0000000..154033d Binary files /dev/null and b/dependencyParser/experimental/mate-tools/classes/is2/util/ParserEvaluator$Results.class differ diff --git a/dependencyParser/experimental/mate-tools/classes/is2/util/ParserEvaluator.class b/dependencyParser/experimental/mate-tools/classes/is2/util/ParserEvaluator.class new file mode 100644 index 0000000..72c4f35 Binary files /dev/null and b/dependencyParser/experimental/mate-tools/classes/is2/util/ParserEvaluator.class differ diff --git a/dependencyParser/experimental/mate-tools/classes/is2/util/Split.class b/dependencyParser/experimental/mate-tools/classes/is2/util/Split.class new file mode 100644 index 0000000..d665e7e Binary files /dev/null and b/dependencyParser/experimental/mate-tools/classes/is2/util/Split.class differ diff --git a/dependencyParser/experimental/mate-tools/classes/is2/util/Split2.class b/dependencyParser/experimental/mate-tools/classes/is2/util/Split2.class new file mode 100644 index 0000000..3222aee Binary files /dev/null and b/dependencyParser/experimental/mate-tools/classes/is2/util/Split2.class differ diff --git a/dependencyParser/experimental/mate-tools/classes/is2/util/Split3.class b/dependencyParser/experimental/mate-tools/classes/is2/util/Split3.class new file mode 100644 index 0000000..a16bbc6 Binary files /dev/null and b/dependencyParser/experimental/mate-tools/classes/is2/util/Split3.class differ diff --git a/dependencyParser/experimental/mate-tools/lib/commons-math-2.2.jar b/dependencyParser/experimental/mate-tools/lib/commons-math-2.2.jar new file mode 100644 index 0000000..b29a39c Binary files /dev/null and b/dependencyParser/experimental/mate-tools/lib/commons-math-2.2.jar differ diff --git a/dependencyParser/experimental/mate-tools/lib/trove-2.0.4.jar b/dependencyParser/experimental/mate-tools/lib/trove-2.0.4.jar new file mode 100644 index 0000000..cb1c8f1 Binary files /dev/null and b/dependencyParser/experimental/mate-tools/lib/trove-2.0.4.jar differ diff --git a/dependencyParser/experimental/mate-tools/src/decoder/ParallelDecoder.java b/dependencyParser/experimental/mate-tools/src/decoder/ParallelDecoder.java new file mode 100755 index 0000000..cf4cfa9 --- /dev/null +++ b/dependencyParser/experimental/mate-tools/src/decoder/ParallelDecoder.java @@ -0,0 +1,189 @@ +package decoder; + +import java.util.ArrayList; +import java.util.concurrent.Callable; + +import is2.data.Closed; +import is2.data.DataF; +import is2.data.Edges; +import is2.data.Open; + +/** + * @author Bernd Bohnet, 30.08.2009 + * + * This class implements a parallel feature extractor. + */ +final public class ParallelDecoder implements Callable<Object> { + // some constants + private static final float INIT_BEST = (-1.0F / 0.0F); + private static final boolean[] DIR = { false, true }; + + // the data space of the weights for a dependency tree + final private DataF x; + + private short[] pos; + + private Open O[][][][]; + private Closed C[][][][]; + + private int n; + + boolean done = false; + public boolean waiting = false; + + /** + * Initialize the parallel decoder. + * + * @param pos + * part-of-speech + * @param d + * data + * @param edges + * part-of-speech edge mapping + * @param o + * open spans + * @param c + * closed spans + * @param n + * number of words + */ + public ParallelDecoder(short[] pos, DataF d, Open o[][][][], Closed c[][][][], int n) { + + this.pos = pos; + this.x = d; + + this.O = o; + this.C = c; + this.n = n; + } + + private static class DSet { + short w1, w2; + } + + @Override + public Object call() { + + while (true) { + + DSet set = get(); + if (done && set == null) + break; + + if (set == null) + return null; + + short s = set.w1, t = set.w2; + + for (short dir = 1; dir >= 0; dir--) { + + short[] labs = (dir == 1) ? Edges.get(pos[s], pos[t], false) : Edges.get(pos[t], pos[s], true); + + O[s][t][dir] = new Open[labs.length]; + for (int l = O[s][t][dir].length - 1; l >= 0; l--) { + + double tRP = INIT_BEST; + + Closed tL = null, tR = null; + + for (int r = s; r < t; r++) { + + if (s == 0 && r != 0) + continue; + + double tLPr = INIT_BEST, tRPr = INIT_BEST; + Closed tLCld = null, tRCld = null; + + if (r == s) + tLPr = dir == 1 ? x.sib[s][t][s][0][l] : x.gra[t][s][s][1][l]; + else + for (int i = s + 1; i <= r; i++) + if (((dir == 1 ? x.sib[s][t][i][0][l] : x.gra[t][s][i][1][l]) + + C[s][r][1][i].p) > tLPr) { + tLPr = ((dir == 1 ? x.sib[s][t][i][0][l] : x.gra[t][s][i][1][l]) + C[s][r][1][i].p); + tLCld = C[s][r][1][i]; + } + + if (r == t - 1) + tRPr = dir == 1 ? x.gra[s][t][s][0][l] : x.sib[t][s][s][1][l]; + else + for (int i = r + 1; i < t; i++) + if (((dir == 1 ? x.gra[s][t][i][0][l] : x.sib[t][s][i][1][l]) + + C[r + 1][t][0][i].p) > tRPr) { + tRPr = ((dir == 1 ? x.gra[s][t][i][0][l] : x.sib[t][s][i][1][l]) + + C[r + 1][t][0][i].p); + tRCld = C[r + 1][t][0][i]; + } + + if (tLPr + tRPr > tRP) { + tRP = tLPr + tRPr; + tL = tLCld; + tR = tRCld; + } + } + O[s][t][dir][l] = new Open(s, t, dir, labs[l], tL, tR, + (float) (tRP + ((dir == 1) ? x.pl[s][t] : x.pl[t][s]) + + ((dir == 1) ? x.lab[s][t][labs[l]][0] : x.lab[t][s][labs[l]][1]))); + } + } + C[s][t][1] = new Closed[n]; + C[s][t][0] = new Closed[n]; + + for (int m = s; m <= t; m++) { + for (boolean d : DIR) { + if ((d && m != s) || !d && (m != t && s != 0)) { + + // create closed structure + + double top = INIT_BEST; + + Open tU = null; + Closed tL = null; + int numLabels = O[(d ? s : m)][(d ? m : t)][d ? 1 : 0].length; + + // for (int l = numLabels-1; l >=0; l--) { + for (int l = 0; l < numLabels; l++) { + + Open hi = O[(d ? s : m)][(d ? m : t)][d ? 1 : 0][l]; + for (int amb = m + (d ? 1 : -1); amb != (d ? t : s) + (d ? 1 : -1); amb += (d ? 1 : -1)) { + + if ((hi.p + C[d ? m : s][d ? t : m][d ? 1 : 0][amb].p + + x.gra[d ? s : t][m][amb][d ? 0 : 1][l]) > top) { + top = (hi.p + C[d ? m : s][d ? t : m][d ? 1 : 0][amb].p + + x.gra[d ? s : t][m][amb][(d ? 0 : 1)][l]); + tU = hi; + tL = C[d ? m : s][d ? t : m][d ? 1 : 0][amb]; + } + } + + if ((m == (d ? t : s)) && (hi.p + x.gra[d ? s : t][m][d ? s : t][(d ? 0 : 1)][l]) > top) { + top = (hi.p + x.gra[(d ? s : t)][m][d ? s : t][d ? 0 : 1][l]); + tU = hi; + tL = null; + } + } + C[s][t][d ? 1 : 0][m] = new Closed(s, t, m, d ? 1 : 0, tU, tL, (float) top); + } + } + } + } + return null; + } + + public static ArrayList<DSet> sets = new ArrayList<DSet>(); + + static synchronized private DSet get() { + synchronized (sets) { + if (sets.size() == 0) + return null; + return sets.remove(sets.size() - 1); + } + } + + public static void add(short w1, short w2) { + DSet ds = new DSet(); + ds.w1 = w1; + ds.w2 = w2; + sets.add(ds); + } +} diff --git a/dependencyParser/experimental/mate-tools/src/decoder/ParallelRearrangeNBest.java b/dependencyParser/experimental/mate-tools/src/decoder/ParallelRearrangeNBest.java new file mode 100755 index 0000000..5a16211 --- /dev/null +++ b/dependencyParser/experimental/mate-tools/src/decoder/ParallelRearrangeNBest.java @@ -0,0 +1,144 @@ +package decoder; + +import java.util.ArrayList; +import java.util.concurrent.Callable; + +import extractors.Extractor; +import is2.data.DataF; +import is2.data.Edges; +import is2.data.Parse; +import is2.data.ParseNBest; + +/** + * @author Dr. Bernd Bohnet, 30.08.2009 + * + * This class implements a parallel edge rearrangement for + * non-projective parsing; The linear method was first suggest by Rayn + * McDonald et. al. 2005. + */ +final public class ParallelRearrangeNBest implements Callable<Object> { + + // new parent child combination to explore + final static class PA { + final float p; + final short ch, pa; + + float best; + + public PA(float p2, short ch2, short pa2) { + p = p2; + ch = ch2; + pa = pa2; + } + } + + // some data from the dependency tree + private short[] pos; + private DataF x; + private boolean[][] isChild; + public short[] heads, types; + private float lastNBest; + private float best; // best so far + private float threshold; + private Extractor extractor; + + /** + * Initialize the parallel rearrange thread + * + * @param isChild2 + * is a child + * @param edgesC + * the part-of-speech edge mapping + * @param pos + * the part-of-speech + * @param x + * the data + * @param lastNBest + * @param s + * the heads + * @param ts + * the types + */ + public ParallelRearrangeNBest(short[] pos, DataF x, Parse p, float lastNBest, Extractor extractor, float best, + float threshold) { + + heads = p.heads; + + types = p.labels; + + isChild = new boolean[heads.length][heads.length]; + + for (int i = 1, l1 = 1; i < heads.length; i++, l1 = i) + while ((l1 = heads[l1]) != -1) + isChild[l1][i] = true; + + this.lastNBest = lastNBest; + this.pos = pos; + this.x = x; + + this.extractor = extractor; + this.best = best; + this.threshold = threshold; + } + + public ArrayList<ParseNBest> parses = new ArrayList<ParseNBest>(); + + @Override + public Object call() { + + // check the list of new possible parents and children for a better + // combination + for (int ch = 1; ch < heads.length; ch++) { + for (short pa = 0; pa < heads.length; pa++) { + if (ch == pa || pa == heads[ch] || isChild[ch][pa]) + continue; + + short oldP = heads[ch], oldT = types[ch]; + heads[ch] = pa; + + short[] labels = Edges.get(pos[pa], pos[ch], ch < pa); + + for (short label : labels) { + + types[ch] = label; + float p_new = extractor.encode3(pos, heads, types, x); + + if (p_new < lastNBest || ((best + this.threshold) > p_new)) + continue; + + ParseNBest p = new ParseNBest(); + p.signature(heads, types); + p.f1 = p_new; + parses.add(p); + } + + // change back + heads[ch] = oldP; + types[ch] = oldT; + + // consider changes to labels only + labels = Edges.get(pos[oldP], pos[ch], ch < oldP); + + for (short label : labels) { + + types[ch] = label; + float p_new = extractor.encode3(pos, heads, types, x); + + // optimization: add only if larger than smallest of n-best + if (p_new < lastNBest || ((best + this.threshold) > p_new)) + continue; + + ParseNBest p = new ParseNBest(); + p.signature(heads, types); + p.f1 = p_new; + parses.add(p); + } + + heads[ch] = oldP; + types[ch] = oldT; + } + } + return parses; + } + +} diff --git a/dependencyParser/experimental/mate-tools/src/decoder/ParallelRearrangeNBest2.java b/dependencyParser/experimental/mate-tools/src/decoder/ParallelRearrangeNBest2.java new file mode 100644 index 0000000..6795b7b --- /dev/null +++ b/dependencyParser/experimental/mate-tools/src/decoder/ParallelRearrangeNBest2.java @@ -0,0 +1,158 @@ +package decoder; + +import java.util.ArrayList; +import java.util.concurrent.Callable; + +import extractors.Extractor; +import is2.data.DataF; +import is2.data.Edges; +import is2.data.Parse; +import is2.data.ParseNBest; + +/** + * @author Dr. Bernd Bohnet, 30.08.2009 + * + * This class implements a parallel edge rearrangement for + * non-projective parsing; The linear method was first suggest by Rayn + * McDonald et. al. 2005. + */ +final public class ParallelRearrangeNBest2 implements Callable<Object> { + + // new parent child combination to explore + final static class PA { + final float p; + final short ch, pa; + + public short[] heads, types; + + public PA(Parse p, short ch2, short pa2) { + this.p = (float) p.f1; + heads = p.heads; + types = p.labels; + ch = ch2; + pa = pa2; + + } + } + + // list of parent child combinations + private static ArrayList<PA> parents = new ArrayList<PA>(); + + // some data from the dependency tree + private short[] pos; + private DataF x; + private float lastNBest; + private float threshold; + private Extractor extractor; + + /** + * Initialize the parallel rearrange thread + * + * @param pos + * the part-of-speech + * @param x + * the data + * @param lastNBest + * @param isChild2 + * is a child + * @param edgesC + * the part-of-speech edge mapping + * @param s + * the heads + * @param ts + * the types + */ + public ParallelRearrangeNBest2(short[] pos, DataF x, float lastNBest, Extractor extractor, float threshold) { + + this.lastNBest = lastNBest; + this.pos = pos; + this.x = x; + + this.extractor = extractor; + this.threshold = threshold; + } + + public ArrayList<ParseNBest> parses = new ArrayList<ParseNBest>(); + + @Override + public Object call() { + + try { + + while (true) { + PA p = getPA(); + + if (p == null) + return parses; + + short oldP = p.heads[p.ch], oldT = p.types[p.ch]; + p.heads[p.ch] = p.pa; + + short[] labels = Edges.get(pos[p.pa], pos[p.ch], p.ch < p.pa); + + for (short label : labels) { + + p.types[p.ch] = label; + float p_new = extractor.encode3(pos, p.heads, p.types, x); + + if (p_new < lastNBest || ((p.p + this.threshold) > p_new)) + continue; + + ParseNBest x = new ParseNBest(); + x.signature(p.heads, p.types); + x.f1 = p_new; + parses.add(x); + } + + // change back + p.heads[p.ch] = oldP; + p.types[p.ch] = oldT; + + // consider changes to labels only + labels = Edges.get(pos[oldP], pos[p.ch], p.ch < oldP); + + for (short label : labels) { + + p.types[p.ch] = label; + float p_new = extractor.encode3(pos, p.heads, p.types, x); + + // optimization: add only if larger than smallest of n-best + if (p_new < lastNBest || ((p.p + this.threshold) > p_new)) + continue; + + ParseNBest x = new ParseNBest(); + x.signature(p.heads, p.types); + x.f1 = p_new; + parses.add(x); + } + + p.heads[p.ch] = oldP; + p.types[p.ch] = oldT; + } + } catch (Exception e) { + e.printStackTrace(); + } + return parses; + } + + /** + * Add a child-parent combination which are latter explored for + * rearrangement + * + * @param p2 + * @param ch2 + * @param pa + */ + public static void add(Parse p, short ch2, short pa) { + parents.add(new PA(p, ch2, pa)); + } + + public static PA getPA() { + synchronized (parents) { + if (parents.size() == 0) + return null; + return parents.remove(parents.size() - 1); + } + } + +} diff --git a/dependencyParser/experimental/mate-tools/src/examples/DependencyParser.java b/dependencyParser/experimental/mate-tools/src/examples/DependencyParser.java new file mode 100644 index 0000000..917dc04 --- /dev/null +++ b/dependencyParser/experimental/mate-tools/src/examples/DependencyParser.java @@ -0,0 +1,90 @@ +package examples; + +import java.io.File; +import java.util.Arrays; + +import is2.data.InstancesTagger; +import is2.data.SentenceData09; +import is2.io.CONLLReader09; +import is2.io.IOGenerals; +import is2.lemmatizer.Lemmatizer; +import is2.lemmatizer.MFO; +import is2.parser.Parser; +import is2.tag.Tagger; +//import org.apache.log4j.Logger; + +/** + * Dependency parsing + * + * @author B. Piwowarski <benjamin@bpiwowar.net> + * @date 10/10/12 + */ +// @TaskDescription(name = "dependency-parser", project = "mate-tools") +public class DependencyParser { + // final static private Logger LOGGER = + // Logger.getLogger(DependencyParser.class); + // @Argument(name = "lemmatizer", required = true, checkers = + // IOChecker.Readable.class) + File lemmatizerFile; + + // @Argument(name = "tagger", required = true) + File taggerFile; + + // @Argument(name = "parser", required = true) + File parserFile; + + // @Override + public int execute() throws Throwable { + + // Load lemmatizer + // LOGGER.info("Loading lemmatizer"); + // true = do uppercase lemmatization + Lemmatizer lemmatizer = new Lemmatizer(lemmatizerFile.getAbsolutePath()); + + // Load tagger + // LOGGER.info("Loading tagger"); + Tagger tagger = new Tagger(taggerFile.getAbsolutePath()); + + // Load parser + // LOGGER.info("Loading parser"); + Parser parser = new Parser(parserFile.getAbsolutePath()); + + // Sentences to parse + String sentences[] = new String[] { "Airfields have been constructed on a number of the islands .", + "Private investment has even made an increasingly modern ferry fleet possible .", + "Politically , the 1990s have been relatively quite times for the islands ." }; + + CONLLReader09 reader = new CONLLReader09(CONLLReader09.NO_NORMALIZE); + + for (String sentence : sentences) { + // Prepare the sentence + InstancesTagger instanceTagger = new InstancesTagger(); + instanceTagger.init(1, new MFO()); + + String[] split = sentence.split("\\s+"); + String[] splitRoot = new String[split.length + 1]; + System.arraycopy(split, 0, splitRoot, 1, split.length); + splitRoot[0] = IOGenerals.ROOT; + + SentenceData09 instance = new SentenceData09(); + instance.init(splitRoot); + + reader.insert(instanceTagger, instance); + + SentenceData09 result = lemmatizer.apply(instance); + tagger.apply(result); + result = parser.parse(result, parser.params, false, parser.options); + + // Output + System.out.println(Arrays.toString(result.forms)); + System.out.println(Arrays.toString(result.plemmas)); + System.out.println(Arrays.toString(result.ppos)); + System.out.println(Arrays.toString(result.pheads)); + System.out.println(Arrays.toString(result.plabels)); + System.out.println(); + + } + + return 0; + } +} diff --git a/dependencyParser/experimental/mate-tools/src/examples/FullPipelineSpanish.java b/dependencyParser/experimental/mate-tools/src/examples/FullPipelineSpanish.java new file mode 100644 index 0000000..9bfff59 --- /dev/null +++ b/dependencyParser/experimental/mate-tools/src/examples/FullPipelineSpanish.java @@ -0,0 +1,108 @@ +package examples; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.StringTokenizer; + +import is2.data.SentenceData09; +import is2.io.CONLLWriter09; +import is2.lemmatizer.Lemmatizer; +import is2.parser.Parser; +import is2.tag.Tagger; +import is2.tools.Tool; + +/** + * @author Bernd Bohnet, 13.09.2010 + * + * Illustrates the application the full pipeline: lemmatizer, + * morphologic, tagger, and parser + */ +public class FullPipelineSpanish { + + // shows how to parse a sentences and call the tools + public static void main(String[] args) throws IOException { + + // Create a data container for a sentence + SentenceData09 i = new SentenceData09(); + + if (args.length == 1) { // input might be a sentence: "This is another + // test ." + StringTokenizer st = new StringTokenizer(args[0]); + ArrayList<String> forms = new ArrayList<String>(); + + forms.add("<root>"); + while (st.hasMoreTokens()) + forms.add(st.nextToken()); + + i.init(forms.toArray(new String[0])); + + } else { + // provide a default sentence: Haus has a mutated vowel + i.init(new String[] { "<root>", "También", "estuve", "emocionado", "pero", "no", "pude", "imaginar", "mi", + "vida", "sin", "la", "gente", "tan", "intima", "a", "mí", "." }); + + } + + // lemmatizing + + System.out.println("\nReading the model of the lemmatizer"); + Tool lemmatizer = new Lemmatizer("models/lemma-spa.model"); // create a + // lemmatizer + + System.out.println("Applying the lemmatizer"); + lemmatizer.apply(i); + + System.out.print(i.toString()); + System.out.print("Lemmata: "); + for (String l : i.plemmas) + System.out.print(l + " "); + System.out.println(); + + // morphologic tagging + + System.out.println("\nReading the model of the morphologic tagger"); + is2.mtag.Tagger morphTagger = new is2.mtag.Tagger("models/mtag-spa.model"); + + System.out.println("\nApplying the morpholoigc tagger"); + morphTagger.apply(i); + + System.out.print(i.toString()); + System.out.print("Morph: "); + for (String f : i.pfeats) + System.out.print(f + " "); + System.out.println(); + + // part-of-speech tagging + + System.out.println("\nReading the model of the part-of-speech tagger"); + Tool tagger = new Tagger("models/tag-spa.model"); + + System.out.println("\nApplying the part-of-speech tagger"); + tagger.apply(i); + + System.out.print(i.toString()); + System.out.print("Part-of-Speech tags: "); + for (String p : i.ppos) + System.out.print(p + " "); + System.out.println(); + + // parsing + + System.out.println("\nReading the model of the dependency parser"); + Tool parser = new Parser("models/prs-spa.model"); + + System.out.println("\nApplying the parser"); + parser.apply(i); + + System.out.println(i.toString()); + + // write the result to a file + + CONLLWriter09 writer = new is2.io.CONLLWriter09("example-out.txt"); + + writer.write(i, CONLLWriter09.NO_ROOT); + writer.finishWriting(); + + } + +} diff --git a/dependencyParser/experimental/mate-tools/src/examples/FullPipelineTest.java b/dependencyParser/experimental/mate-tools/src/examples/FullPipelineTest.java new file mode 100644 index 0000000..4aecdc2 --- /dev/null +++ b/dependencyParser/experimental/mate-tools/src/examples/FullPipelineTest.java @@ -0,0 +1,110 @@ +package examples; + +import java.io.File; + +import is2.data.InstancesTagger; +import is2.data.SentenceData09; +import is2.io.CONLLReader09; +import is2.io.CONLLWriter09; +import is2.lemmatizer.Lemmatizer; +import is2.lemmatizer.MFO; +import is2.parser.Parser; +import is2.tag.Tagger; +//import org.apache.log4j.Logger; + +/** + * Dependency parsing + * + * @author B. Piwowarski <benjamin@bpiwowar.net> + * @date 10/10/12 + */ +// @TaskDescription(name = "dependency-parser", project = "mate-tools") +public class FullPipelineTest { + // final static private Logger LOGGER = + // Logger.getLogger(DependencyParser.class); + // @Argument(name = "lemmatizer", required = true, checkers = + // IOChecker.Readable.class) + public File lemmatizerFile; + + // @Argument(name = "tagger", required = true) + public File taggerFile; + + public File mtaggerFile; + + // @Argument(name = "parser", required = true) + public File parserFile; + + // @Override + public int execute(String source, String target) throws Throwable { + + // Load lemmatizer + // LOGGER.info("Loading lemmatizer"); + // true = do uppercase lemmatization + Lemmatizer lemmatizer = new Lemmatizer(lemmatizerFile.getAbsolutePath()); + + // Load tagger + // LOGGER.info("Loading tagger"); + Tagger tagger = new Tagger(taggerFile.getAbsolutePath()); + + is2.mtag.Tagger mtagger = new is2.mtag.Tagger(mtaggerFile.getAbsolutePath()); + + // Load parser + // LOGGER.info("Loading parser"); + Parser parser = new Parser(parserFile.getAbsolutePath()); + + CONLLReader09 reader = new CONLLReader09(source); + CONLLWriter09 writer = new CONLLWriter09(target); + + int count = 0; + while (true) { + // Prepare the sentence + InstancesTagger is = new InstancesTagger(); + is.init(1, new MFO()); + + SentenceData09 instance = reader.getNext(is); + if (instance == null) + break; + SentenceData09 result = null; + try { + + System.out.print("\b\b\b\b" + count); + result = lemmatizer.apply(instance); + + result = tagger.apply(result); + result = mtagger.apply(result); + result = parser.apply(result); + + count++; + } catch (Exception e) { + + System.out.println("error" + result); + System.out.println("error" + instance); + e.printStackTrace(); + break; + } + + // Output + writer.write(result); + + } + writer.finishWriting(); + return 0; + } + + public static void main(String args[]) throws Throwable { + + if (args.length < 3) { + System.out.println("lemmatizer-model tagger-model parser-model source target"); + System.exit(0); + } + FullPipelineTest p = new FullPipelineTest(); + p.lemmatizerFile = new File(args[0]); + p.taggerFile = new File(args[1]); + p.mtaggerFile = new File(args[2]); + p.parserFile = new File(args[3]); + + p.execute(args[4], args[5]); + + } + +} diff --git a/dependencyParser/experimental/mate-tools/src/examples/MorphTagger.java b/dependencyParser/experimental/mate-tools/src/examples/MorphTagger.java new file mode 100644 index 0000000..75bfc28 --- /dev/null +++ b/dependencyParser/experimental/mate-tools/src/examples/MorphTagger.java @@ -0,0 +1,79 @@ +package examples; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.StringTokenizer; + +import is2.data.SentenceData09; +import is2.lemmatizer.Lemmatizer; +import is2.lemmatizer.Options; + +/** + * @author Bernd Bohnet, 13.09.2010 + * + * Illustrates the application of some components: lemmatizer, tagger, + * and parser + */ +public class MorphTagger { + + /** + * How to lemmatize a sentences? + */ + public static void main(String[] args) throws IOException { + + // Create a data container for a sentence + SentenceData09 i = new SentenceData09(); + + if (args.length == 1) { // input might be a sentence: "This is another + // test ." + StringTokenizer st = new StringTokenizer(args[0]); + ArrayList<String> forms = new ArrayList<String>(); + + forms.add("<root>"); + while (st.hasMoreTokens()) + forms.add(st.nextToken()); + + i.init(forms.toArray(new String[0])); + + } else { + // provide a default sentence + i.init(new String[] { "<root>", "Häuser", "hat", "ein", "Umlaut", "." }); + } + + // print the forms + for (String l : i.forms) + System.out.println("forms : " + l); + + // tell the lemmatizer the location of the model + is2.lemmatizer.Options optsLemmatizer = new Options(new String[] { "-model", "models/lemma-ger.model" }); + + // create a lemmatizer + Lemmatizer lemmatizer = new Lemmatizer(optsLemmatizer.modelName); + + // lemmatize a sentence; the result is stored in the stenenceData09 i + lemmatizer.apply(i); + + // output the lemmata + for (String l : i.plemmas) + System.out.println("lemma : " + l); + + is2.mtag.Options morphologicTaggerOptions = new is2.mtag.Options( + new String[] { "-model", "models/mtag-ger.model" }); + + is2.mtag.Tagger mt = new is2.mtag.Tagger(morphologicTaggerOptions); + + try { + + // SentenceData09 snt = is2.mtag.Main.out(i.forms, lemmata); + + SentenceData09 snt = mt.apply(i); + for (String f : snt.pfeats) + System.out.println("feats " + f); + + } catch (Exception e) { + e.printStackTrace(); + } + + } + +} diff --git a/dependencyParser/experimental/mate-tools/src/examples/ParseOnly.java b/dependencyParser/experimental/mate-tools/src/examples/ParseOnly.java new file mode 100755 index 0000000..23eaf59 --- /dev/null +++ b/dependencyParser/experimental/mate-tools/src/examples/ParseOnly.java @@ -0,0 +1,48 @@ +package examples; + +import is2.data.SentenceData09; +import is2.parser.Options; +import is2.parser.Parser; + +public class ParseOnly { + + public static void main(String[] args) { + + if (args.length == 0) { + plain(); + } + + } + + /** + * This example shows how to parse a sentence. + */ + public static void plain() { + + // initialize the options + String[] opts = { "-model", "models/prs-eng-x.model" }; + Options options = new Options(opts); + + // create a parser + Parser parser = new Parser(options); + + // Create a data container for a sentence + SentenceData09 i = new SentenceData09(); + + // Provide the sentence + i.init(new String[] { "<root>", "This", "is", "a", "test", "." }); + i.setPPos(new String[] { "<root-POS>", "DT", "VBZ", "DT", "NN", "." }); + + // parse the sentence + SentenceData09 out = parser.apply(i); + + // output the sentence and dependency tree + System.out.println(out.toString()); + + // Get the parsing results + out.getLabels(); + out.getParents(); + + } + +} diff --git a/dependencyParser/experimental/mate-tools/src/examples/Pipeline.java b/dependencyParser/experimental/mate-tools/src/examples/Pipeline.java new file mode 100644 index 0000000..dcb5a24 --- /dev/null +++ b/dependencyParser/experimental/mate-tools/src/examples/Pipeline.java @@ -0,0 +1,90 @@ +package examples; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.StringTokenizer; + +import is2.data.SentenceData09; +import is2.lemmatizer.Lemmatizer; +import is2.parser.Options; +import is2.parser.Parser; +import is2.tag.Tagger; + +/** + * @author Bernd Bohnet, 13.09.2010 + * + * Illustrates the application of some components: lemmatizer, tagger, + * and parser + */ +public class Pipeline { + + // how to parse a sentences and call the tools + public static void main(String[] args) throws IOException { + + // Create a data container for a sentence + SentenceData09 i = new SentenceData09(); + + if (args.length == 1) { // input might be a sentence: "This is another + // test ." + StringTokenizer st = new StringTokenizer(args[0]); + ArrayList<String> forms = new ArrayList<String>(); + + forms.add("<root>"); + while (st.hasMoreTokens()) + forms.add(st.nextToken()); + + i.init(forms.toArray(new String[0])); + + } else { + // provide a default sentence + i.init(new String[] { "<root>", "This", "is", "a", "test", "." }); + } + + // print the forms + for (String l : i.forms) + System.out.println("form : " + l); + + // tell the lemmatizer the location of the model + is2.lemmatizer.Options optsLemmatizer = new is2.lemmatizer.Options( + new String[] { "-model", "models/lemma-eng.model" }); + + // create a lemmatizer + Lemmatizer lemmatizer = new Lemmatizer(optsLemmatizer.modelName); + + // lemmatize a sentence; the result is stored in the stenenceData09 i + i = lemmatizer.apply(i); + + // output the lemmata + for (String l : i.plemmas) + System.out.println("lemma : " + l); + + // tell the tagger the location of the model + is2.tag.Options optsTagger = new is2.tag.Options(new String[] { "-model", "models/tag-eng.model" }); + Tagger tagger = new Tagger(optsTagger); + + // String pos[] =tagger.tag(i.forms, i.lemmas); + // i.setPPos(pos); + + SentenceData09 tagged = tagger.tag(i); + for (String p : tagged.ppos) + System.out.println("pos " + p); + + // initialize the options + Options optsParser = new Options(new String[] { "-model", "models/prs-eng-x.model" }); + + // create a parser + Parser parser = new Parser(optsParser); + + // parse the sentence (you get a copy of the input i) + SentenceData09 parse = parser.apply(tagged); + + System.out.println(parse.toString()); + + // create some trash on the hard drive :-) + is2.io.CONLLWriter09 writer = new is2.io.CONLLWriter09("example-out.txt"); + + writer.write(i); + writer.finishWriting(); + } + +} diff --git a/dependencyParser/experimental/mate-tools/src/extractors/Extractor.java b/dependencyParser/experimental/mate-tools/src/extractors/Extractor.java new file mode 100644 index 0000000..190ccc6 --- /dev/null +++ b/dependencyParser/experimental/mate-tools/src/extractors/Extractor.java @@ -0,0 +1,52 @@ +/** + * + */ +package extractors; + +import is2.data.Cluster; +import is2.data.DataF; +import is2.data.FV; +import is2.data.IFV; +import is2.data.Instances; + +/** + * @author Dr. Bernd Bohnet, 29.04.2011 + * + * + */ +public interface Extractor { + + /** + * Initializes the Extractor general parts + */ + public void initStat(); + + /** + * Initializes the Extractor specific parts + */ + public void init(); + + public int basic(short[] pos, int[] forms, int w1, int w2, Cluster cluster, IFV f); + + public void firstm(Instances is, int i, int w1, int w2, int j, Cluster cluster, long[] svs); + + public void siblingm(Instances is, int i, short[] pos, int[] forms, int[] lemmas, short[][] feats, int w1, int w2, + int g, int j, Cluster cluster, long[] svs, int n); + + public void gcm(Instances is, int i, int w1, int w2, int g, int j, Cluster cluster, long[] svs); + + public int getType(); + + public FV encodeCat(Instances is, int n, short[] pos, int[] is2, int[] is3, short[] heads, short[] labels, + short[][] s, Cluster cl, FV pred); + + public void setMaxForm(int integer); + + /** + * @return + */ + public int getMaxForm(); + + public float encode3(short[] pos, short[] heads, short[] labs, DataF x); + +} diff --git a/dependencyParser/experimental/mate-tools/src/extractors/ExtractorClusterStacked.java b/dependencyParser/experimental/mate-tools/src/extractors/ExtractorClusterStacked.java new file mode 100755 index 0000000..436bd5c --- /dev/null +++ b/dependencyParser/experimental/mate-tools/src/extractors/ExtractorClusterStacked.java @@ -0,0 +1,1946 @@ +package extractors; + +import is2.data.Cluster; +import is2.data.D4; +import is2.data.DataF; +import is2.data.Edges; +import is2.data.FV; +import is2.data.IFV; +import is2.data.Instances; +import is2.data.Long2IntInterface; +import is2.data.MFB; + +final public class ExtractorClusterStacked implements Extractor { + + public static int s_rel, s_word, s_type, s_dir, s_dist, s_feat, s_child, s_spath, s_lpath, s_pos; + + final D4 d0, dl1, dl2, dwr, dr, dwwp, dw, dwp, dlf, d3lp, d2lp, d2pw, d2pp; + + public final Long2IntInterface li; + + public ExtractorClusterStacked(Long2IntInterface li) { + + ExtractorClusterStacked.initFeatures(); + this.li = li; + d0 = new D4(li); + dl1 = new D4(li); + dl2 = new D4(li); + dwr = new D4(li); + dr = new D4(li); + dwwp = new D4(li); + + dw = new D4(li); + dwp = new D4(li); + + dlf = new D4(li); + d3lp = new D4(li); + d2lp = new D4(li); + d2pw = new D4(li); + d2pp = new D4(li); + + } + + @Override + public void initStat() { + + MFB mf = new MFB(); + s_rel = mf.getFeatureCounter().get(REL).intValue(); + s_pos = mf.getFeatureCounter().get(POS).intValue(); + s_word = mf.getFeatureCounter().get(WORD).intValue(); + s_type = mf.getFeatureCounter().get(TYPE).intValue();// mf.getFeatureBits(); + s_dir = mf.getFeatureCounter().get(DIR); + la = mf.getValue(DIR, LA); + ra = mf.getValue(DIR, RA); + s_dist = mf.getFeatureCounter().get(DIST);// mf.getFeatureBits(DIST); + s_feat = mf.getFeatureCounter().get(FEAT);// mf.getFeatureBits(Pipe.FEAT); + s_spath = mf.getFeatureCounter().get(Cluster.SPATH) == null ? 0 : mf.getFeatureCounter().get(Cluster.SPATH);// mf.getFeatureBits(Cluster.SPATH); + s_lpath = mf.getFeatureCounter().get(Cluster.LPATH) == null ? 0 : mf.getFeatureCounter().get(Cluster.LPATH);// mf.getFeatureBits(Cluster.LPATH); + } + + @Override + public void init() { + // DB.println("init"); + d0.a0 = s_type; + d0.a1 = s_pos; + d0.a2 = s_pos; + d0.a3 = s_pos; + d0.a4 = s_pos; + d0.a5 = s_pos; + d0.a6 = s_pos; + d0.a7 = s_pos; + dl1.a0 = s_type; + dl1.a1 = s_rel; + dl1.a2 = s_pos; + dl1.a3 = s_pos; + dl1.a4 = s_pos; + dl1.a5 = s_pos; + dl1.a6 = s_pos; + dl1.a7 = s_pos; + dl2.a0 = s_type; + dl2.a1 = s_rel; + dl2.a2 = s_word; + dl2.a3 = s_pos; + dl2.a4 = s_pos; + dl2.a5 = s_pos; + dl2.a6 = s_pos; + dl2.a7 = s_pos; + dwp.a0 = s_type; + dwp.a1 = s_rel; + dwp.a2 = s_word; + dwp.a3 = s_pos; + dwp.a4 = s_pos; + dwp.a5 = s_word; + dwwp.a0 = s_type; + dwwp.a1 = s_rel; + dwwp.a2 = s_word; + dwwp.a3 = s_word; + dwwp.a4 = s_pos; + dwwp.a5 = s_word; + dlf.a0 = s_type; + dlf.a1 = s_rel; + dlf.a2 = s_pos; + dlf.a3 = s_pos; + dlf.a4 = s_feat; + dlf.a5 = s_feat; + dlf.a6 = s_pos; + dlf.a7 = s_pos; + d3lp.a0 = s_type; + d3lp.a1 = s_rel; + d3lp.a2 = s_lpath; + d3lp.a3 = s_lpath; + d3lp.a4 = s_lpath; + d3lp.a5 = s_word; + d3lp.a6 = s_spath; + d3lp.a7 = s_spath; + d2lp.a0 = s_type; + d2lp.a1 = s_rel; + d2lp.a2 = s_lpath; + d2lp.a3 = s_lpath; + d2lp.a4 = s_word; + d2lp.a5 = s_word; // d3lp.a6 = s_spath; d3lp.a7 = s_spath; + d2pw.a0 = s_type; + d2pw.a1 = s_rel; + d2pw.a2 = s_lpath; + d2pw.a3 = s_lpath; + d2pw.a4 = s_word; + d2pw.a5 = s_word; // d3lp.a6 = s_spath; d3lp.a7 = s_spath; + d2pp.a0 = s_type; + d2pp.a1 = s_rel; + d2pp.a2 = s_lpath; + d2pp.a3 = s_lpath; + d2pp.a4 = s_pos; + d2pp.a5 = s_pos; // d3lp.a6 = s_spath; d3lp.a7 = s_spath; + } + + @Override + public int basic(short[] pposs, int[] form, int p, int d, Cluster cluster, IFV f) { + + d0.clean(); + dl1.clean(); + dl2.clean(); + dwp.clean(); + dwwp.clean(); + dlf.clean(); + d3lp.clean(); + + d3lp.clean(); + d2lp.clean(); + d2pw.clean(); + d2pp.clean(); + + int n = 1; + int dir = (p < d) ? ra : la; + d0.v0 = n++; + d0.v1 = pposs[p]; + d0.v2 = pposs[d]; // d0.stop=4; + int end = (p >= d ? p : d); + int start = (p >= d ? d : p) + 1; + + for (int i = start; i < end; i++) { + d0.v3 = pposs[i]; + d0.cz4(); + d0.csa(s_dir, dir, f); + } + return n; + } + + @Override + public void firstm(Instances is, int i, int prnt, int dpnt, int label, Cluster cluster, long[] f) { + + // short[] pposs, int[] form, int[] lemmas, short[][] feats + for (int k = 0; k < f.length; k++) + f[k] = 0; + + short[] pposs = is.pposs[i]; + int[] form = is.forms[i]; + short[][] feats = is.feats[i]; + + int pF = form[prnt], dF = form[dpnt]; + int pL = is.plemmas[i][prnt], dL = is.plemmas[i][dpnt]; + int pP = pposs[prnt], dP = pposs[dpnt]; + + int prntLS = pF == -1 ? -1 : cluster.getLP(pF), chldLS = dF == -1 ? -1 : cluster.getLP(dF); + + final int dir = (prnt < dpnt) ? ra : la; + + if (pF > maxForm) + pF = -1; + if (pL > maxForm) + pL = -1; + + if (dF > maxForm) + dF = -1; + if (dL > maxForm) + dL = -1; + + int n = 3, c = 0; + + dl2.v1 = label; + dl2.v0 = n++; + dl2.v2 = pF; + dl2.v3 = dP; + dl2.cz4(); + f[c++] = dl2.csa(s_dir, dir); + dl2.v0 = n++; + dl2.cz3(); + f[c++] = dl2.csa(s_dir, dir); + dl2.v0 = n++; + dl2.v2 = dF; + dl2.v3 = pP; + dl2.cz4(); + f[c++] = dl2.csa(s_dir, dir); + dl2.v0 = n++; + dl2.cz3(); + f[c++] = dl2.csa(s_dir, dir); + + dwwp.v1 = label; + dwwp.v0 = n++; + dwwp.v2 = pF; + dwwp.v3 = dF; + dwwp.cz4(); + f[c++] = dwwp.csa(s_dir, dir); + + dl1.v1 = label; + dl1.v0 = n++; + dl1.v2 = dP; + dl1.cz3(); + f[c++] = dl1.csa(s_dir, dir); + dl1.v0 = n++; + dl1.v2 = pP; + dl1.cz3(); + f[c++] = dl1.csa(s_dir, dir); + dl1.v0 = n++; + dl1.v3 = dP; + dl1.cz4(); + f[c++] = dl1.csa(s_dir, dir); + + int pPm1 = prnt > 0 ? pposs[prnt - 1] : s_str, dPm1 = dpnt > 0 ? pposs[dpnt - 1] : s_str; + int pPp1 = prnt < pposs.length - 1 ? pposs[prnt + 1] : s_end, + dPp1 = dpnt < pposs.length - 1 ? pposs[dpnt + 1] : s_end; + + int pPm2 = prnt > 1 ? pposs[prnt - 2] : s_str, dPm2 = dpnt > 1 ? pposs[dpnt - 2] : s_str; + int pPp2 = prnt < pposs.length - 2 ? pposs[prnt + 2] : s_end, + dPp2 = dpnt < pposs.length - 2 ? pposs[dpnt + 2] : s_end; + + int pFm1 = prnt > 0 ? form[prnt - 1] : s_stwrd, dFm1 = dpnt > 0 ? form[dpnt - 1] : s_stwrd; + int pFp1 = prnt < form.length - 1 ? form[prnt + 1] : s_stwrd, + dFp1 = dpnt < form.length - 1 ? form[dpnt + 1] : s_stwrd; + + dl1.v0 = n++; + dl1.v2 = pP; + dl1.v3 = pPp1; + dl1.v4 = dP; + dl1.v5 = dPp1; + dl1.cz6(); + f[n++] = dl1.csa(s_dir, dir); + dl1.v0 = n++; + dl1.v5 = dPm1; + dl1.cz6(); + f[n++] = dl1.csa(s_dir, dir); + dl1.v0 = n++; + dl1.v3 = pPm1; + dl1.cz6(); + f[n++] = dl1.csa(s_dir, dir); + dl1.v0 = n++; + dl1.v5 = dPp1; + dl1.cz6(); + f[n++] = dl1.csa(s_dir, dir); + + dl1.v0 = n++; + dl1.v3 = pPm1; + dl1.cz5(); + f[n++] = dl1.csa(s_dir, dir); + dl1.v0 = n++; + dl1.v3 = dPm1; + dl1.cz5(); + f[n++] = dl1.csa(s_dir, dir); + dl1.v0 = n++; + dl1.v3 = dPp1; + dl1.cz5(); + f[n++] = dl1.csa(s_dir, dir); + dl1.v0 = n++; + dl1.v3 = pPp1; + dl1.cz5(); + f[n++] = dl1.csa(s_dir, dir); + + dl1.v0 = n++; + dl1.v2 = pP; + dl1.v3 = pPp2; + dl1.v4 = dP; + dl1.v5 = dPp2; + dl1.cz6(); + f[n++] = dl1.csa(s_dir, dir); + dl1.v0 = n++; + dl1.v5 = dPm2; + dl1.cz6(); + f[n++] = dl1.csa(s_dir, dir); + dl1.v0 = n++; + dl1.v3 = pPm2; + dl1.cz6(); + f[n++] = dl1.csa(s_dir, dir); + dl1.v0 = n++; + dl1.v5 = dPp2; + dl1.cz6(); + f[n++] = dl1.csa(s_dir, dir); + + dl1.v0 = n++; + dl1.v3 = pPm2; + dl1.cz5(); + f[n++] = dl1.csa(s_dir, dir); + dl1.v0 = n++; + dl1.v3 = dPm2; + dl1.cz5(); + f[n++] = dl1.csa(s_dir, dir); + dl1.v0 = n++; + dl1.v3 = dPp2; + dl1.cz5(); + f[n++] = dl1.csa(s_dir, dir); + dl1.v0 = n++; + dl1.v3 = pPp2; + dl1.cz5(); + f[n++] = dl1.csa(s_dir, dir); + + dl2.v0 = n++; + dl2.v3 = dFm1; + dl2.v3 = pPp1; + dl2.v4 = pP; + dl2.cz5(); + f[n++] = dl2.getVal(); + dl2.v0 = n++; + dl2.v3 = dFp1; + dl2.v3 = pPm1; + dl2.cz5(); + f[n++] = dl2.getVal(); + dl2.v0 = n++; + dl2.v3 = pFm1; + dl2.v3 = dPp1; + dl2.v4 = dP; + dl2.cz5(); + f[n++] = dl2.getVal(); + dl2.v0 = n++; + dl2.v3 = pFp1; + dl2.v3 = dPm1; + dl2.cz5(); + f[n++] = dl2.getVal(); + + dl2.v0 = n++; + dl2.v3 = dFm1; + dl2.v3 = dPm2; + dl2.v4 = pP; + dl2.cz5(); + f[n++] = dl2.getVal(); + dl2.v0 = n++; + dl2.v3 = dFp1; + dl2.v3 = dPp2; + dl2.cz5(); + f[n++] = dl2.getVal(); + dl2.v0 = n++; + dl2.v3 = pFm1; + dl2.v3 = pPm2; + dl2.v4 = dP; + dl2.cz5(); + f[n++] = dl2.getVal(); + dl2.v0 = n++; + dl2.v3 = pFp1; + dl2.v3 = pPp2; + dl2.cz5(); + f[n++] = dl2.getVal(); + + dwwp.v0 = n++; + dwwp.v2 = pF; + dwwp.v3 = dF; + dwwp.v4 = dP; + dwwp.cz5(); + f[n++] = dwwp.csa(s_dir, dir); + dwwp.v0 = n++; + dwwp.v2 = pF; + dwwp.v3 = dF; + dwwp.v4 = pP; + dwwp.cz5(); + f[n++] = dwwp.csa(s_dir, dir); + dwwp.v0 = n++; + dwwp.v2 = dF; + dwwp.v3 = pF; + dwwp.v4 = pP; + dwwp.v4 = dP; + dwwp.cz6(); + f[n++] = dwwp.csa(s_dir, dir); + + // lemmas + + dl2.v1 = label; + dl2.v0 = n++; + dl2.v2 = pL; + dl2.v3 = dP; + dl2.cz4(); + f[c++] = dl2.csa(s_dir, dir); + dl2.v0 = n++; + dl2.cz3(); + f[c++] = dl2.csa(s_dir, dir); + dl2.v0 = n++; + dl2.v2 = dL; + dl2.v3 = pP; + dl2.cz4(); + f[c++] = dl2.csa(s_dir, dir); + dl2.v0 = n++; + dl2.cz3(); + f[c++] = dl2.csa(s_dir, dir); + + dwwp.v1 = label; + dwwp.v0 = n++; + dwwp.v2 = pL; + dwwp.v3 = dL; + dwwp.cz4(); + f[c++] = dwwp.csa(s_dir, dir); + + dwp.v1 = label; + dwp.v0 = n++; + dwp.v2 = dL; + dwp.v3 = pP; + dwp.v4 = dP; + dwp.v5 = pL; + dwp.cz6(); + f[c++] = dwp.csa(s_dir, dir); + dwp.v0 = n++; + dwp.cz5(); + f[c++] = dwp.csa(s_dir, dir); + + dwp.v0 = n++; + dwp.v2 = pL; + dwp.cz5(); + f[c++] = dwp.csa(s_dir, dir); + dwwp.v0 = n++; + dwwp.v2 = pL; + dwwp.v3 = dL; + dwwp.v4 = dP; + dwwp.cz5(); + f[c++] = dwwp.csa(s_dir, dir); + dwwp.v0 = n++; + dwwp.v4 = pP; + dwwp.cz5(); + f[c++] = dwwp.csa(s_dir, dir); + + // cluster + + d2pw.v1 = label; + d2pw.v0 = n++; + d2pw.v2 = prntLS; + d2pw.v3 = chldLS; + d2pw.cz4(); + f[c++] = d2pw.csa(s_dir, dir); + d2pw.v0 = n++; + d2pw.v4 = pF; + d2pw.cz5(); + f[c++] = d2pw.csa(s_dir, dir); + d2pw.v0 = n++; + d2pw.v4 = dF; + d2pw.cz5(); + f[c++] = d2pw.csa(s_dir, dir); + d2pw.v0 = n++; + d2pw.v5 = pF; + d2pw.cz6(); + f[c++] = d2pw.csa(s_dir, dir); + + d2pp.v1 = label; + d2pp.v0 = n++; + d2pp.v2 = prntLS; + d2pp.v3 = chldLS; + d2pp.cz4(); + f[c++] = d2pp.csa(s_dir, dir); + d2pp.v0 = n++; + d2pp.v4 = pP; + d2pp.cz5(); + f[c++] = d2pp.csa(s_dir, dir); + d2pp.v0 = n++; + d2pp.v4 = dP; + d2pp.cz5(); + f[c++] = d2pp.csa(s_dir, dir); + d2pp.v0 = n++; + d2pp.v5 = pP; + d2pp.cz6(); + f[c++] = d2pp.csa(s_dir, dir); + + // take those in for stacking + // dl2.v1=label; + // dl2.v0= n++;dl2.v2=prel[dpnt];dl2.v3=pP;dl2.v4=dP; + // dl2.v5=prnt==phead[dpnt]?1:2; dl2.cz6(); f[c++]=dl2.csa(s_dir,dir); + // dl2.v0= n++;dl2.v2=pP;dl2.v3=dP; dl2.v4=prnt==phead[dpnt]?1:2; + // dl2.cz5(); f[c++]=dl2.csa(s_dir,dir); + + if (feats == null) + return; + + short[] featsP = feats[prnt], featsD = feats[dpnt]; + dlf.v0 = n++; + dlf.v1 = label; + dlf.v2 = pP; + dlf.v3 = dP; + extractFeat(f, c, dir, featsP, featsD); + + return; + } + + @Override + public void gcm(Instances is, int i, int p, int d, int gc, int label, Cluster cluster, long[] f) { + + for (int k = 0; k < f.length; k++) + f[k] = 0; + + short[] pos = is.pposs[i]; + int[] forms = is.forms[i]; + int[] lemmas = is.plemmas[i]; + short[][] feats = is.feats[i]; + + int pP = pos[p], dP = pos[d]; + int prntF = forms[p], chldF = forms[d]; + int prntL = lemmas[p], chldL = lemmas[d]; + int prntLS = prntF == -1 ? -1 : cluster.getLP(prntF), chldLS = chldF == -1 ? -1 : cluster.getLP(chldF); + + int gP = gc != -1 ? pos[gc] : s_str; + int gcF = gc != -1 ? forms[gc] : s_stwrd; + int gcL = gc != -1 ? lemmas[gc] : s_stwrd; + int gcLS = (gc != -1) && (gcF != -1) ? cluster.getLP(gcF) : s_stwrd; + + if (prntF > maxForm) + prntF = -1; + if (prntL > maxForm) + prntL = -1; + + if (chldF > maxForm) + chldF = -1; + if (chldL > maxForm) + chldL = -1; + + if (gcF > maxForm) + gcF = -1; + if (gcL > maxForm) + gcL = -1; + + int dir = (p < d) ? ra : la, dir_gra = (d < gc) ? ra : la; + + int n = 84, c = 0; + + // dl1.v023(); + dl1.v1 = label; + dl1.v0 = n++; + dl1.v2 = pP; + dl1.v3 = dP; + dl1.v4 = gP; + dl1.cz5(); + dl1.cs(s_dir, dir); + f[c++] = dl1.csa(s_dir, dir_gra); + dl1.v0 = n++; + dl1.v2 = pP; + dl1.v3 = gP; + dl1.cz4(); + dl1.cs(s_dir, dir); + f[c++] = dl1.csa(s_dir, dir_gra); + dl1.v0 = n++; + dl1.v2 = dP; + dl1.cz4(); + dl1.cs(s_dir, dir); + f[c++] = dl1.csa(s_dir, dir_gra); + + dwwp.v1 = label; + dwwp.v0 = n++; + dwwp.v2 = prntF; + dwwp.v3 = gcF; + dwwp.cz4(); + dwwp.cs(s_dir, dir); + f[c++] = dwwp.csa(s_dir, dir_gra); + + dwwp.v0 = n++; + dwwp.v2 = chldF; + dwwp.v3 = gcF; + dwwp.cz4(); + dwwp.cs(s_dir, dir); + f[c++] = dwwp.csa(s_dir, dir_gra); + + dwp.v1 = label; + dwp.v0 = n++; + dwp.v2 = gcF; + dwp.v3 = pP; + dwp.cz4(); + dwp.cs(s_dir, dir); + f[c++] = dwp.csa(s_dir, dir_gra); + + dwp.v0 = n++; + dwp.v2 = gcF; + dwp.v3 = dP; + dwp.cz4(); + dwp.cs(s_dir, dir); + f[c++] = dwp.csa(s_dir, dir_gra); + + dwp.v0 = n++; + dwp.v2 = prntF; + dwp.v3 = gP; + dwp.cz4(); + dwp.cs(s_dir, dir); + f[c++] = dwp.csa(s_dir, dir_gra); + + dwp.v0 = n++; + dwp.v2 = chldF; + dwp.v3 = gP; + dwp.cz4(); + dwp.cs(s_dir, dir); + f[c++] = dwp.csa(s_dir, dir_gra); + + // lemma + + dwwp.v0 = n++; + dwwp.v2 = prntL; + dwwp.v3 = gcL; + dwwp.cz4(); + dwwp.cs(s_dir, dir); + f[c++] = dwwp.csa(s_dir, dir_gra); + + dwwp.v0 = n++; + dwwp.v2 = chldL; + dwwp.v3 = gcL; + dwwp.cz4(); + dwwp.cs(s_dir, dir); + f[c++] = dwwp.csa(s_dir, dir_gra); + + dwp.v0 = n++; + dwp.v2 = gcL; + dwp.v3 = pP; + dwp.cz4(); + dwp.cs(s_dir, dir); + f[c++] = dwp.csa(s_dir, dir_gra); + + dwp.v0 = n++; + dwp.v2 = gcL; + dwp.v3 = dP; + dwp.cz4(); + dwp.cs(s_dir, dir); + f[c++] = dwp.csa(s_dir, dir_gra); + + dwp.v0 = n++; + dwp.v2 = prntL; + dwp.v3 = gP; + dwp.cz4(); + dwp.cs(s_dir, dir); + f[c++] = dwp.csa(s_dir, dir_gra); + + dwp.v0 = n++; + dwp.v2 = chldL; + dwp.v3 = gP; + dwp.cz4(); + dwp.cs(s_dir, dir); + f[c++] = dwp.csa(s_dir, dir_gra); + + // clusters + + d2lp.v1 = label; + d2lp.v0 = n++; + d2lp.v2 = prntLS; + d2lp.v3 = gcLS; + d2lp.cz4(); + d2lp.cs(s_dir, dir); + f[c++] = d2lp.csa(s_dir, dir_gra);// f.add(li.l2i(l)); + d2lp.v0 = n++; + d2lp.v2 = chldLS; + d2lp.v3 = gcLS; + d2lp.cz4(); + d2lp.cs(s_dir, dir); + f[c++] = d2lp.csa(s_dir, dir_gra); + d3lp.v0 = n++; + d3lp.v1 = label; + d3lp.v2 = prntLS; + d3lp.v3 = chldLS; + d3lp.v4 = gcLS; + d3lp.cz5(); + d3lp.cs(s_dir, dir); + f[c++] = d3lp.csa(s_dir, dir_gra); + + // _f83; + d2lp.v0 = n++; + d2lp.v2 = prntLS; + d2lp.v3 = chldLS; + d2lp.v4 = gcF; + d2lp.cz5(); + f[c++] = d2lp.csa(s_dir, dir); + d2lp.v0 = n++; + d2lp.v2 = prntLS; + d2lp.v3 = gcLS; + d2lp.v4 = chldF; + d2lp.cz5(); + f[c++] = d2lp.csa(s_dir, dir); + d2lp.v0 = n++; + d2lp.v2 = chldLS; + d2lp.v3 = gcLS; + d2lp.v4 = prntF; + d2lp.cz5(); + f[c++] = d2lp.csa(s_dir, dir); + + d2pp.v1 = label; + d2pp.v0 = n++; + d2pp.v2 = prntLS; + d2pp.v3 = chldLS; + d2pp.v4 = gP; + d2pp.cz5(); + f[c++] = d2pp.csa(s_dir, dir); + d2pp.v0 = n++; + d2pp.v2 = prntLS; + d2pp.v3 = gcLS; + d2pp.v4 = dP; + d2pp.cz5(); + f[c++] = d2pp.csa(s_dir, dir); + d2pp.v0 = n++; + d2pp.v2 = chldLS; + d2pp.v3 = gcLS; + d2pp.v4 = pP; + d2pp.cz5(); + f[c++] = d2pp.csa(s_dir, dir); + + // linear features + + int prntPm1 = p != 0 ? pos[p - 1] : s_str; // parent-pos-minus1 + int chldPm1 = d - 1 >= 0 ? pos[d - 1] : s_str; // child-pos-minus1 + int prntPp1 = p != pos.length - 1 ? pos[p + 1] : s_end; + int chldPp1 = d != pos.length - 1 ? pos[d + 1] : s_end; + + int gcPm1 = gc > 0 ? pos[gc - 1] : s_str; + int gcPp1 = gc < pos.length - 1 ? pos[gc + 1] : s_end; + + dl1.v0 = n++; + dl1.v2 = gP; + dl1.v3 = gcPp1; + dl1.v4 = dP; + dl1.cz5(); + f[c++] = dl1.csa(s_dir, dir); + dl1.v0 = n++; + dl1.v2 = gP; + dl1.v3 = gcPm1; + dl1.v4 = dP; + dl1.cz5(); + f[c++] = dl1.csa(s_dir, dir); + dl1.v0 = n++; + dl1.v2 = gP; + dl1.v3 = dP; + dl1.v4 = chldPp1; + dl1.cz5(); + f[c++] = dl1.csa(s_dir, dir); + dl1.v0 = n++; + dl1.v2 = gP; + dl1.v3 = dP; + dl1.v4 = chldPm1; + dl1.cz5(); + f[c++] = dl1.csa(s_dir, dir); + dl1.v0 = n++; + dl1.v2 = gP; + dl1.v3 = gcPp1; + dl1.v4 = chldPm1; + dl1.v5 = dP; + dl1.cz6(); + f[c++] = dl1.csa(s_dir, dir); + dl1.v0 = n++; + dl1.v2 = gcPm1; + dl1.v3 = gP; + dl1.v4 = chldPm1; + dl1.v5 = dP; + dl1.cz6(); + f[c++] = dl1.csa(s_dir, dir); + dl1.v0 = n++; + dl1.v2 = gP; + dl1.v3 = gcPp1; + dl1.v4 = dP; + dl1.v5 = chldPp1; + dl1.cz6(); + f[c++] = dl1.csa(s_dir, dir); + dl1.v0 = n++; + dl1.v2 = gcPm1; + dl1.v3 = gP; + dl1.v4 = dP; + dl1.cz6(); + f[c++] = dl1.csa(s_dir, dir); + dl1.v0 = n++; + dl1.v2 = gP; + dl1.v3 = gcPp1; + dl1.v4 = pP; + dl1.cz5(); + f[c++] = dl1.csa(s_dir, dir); + dl1.v0 = n++; + dl1.v2 = gP; + dl1.v3 = gcPm1; + dl1.v4 = pP; + dl1.cz5(); + f[c++] = dl1.csa(s_dir, dir); + dl1.v0 = n++; + dl1.v2 = gP; + dl1.v3 = pP; + dl1.v4 = prntPp1; + dl1.cz5(); + f[c++] = dl1.csa(s_dir, dir); + dl1.v0 = n++; + dl1.v2 = gP; + dl1.v3 = pP; + dl1.v4 = prntPm1; + dl1.cz5(); + f[c++] = dl1.csa(s_dir, dir); + dl1.v0 = n++; + dl1.v2 = gP; + dl1.v3 = gcPp1; + dl1.v4 = prntPm1; + dl1.v5 = pP; + dl1.cz6(); + f[c++] = dl1.csa(s_dir, dir); + dl1.v0 = n++; + dl1.v2 = gcPm1; + dl1.v3 = gP; + dl1.v4 = prntPm1; + dl1.v5 = pP; + dl1.cz6(); + f[c++] = dl1.csa(s_dir, dir); + dl1.v0 = n++; + dl1.v2 = gP; + dl1.v3 = gcPp1; + dl1.v4 = pP; + dl1.v5 = prntPp1; + dl1.cz6(); + f[c++] = dl1.csa(s_dir, dir); + dl1.v0 = n++; + dl1.v2 = gcPm1; + dl1.v3 = gP; + dl1.v4 = pP; + dl1.v5 = prntPp1; + dl1.cz6(); + f[c++] = dl1.csa(s_dir, dir); + + int pLSp1 = p != pos.length - 1 ? forms[p + 1] == -1 ? -1 : cluster.getLP(forms[p + 1]) : _cend; + int cLSp1 = d != pos.length - 1 ? forms[d + 1] == -1 ? -1 : cluster.getLP(forms[d + 1]) : _cend; + int gcLSp1 = gc < pos.length - 1 ? forms[gc + 1] == -1 ? -1 : cluster.getLP(forms[gc + 1]) : s_end; + + int pLSm1 = p != 0 ? lemmas[p - 1] == -1 ? -1 : cluster.getLP(lemmas[p - 1]) : _cstr; + int cLSm1 = d - 1 >= 0 ? lemmas[d - 1] == -1 ? -1 : cluster.getLP(lemmas[d - 1]) : _cstr; + int gcLSm1 = gc > 0 ? lemmas[gc - 1] == -1 ? -1 : cluster.getLP(lemmas[gc - 1]) : _cstr; + + dl1.v0 = n++; + dl1.v2 = gP; + dl1.v3 = gcLSp1; + dl1.v4 = dP; + dl1.cz5(); + f[c++] = dl1.csa(s_dir, dir); + dl1.v0 = n++; + dl1.v2 = gP; + dl1.v3 = gcLSm1; + dl1.v4 = dP; + dl1.cz5(); + f[c++] = dl1.csa(s_dir, dir); + dl1.v0 = n++; + dl1.v2 = gP; + dl1.v3 = dP; + dl1.v4 = cLSp1; + dl1.cz5(); + f[c++] = dl1.csa(s_dir, dir); + dl1.v0 = n++; + dl1.v2 = gP; + dl1.v3 = dP; + dl1.v4 = cLSm1; + dl1.cz5(); + f[c++] = dl1.csa(s_dir, dir); + dl1.v0 = n++; + dl1.v2 = gP; + dl1.v3 = gcLSp1; + dl1.v4 = cLSm1; + dl1.v5 = dP; + dl1.cz6(); + f[c++] = dl1.csa(s_dir, dir); + dl1.v0 = n++; + dl1.v2 = gcLSm1; + dl1.v3 = gP; + dl1.v4 = cLSm1; + dl1.v5 = dP; + dl1.cz6(); + f[c++] = dl1.csa(s_dir, dir); + dl1.v0 = n++; + dl1.v2 = gP; + dl1.v3 = gcLSp1; + dl1.v4 = dP; + dl1.v5 = cLSp1; + dl1.cz6(); + f[c++] = dl1.csa(s_dir, dir); + dl1.v0 = n++; + dl1.v2 = cLSm1; + dl1.v3 = gP; + dl1.v4 = dP; + dl1.cz6(); + f[c++] = dl1.csa(s_dir, dir); + dl1.v0 = n++; + dl1.v2 = gP; + dl1.v3 = gcLSp1; + dl1.v4 = pP; + dl1.cz5(); + f[c++] = dl1.csa(s_dir, dir); + dl1.v0 = n++; + dl1.v2 = gP; + dl1.v3 = gcLSm1; + dl1.v4 = pP; + dl1.cz5(); + f[c++] = dl1.csa(s_dir, dir); + dl1.v0 = n++; + dl1.v2 = gP; + dl1.v3 = pP; + dl1.v4 = pLSp1; + dl1.cz5(); + f[c++] = dl1.csa(s_dir, dir); + dl1.v0 = n++; + dl1.v2 = gP; + dl1.v3 = pP; + dl1.v4 = pLSm1; + dl1.cz5(); + f[c++] = dl1.csa(s_dir, dir); + dl1.v0 = n++; + dl1.v2 = gP; + dl1.v3 = gcLSp1; + dl1.v4 = pLSm1; + dl1.v5 = pP; + dl1.cz6(); + f[c++] = dl1.csa(s_dir, dir); + dl1.v0 = n++; + dl1.v2 = gcLSm1; + dl1.v3 = gP; + dl1.v4 = pLSm1; + dl1.v5 = pP; + dl1.cz6(); + f[c++] = dl1.csa(s_dir, dir); + dl1.v0 = n++; + dl1.v2 = gP; + dl1.v3 = gcLSp1; + dl1.v4 = pP; + dl1.v5 = pLSp1; + dl1.cz6(); + f[c++] = dl1.csa(s_dir, dir); + dl1.v0 = n++; + dl1.v2 = gcLSm1; + dl1.v3 = gP; + dl1.v4 = pP; + dl1.v5 = pLSp1; + dl1.cz6(); + f[c++] = dl1.csa(s_dir, dir); + + if (gc >= 0) { + } + + // take those in for stacking + /* + * dl2.v1=label; dl2.v0= + * n++;dl2.v2=prel[d];dl2.v3=g;dl2.v4=gP;dl2.v5=dP;dl2.cz6();f[c++]=dl2. + * csa(s_dir,dir); dl2.v0= + * n++;dl2.v2=prel[d];dl2.v3=g;dl2.v4=gP;dl2.v5=pP;dl2.cz6();f[c++]=dl2. + * csa(s_dir,dir); dl2.v0= + * n++;dl2.v2=prel[d];dl2.v3=g;dl2.v4=gP;dl2.v5=pP;dl2.v6=dP;dl2.cz7();f + * [c++]=dl2.csa(s_dir,dir); + * + * dl2.v0= + * n++;dl2.v2=gr;dl2.v3=g;dl2.v4=gP;dl2.v5=dP;dl2.cz6();f[c++]=dl2.csa( + * s_dir,dir); dl2.v0= + * n++;dl2.v2=gr;dl2.v3=g;dl2.v4=gP;dl2.v5=pP;dl2.cz6();f[c++]=dl2.csa( + * s_dir,dir); dl2.v0= + * n++;dl2.v2=gr;dl2.v3=g;dl2.v4=gP;dl2.v5=pP;dl2.v6=dP;dl2.cz7();f[c++] + * =dl2.csa(s_dir,dir); + * + */ + if (feats == null) + return; + + short[] featsP = feats[d]; + short[] featsD = gc != -1 ? feats[gc] : null; + + dlf.v0 = n++; + dlf.v1 = label; + dlf.v2 = gP; + dlf.v3 = dP; + extractFeat(f, c, dir, featsP, featsD); + return; + } + + @Override + public void siblingm(Instances is, int i, short pos[], int forms[], int[] lemmas, short[][] feats, int prnt, int d, + int sblng, int label, Cluster cluster, long[] f, int v) { + + for (int k = 0; k < f.length; k++) + f[k] = 0; + + int pP = pos[prnt], dP = pos[d]; + int prntF = forms[prnt], chldF = forms[d]; + int prntL = lemmas[prnt], chldL = lemmas[d]; + int prntLS = prntF == -1 ? -1 : cluster.getLP(prntF), chldLS = chldF == -1 ? -1 : cluster.getLP(chldF); + + int sP = sblng != -1 ? pos[sblng] : s_str, sblF = sblng != -1 ? forms[sblng] : s_stwrd, + sblL = sblng != -1 ? lemmas[sblng] : s_stwrd; + + int sblLS = (sblng != -1) && (sblF != -1) ? cluster.getLP(sblF) : s_stwrd; + + int dir = (prnt < d) ? ra : la; + + int abs = Math.abs(prnt - d); + + final int dist; + if (abs > 10) + dist = d10; + else if (abs > 5) + dist = d5; + else if (abs == 5) + dist = d4; + else if (abs == 4) + dist = d3; + else if (abs == 3) + dist = d2; + else if (abs == 2) + dist = d1; + else + dist = di0; + + int n = 147; + + if (prntF > maxForm) + prntF = -1; + if (prntL > maxForm) + prntL = -1; + + if (chldF > maxForm) + chldF = -1; + if (chldL > maxForm) + chldL = -1; + + if (sblF > maxForm) + sblF = -1; + if (sblL > maxForm) + sblL = -1; + + dl1.v0 = n++; + dl1.v1 = label; + dl1.v2 = pP; + dl1.v3 = dP; + dl1.v4 = sP; + dl1.cz5(); + f[0] = dl1.csa(s_dir, dir); + f[1] = dl1.csa(s_dist, dist); + dl1.v0 = n++; + dl1.v3 = sP; + dl1.cz4(); + f[2] = dl1.csa(s_dir, dir); + f[3] = dl1.csa(s_dist, dist); + dl1.v0 = n++; + dl1.v2 = dP; + dl1.cz4(); + f[4] = dl1.csa(s_dir, dir); + f[5] = dl1.csa(s_dist, dist); + + // sibling only could be tried + dwwp.v1 = label; + dwwp.v0 = n++; + dwwp.v2 = prntF; + dwwp.v3 = sblF; + dwwp.cz4(); + f[6] = dwwp.csa(s_dir, dir); + f[7] = dwwp.csa(s_dist, dist); + dwwp.v0 = n++; + dwwp.v2 = chldF; + dwwp.cz4(); + f[8] = dwwp.csa(s_dir, dir); + f[9] = dwwp.csa(s_dist, dist); + dwp.v0 = n++; + dwp.v1 = label; + dwp.v2 = sblF; + dwp.v3 = pP; + dwp.cz4(); + f[10] = dwp.csa(s_dir, dir); + f[11] = dwp.csa(s_dist, dist); + dwp.v0 = n++; + /* dwp.v1=label; */dwp.v3 = dP; + dwp.cz4(); + f[12] = dwp.csa(s_dir, dir); + f[13] = dwp.csa(s_dist, dist); + dwp.v0 = n++; + /* dwp.v1=label; */ dwp.v2 = prntF; + dwp.v3 = sP; + dwp.cz4(); + f[14] = dwp.csa(s_dir, dir); + f[15] = dwp.csa(s_dist, dist); + dwp.v0 = n++; + /* dwp.v1=label; */ dwp.v2 = chldF; + dwp.cz4(); + f[16] = dwp.csa(s_dir, dir); + f[17] = dwp.csa(s_dist, dist); + + // lemmas + dwwp.v0 = n++; + dwwp.v2 = prntL; + dwwp.v3 = sblL; + dwwp.cz4(); + f[18] = dwwp.csa(s_dir, dir); + dwwp.v0 = n++; + dwwp.v2 = chldL; + dwwp.cz4(); + f[19] = dwwp.csa(s_dir, dir); + f[20] = dwwp.csa(s_dist, dist); + dwp.v0 = n++; + /* dwp.v1=label; */ dwp.v2 = sblL; + dwp.v3 = pP; + dwp.cz4(); + f[21] = dwp.csa(s_dir, dir); + f[22] = dwp.csa(s_dist, dist); + dwp.v0 = n++; + /* dwp.v1=label; */ dwp.v3 = dP; + dwp.cz4(); + f[23] = dwp.csa(s_dir, dir); + f[24] = dwp.csa(s_dist, dist); + dwp.v0 = n++; + /* dwp.v1=label; */ dwp.v2 = prntL; + dwp.v3 = sP; + dwp.cz4(); + f[25] = dwp.csa(s_dir, dir); + f[26] = dwp.csa(s_dist, dist); + dwp.v0 = n++; + /* dwp.v1=label; */ dwp.v2 = chldL; + dwp.cz4(); + f[27] = dwp.csa(s_dir, dir); + f[28] = dwp.csa(s_dist, dist); + + // clusters + + d2lp.v1 = label; + d2lp.v0 = n++; + d2lp.v2 = prntLS; + d2lp.v3 = sblLS; + d2lp.cz4(); + f[29] = d2lp.csa(s_dir, dir); + d2lp.v0 = n++; + d2lp.v2 = chldLS; + d2lp.v3 = sblLS; + d2lp.cz4(); + f[30] = d2lp.csa(s_dir, dir); + f[31] = d2lp.csa(s_dist, dist); + + d3lp.v1 = label; + d3lp.v0 = n++; + d3lp.v2 = prntLS; + d3lp.v3 = chldLS; + d3lp.v4 = sblLS; + d3lp.cz5(); + f[32] = d3lp.csa(s_dir, dir); + + d2lp.v0 = n++; + d2lp.v2 = prntLS; + d2lp.v3 = chldLS; + d2lp.v4 = sblF; + d2lp.cz5(); + f[33] = d2lp.csa(s_dir, dir); + f[34] = d2lp.csa(s_dist, dist); + d2lp.v0 = n++; + d2lp.v2 = prntLS; + d2lp.v3 = sblLS; + d2lp.v4 = chldF; + d2lp.cz5(); + f[35] = d2lp.csa(s_dir, dir); + f[36] = d2lp.csa(s_dist, dist); + d2lp.v0 = n++; + d2lp.v2 = chldLS; + d2lp.v3 = sblLS; + d2lp.v4 = prntF; + d2lp.cz5(); + f[37] = d2lp.csa(s_dir, dir); + f[38] = d2lp.csa(s_dist, dist); + + d2pp.v1 = label; + d2pp.v0 = n++; + d2pp.v2 = prntLS; + d2pp.v3 = chldLS; + d2pp.v4 = sP; + d2pp.cz5(); + f[39] = d2pp.csa(s_dir, dir); + f[40] = d2pp.csa(s_dist, dist); + d2pp.v0 = n++; + d2pp.v2 = prntLS; + d2pp.v3 = sblLS; + d2pp.v4 = dP; + d2pp.cz5(); + f[41] = d2pp.csa(s_dir, dir); + f[42] = d2pp.csa(s_dist, dist); + d2pp.v0 = n++; + d2pp.v2 = chldLS; + d2pp.v3 = sblLS; + d2pp.v4 = pP; + d2pp.cz5(); + f[43] = d2pp.csa(s_dir, dir); + f[44] = d2pp.csa(s_dist, dist); + + int prntPm1 = prnt != 0 ? pos[prnt - 1] : s_str; + int chldPm1 = d - 1 >= 0 ? pos[d - 1] : s_str; + int prntPp1 = prnt != pos.length - 1 ? pos[prnt + 1] : s_end; + int chldPp1 = d != pos.length - 1 ? pos[d + 1] : s_end; + + // sibling part of speech minus and plus 1 + int sblPm1 = sblng > 0 ? pos[sblng - 1] : s_str; + int sblPp1 = sblng < pos.length - 1 ? pos[sblng + 1] : s_end; + + dl1.v0 = n++; + dl1.v2 = sP; + dl1.v3 = sblPp1; + dl1.v4 = pP; + dl1.cz5(); + f[45] = dl1.csa(s_dir, dir); + dl1.v0 = n++; + dl1.v2 = sP; + dl1.v3 = sblPm1; + dl1.v4 = pP; + dl1.cz5(); + f[46] = dl1.csa(s_dir, dir);// f.add(li.l2i(l)); + dl1.v0 = n++; + dl1.v2 = sP; + dl1.v3 = pP; + dl1.v4 = prntPp1; + dl1.cz5(); + f[47] = dl1.csa(s_dir, dir);// f.add(li.l2i(l)); + dl1.v0 = n++; + dl1.v2 = sP; + dl1.v3 = pP; + dl1.v4 = prntPm1; + dl1.cz5(); + f[48] = dl1.csa(s_dir, dir);// f.add(li.l2i(l)); + dl1.v0 = n++; + dl1.v2 = sP; + dl1.v3 = sblPp1; + dl1.v4 = prntPm1; + dl1.v5 = pP; + dl1.cz6(); + f[49] = dl1.csa(s_dir, dir); + dl1.v0 = n++; + dl1.v2 = sblPm1; + dl1.v3 = sP; + dl1.v4 = prntPm1; + dl1.v5 = pP; + dl1.cz6(); + f[50] = dl1.csa(s_dir, dir);// f.add(li.l2i(l)); + dl1.v0 = n++; + dl1.v2 = sP; + dl1.v3 = sblPp1; + dl1.v4 = pP; + dl1.v5 = prntPp1; + dl1.cz6(); + f[51] = dl1.csa(s_dir, dir);// f.add(li.l2i(l)); + dl1.v0 = n++; + dl1.v2 = sblPm1; + dl1.v3 = sP; + dl1.v4 = pP; + dl1.v5 = prntPp1; + dl1.cz6(); + f[52] = dl1.csa(s_dir, dir);// f.add(li.l2i(l)); + dl1.v0 = n++; + dl1.v2 = sP; + dl1.v3 = sblPp1; + dl1.v4 = dP; + dl1.cz5(); + f[53] = dl1.csa(s_dir, dir); + dl1.v0 = n++; + dl1.v2 = sP; + dl1.v3 = sblPm1; + dl1.v4 = dP; + dl1.cz5(); + f[54] = dl1.csa(s_dir, dir); + dl1.v0 = n++; + dl1.v2 = sP; + dl1.v3 = dP; + dl1.v4 = chldPp1; + dl1.cz5(); + f[55] = dl1.csa(s_dir, dir); + dl1.v0 = n++; + dl1.v2 = sP; + dl1.v3 = dP; + dl1.v4 = chldPm1; + dl1.cz5(); + f[56] = dl1.csa(s_dir, dir); + dl1.v0 = n++; + dl1.v2 = sP; + dl1.v3 = sblPp1; + dl1.v4 = chldPm1; + dl1.v5 = dP; + dl1.cz6(); + f[57] = dl1.csa(s_dir, dir);// f.add(li.l2i(l)); + dl1.v0 = n++; + dl1.v2 = sblPm1; + dl1.v3 = sP; + dl1.v4 = chldPm1; + dl1.v5 = dP; + dl1.cz6(); + f[58] = dl1.csa(s_dir, dir); + dl1.v0 = n++; + dl1.v2 = sP; + dl1.v3 = sblPp1; + dl1.v4 = dP; + dl1.v5 = chldPp1; + dl1.cz6(); + f[59] = dl1.csa(s_dir, dir);// f.add(li.l2i(l)); + dl1.v0 = n++; + dl1.v2 = sblPm1; + dl1.v3 = sP; + dl1.v4 = dP; + dl1.v5 = chldPp1; + dl1.cz6(); + f[60] = dl1.csa(s_dir, dir); + + int c = 61; + + int pLSp1 = prnt != pos.length - 1 ? forms[prnt + 1] == -1 ? -1 : cluster.getLP(forms[prnt + 1]) : _cend; + int cLSp1 = d != pos.length - 1 ? forms[d + 1] == -1 ? -1 : cluster.getLP(forms[d + 1]) : _cend; + int sLSp1 = sblng < pos.length - 1 ? forms[sblng + 1] == -1 ? -1 : cluster.getLP(forms[sblng + 1]) : _cend; + + int pLSm1 = prnt != 0 ? forms[prnt - 1] == -1 ? -1 : cluster.getLP(forms[prnt - 1]) : _cstr; + int cLSm1 = d - 1 >= 0 ? forms[d - 1] == -1 ? -1 : cluster.getLP(forms[d - 1]) : _cstr; + int sLSm1 = sblng > 0 ? forms[sblng - 1] == -1 ? -1 : cluster.getLP(forms[sblng - 1]) : _cstr; + + // int c=61; + + dl1.v0 = n++; + dl1.v2 = sP; + dl1.v3 = sLSp1; + dl1.v4 = pP; + dl1.cz5(); + f[c++] = dl1.csa(s_dir, dir); + dl1.v0 = n++; + dl1.v2 = sP; + dl1.v3 = sLSm1; + dl1.v4 = pP; + dl1.cz5(); + f[c++] = dl1.csa(s_dir, dir); + dl1.v0 = n++; + dl1.v2 = sP; + dl1.v3 = pP; + dl1.v4 = pLSp1; + dl1.cz5(); + f[c++] = dl1.csa(s_dir, dir); + dl1.v0 = n++; + dl1.v2 = sP; + dl1.v3 = pP; + dl1.v4 = pLSm1; + dl1.cz5(); + f[c++] = dl1.csa(s_dir, dir); + dl1.v0 = n++; + dl1.v2 = sP; + dl1.v3 = sLSp1; + dl1.v4 = pLSm1; + dl1.v5 = pP; + dl1.cz6(); + f[c++] = dl1.csa(s_dir, dir); + dl1.v0 = n++; + dl1.v2 = sLSm1; + dl1.v3 = sP; + dl1.v4 = pLSm1; + dl1.v5 = pP; + dl1.cz6(); + f[c++] = dl1.csa(s_dir, dir); + dl1.v0 = n++; + dl1.v2 = sP; + dl1.v3 = sLSp1; + dl1.v4 = pP; + dl1.v5 = pLSp1; + dl1.cz6(); + f[c++] = dl1.csa(s_dir, dir); + dl1.v0 = n++; + dl1.v2 = sLSm1; + dl1.v3 = sP; + dl1.v4 = pP; + dl1.v5 = pLSp1; + dl1.cz6(); + f[c++] = dl1.csa(s_dir, dir); + dl1.v0 = n++; + dl1.v2 = sP; + dl1.v3 = sLSp1; + dl1.v4 = dP; + dl1.cz5(); + f[c++] = dl1.csa(s_dir, dir); + dl1.v0 = n++; + dl1.v2 = sP; + dl1.v3 = sLSm1; + dl1.v4 = dP; + dl1.cz5(); + f[c++] = dl1.csa(s_dir, dir); + dl1.v0 = n++; + dl1.v2 = sP; + dl1.v3 = dP; + dl1.v4 = cLSp1; + dl1.cz5(); + f[c++] = dl1.csa(s_dir, dir); + dl1.v0 = n++; + dl1.v2 = sP; + dl1.v3 = dP; + dl1.v4 = cLSm1; + dl1.cz5(); + f[c++] = dl1.csa(s_dir, dir); + dl1.v0 = n++; + dl1.v2 = sP; + dl1.v3 = sLSm1; + dl1.v4 = cLSm1; + dl1.v5 = dP; + dl1.cz6(); + f[c++] = dl1.csa(s_dir, dir); + dl1.v0 = n++; + dl1.v2 = sLSm1; + dl1.v3 = sP; + dl1.v4 = cLSm1; + dl1.v5 = dP; + dl1.cz6(); + f[c++] = dl1.csa(s_dir, dir); + dl1.v0 = n++; + dl1.v2 = sP; + dl1.v3 = sLSp1; + dl1.v4 = dP; + dl1.v5 = cLSp1; + dl1.cz6(); + f[c++] = dl1.csa(s_dir, dir); + dl1.v0 = n++; + dl1.v2 = sLSm1; + dl1.v3 = sP; + dl1.v4 = dP; + dl1.v5 = cLSp1; + dl1.cz6(); + f[c++] = dl1.csa(s_dir, dir); + + dl1.v0 = n++; + dl1.v2 = sP; + dl1.v3 = sLSp1; + dl1.v4 = pP; + dl1.cz5(); + f[c++] = dl1.csa(s_dir, dir); + dl1.v0 = n++; + dl1.v2 = sP; + dl1.v3 = sLSm1; + dl1.v4 = pP; + dl1.cz5(); + f[c++] = dl1.csa(s_dir, dir); + dl1.v0 = n++; + dl1.v2 = sP; + dl1.v3 = pP; + dl1.v4 = pLSp1; + dl1.cz5(); + f[c++] = dl1.csa(s_dir, dir); + dl1.v0 = n++; + dl1.v2 = sP; + dl1.v3 = pP; + dl1.v4 = pLSm1; + dl1.cz5(); + f[c++] = dl1.csa(s_dir, dir); + dl1.v0 = n++; + dl1.v2 = sP; + dl1.v3 = sLSp1; + dl1.v4 = pLSm1; + dl1.v5 = pP; + dl1.cz6(); + f[c++] = dl1.csa(s_dir, dir); + dl1.v0 = n++; + dl1.v2 = sLSm1; + dl1.v3 = sP; + dl1.v4 = pLSm1; + dl1.v5 = pP; + dl1.cz6(); + f[c++] = dl1.csa(s_dir, dir); + dl1.v0 = n++; + dl1.v2 = sP; + dl1.v3 = sLSp1; + dl1.v4 = pP; + dl1.v5 = pLSp1; + dl1.cz6(); + f[c++] = dl1.csa(s_dir, dir); + dl1.v0 = n++; + dl1.v2 = sLSm1; + dl1.v3 = sP; + dl1.v4 = pP; + dl1.v5 = pLSp1; + dl1.cz6(); + f[c++] = dl1.csa(s_dir, dir); + dl1.v0 = n++; + dl1.v2 = sP; + dl1.v3 = sLSp1; + dl1.v4 = dP; + dl1.cz5(); + f[c++] = dl1.csa(s_dir, dir); + dl1.v0 = n++; + dl1.v2 = sP; + dl1.v3 = sLSm1; + dl1.v4 = dP; + dl1.cz5(); + f[c++] = dl1.csa(s_dir, dir); + dl1.v0 = n++; + dl1.v2 = sP; + dl1.v3 = dP; + dl1.v4 = cLSp1; + dl1.cz5(); + f[c++] = dl1.csa(s_dir, dir); + dl1.v0 = n++; + dl1.v2 = sP; + dl1.v3 = dP; + dl1.v4 = cLSm1; + dl1.cz5(); + f[c++] = dl1.csa(s_dir, dir); + dl1.v0 = n++; + dl1.v2 = sP; + dl1.v3 = sLSm1; + dl1.v4 = cLSm1; + dl1.v5 = dP; + dl1.cz6(); + f[c++] = dl1.csa(s_dir, dir); + dl1.v0 = n++; + dl1.v2 = sLSm1; + dl1.v3 = sP; + dl1.v4 = cLSm1; + dl1.v5 = dP; + dl1.cz6(); + f[c++] = dl1.csa(s_dir, dir); + dl1.v0 = n++; + dl1.v2 = sP; + dl1.v3 = sLSp1; + dl1.v4 = dP; + dl1.v5 = cLSp1; + dl1.cz6(); + f[c++] = dl1.csa(s_dir, dir); + dl1.v0 = n++; + dl1.v2 = sLSm1; + dl1.v3 = sP; + dl1.v4 = dP; + dl1.v5 = cLSp1; + dl1.cz6(); + f[c++] = dl1.csa(s_dir, dir); + + // take those in for stacking + + /* + * short[] prel = is.plabels[i],phead=is.pheads[i]; + * + * int g = prnt==phead[d]?1:2 ; if (sblng>=0) g += + * prnt==phead[sblng]?4:8; + * + * int gr = sblng==-1?s_relend:prel[sblng]; + * + * + * dl2.v0= + * n++;dl2.v2=prel[d];dl2.v3=g;dl2.v4=sP;dl2.v5=dP;dl2.cz6();f[c++]=dl2. + * csa(s_dir,dir); dl2.v0= + * n++;dl2.v2=prel[d];dl2.v3=g;dl2.v4=sP;dl2.v5=pP;dl2.cz6();f[c++]=dl2. + * csa(s_dir,dir); dl2.v0= + * n++;dl2.v2=prel[d];dl2.v3=g;dl2.v4=sP;dl2.v5=pP;dl2.v6=dP;dl2.cz7();f + * [c++]=dl2.csa(s_dir,dir); + * + * dl2.v0= + * n++;dl2.v2=gr;dl2.v3=g;dl2.v4=sP;dl2.v5=dP;dl2.cz6();f[c++]=dl2.csa( + * s_dir,dir); dl2.v0= + * n++;dl2.v2=gr;dl2.v3=g;dl2.v4=sP;dl2.v5=pP;dl2.cz6();f[c++]=dl2.csa( + * s_dir,dir); dl2.v0= + * n++;dl2.v2=gr;dl2.v3=g;dl2.v4=sP;dl2.v5=pP;dl2.v6=dP;dl2.cz7();f[c++] + * =dl2.csa(s_dir,dir); + */ + + if (feats == null) + return; + + int cnt = c; + + short[] featsP = feats[d]; + short[] featsSbl = sblng != -1 ? feats[sblng] : null; + + dlf.v0 = n++; + dlf.v1 = label; + dlf.v2 = sP; + dlf.v3 = dP; + + cnt = extractFeat(f, cnt, dir, featsP, featsSbl); + + featsP = feats[prnt]; + featsSbl = sblng != -1 ? feats[sblng] : null; + + dlf.v0 = n++; + dlf.v1 = label; + dlf.v2 = pP; + dlf.v3 = sP; + if (featsP != null && featsSbl != null) { + for (short i1 = 0; i1 < featsP.length; i1++) { + for (short i2 = 0; i2 < featsSbl.length; i2++) { + dlf.v4 = featsP[i1]; + dlf.v5 = featsSbl[i2]; + dlf.cz6(); + f[cnt++] = dlf.csa(s_dir, prnt < sblng ? 1 : 2); + } + } + } else if (featsP == null && featsSbl != null) { + + for (short i2 = 0; i2 < featsSbl.length; i2++) { + dlf.v4 = nofeat; + dlf.v5 = featsSbl[i2]; + dlf.cz6(); + f[cnt++] = dlf.csa(s_dir, dir); + } + + } else if (featsP != null && featsSbl == null) { + + for (short i1 = 0; i1 < featsP.length; i1++) { + dlf.v4 = featsP[i1]; + dlf.v5 = nofeat; + dlf.cz6(); + f[cnt++] = dlf.csa(s_dir, dir); + } + } + + return; + } + + private int extractFeat(long[] f, int cnt, int dir, short[] featsP, short[] featsD) { + if (featsP != null && featsD != null) { + for (short i1 = 0; i1 < featsP.length; i1++) { + for (short i2 = 0; i2 < featsD.length; i2++) { + dlf.v4 = featsP[i1]; + dlf.v5 = featsD[i2]; + dlf.cz6(); + f[cnt++] = dlf.csa(s_dir, dir); + } + } + } else if (featsP == null && featsD != null) { + + for (short i2 = 0; i2 < featsD.length; i2++) { + dlf.v4 = nofeat; + dlf.v5 = featsD[i2]; + dlf.cz6(); + f[cnt++] = dlf.csa(s_dir, dir); + + } + } else if (featsP != null && featsD == null) { + + for (short i1 = 0; i1 < featsP.length; i1++) { + dlf.v4 = featsP[i1]; + dlf.v5 = nofeat; + dlf.cz6(); + f[cnt++] = dlf.csa(s_dir, dir); + + } + } + return cnt; + } + + public IFV encodeCat2(Instances is, int ic, short pposs[], int forms[], int[] lemmas, short[] heads, short[] types, + short feats[][], Cluster cluster, IFV f, Long2IntInterface li) { + + long[] svs = new long[250]; + + for (int i = 1; i < heads.length; i++) { + + int n = basic(pposs, forms, heads[i], i, cluster, f); + firstm(is, ic, heads[i], i, types[i], cluster, svs); + for (long sv : svs) + f.add(li.l2i(sv)); + + int ch, cmi, cmo; + if (heads[i] < i) { + ch = rightmostRight(heads, heads[i], i); + cmi = leftmostLeft(heads, i, heads[i]); + cmo = rightmostRight(heads, i, heads.length); + + } else { + ch = leftmostLeft(heads, heads[i], i); + cmi = rightmostRight(heads, i, heads[i]); + cmo = leftmostLeft(heads, i, 0); + } + + siblingm(is, ic, pposs, forms, lemmas, feats, heads[i], i, ch, types[i], cluster, svs, n); + for (long sv : svs) + f.add(li.l2i(sv)); + + gcm(is, ic, heads[i], i, cmi, types[i], cluster, svs); + for (long sv : svs) + f.add(li.l2i(sv)); + + gcm(is, ic, heads[i], i, cmo, types[i], cluster, svs); + for (long sv : svs) + f.add(li.l2i(sv)); + } + + return f; + } + + @Override + public FV encodeCat(Instances is, int ic, short pposs[], int forms[], int[] lemmas, short[] heads, short[] types, + short feats[][], Cluster cluster, FV f) { + + long[] svs = new long[250]; + + for (int i = 1; i < heads.length; i++) { + + int n = basic(pposs, forms, heads[i], i, cluster, f); + firstm(is, ic, heads[i], i, types[i], cluster, svs); + for (long sv : svs) + dl1.map(f, sv); + + int ch, cmi, cmo; + if (heads[i] < i) { + ch = rightmostRight(heads, heads[i], i); + cmi = leftmostLeft(heads, i, heads[i]); + cmo = rightmostRight(heads, i, heads.length); + + } else { + ch = leftmostLeft(heads, heads[i], i); + cmi = rightmostRight(heads, i, heads[i]); + cmo = leftmostLeft(heads, i, 0); + } + + siblingm(is, ic, pposs, forms, lemmas, feats, heads[i], i, ch, types[i], cluster, svs, n); + for (long sv : svs) + dl1.map(f, sv); + + gcm(is, ic, heads[i], i, cmi, types[i], cluster, svs); + for (long sv : svs) + dl1.map(f, sv); + + gcm(is, ic, heads[i], i, cmo, types[i], cluster, svs); + for (long sv : svs) + dl1.map(f, sv); + } + + return f; + } + + @Override + public float encode3(short[] pos, short heads[], short[] types, DataF d2) { + + double v = 0; + for (int i = 1; i < heads.length; i++) { + + int dir = (heads[i] < i) ? 0 : 1; + + v += d2.pl[heads[i]][i]; + v += d2.lab[heads[i]][i][types[i]][dir]; + + boolean left = i < heads[i]; + short[] labels = Edges.get(pos[heads[i]], pos[i], left); + int lid = -1; + for (int k = 0; k < labels.length; k++) + if (types[i] == labels[k]) { + lid = k; + break; + } + + int ch, cmi, cmo; + if (heads[i] < i) { + ch = rightmostRight(heads, heads[i], i); + cmi = leftmostLeft(heads, i, heads[i]); + cmo = rightmostRight(heads, i, heads.length); + + if (ch == -1) + ch = heads[i]; + if (cmi == -1) + cmi = heads[i]; + if (cmo == -1) + cmo = heads[i]; + + } else { + ch = leftmostLeft(heads, heads[i], i); + cmi = rightmostRight(heads, i, heads[i]); + cmo = leftmostLeft(heads, i, 0); + + if (ch == -1) + ch = i; + if (cmi == -1) + cmi = i; + if (cmo == -1) + cmo = i; + } + v += d2.sib[heads[i]][i][ch][dir][lid]; + v += d2.gra[heads[i]][i][cmi][dir][lid]; + v += d2.gra[heads[i]][i][cmo][dir][lid]; + } + return (float) v; + } + + /** + * Provide the scores of the edges + * + * @param pos + * @param heads + * @param types + * @param edgesScores + * @param d2 + * @return + */ + public static float encode3(short[] pos, short heads[], short[] types, float[] edgesScores, DataF d2) { + + double v = 0; + for (int i = 1; i < heads.length; i++) { + + int dir = (heads[i] < i) ? 0 : 1; + + edgesScores[i] = d2.pl[heads[i]][i]; + edgesScores[i] += d2.lab[heads[i]][i][types[i]][dir]; + + boolean left = i < heads[i]; + short[] labels = Edges.get(pos[heads[i]], pos[i], left); + int lid = -1; + for (int k = 0; k < labels.length; k++) + if (types[i] == labels[k]) { + lid = k; + break; + } + + int ch, cmi, cmo; + if (heads[i] < i) { + ch = rightmostRight(heads, heads[i], i); + cmi = leftmostLeft(heads, i, heads[i]); + cmo = rightmostRight(heads, i, heads.length); + + if (ch == -1) + ch = heads[i]; + if (cmi == -1) + cmi = heads[i]; + if (cmo == -1) + cmo = heads[i]; + + } else { + ch = leftmostLeft(heads, heads[i], i); + cmi = rightmostRight(heads, i, heads[i]); + cmo = leftmostLeft(heads, i, 0); + + if (ch == -1) + ch = i; + if (cmi == -1) + cmi = i; + if (cmo == -1) + cmo = i; + } + edgesScores[i] += d2.sib[heads[i]][i][ch][dir][lid]; + edgesScores[i] += d2.gra[heads[i]][i][cmi][dir][lid]; + edgesScores[i] += d2.gra[heads[i]][i][cmo][dir][lid]; + v += edgesScores[i]; + } + return (float) v; + } + + private static int rightmostRight(short[] heads, int head, int max) { + int rightmost = -1; + for (int i = head + 1; i < max; i++) + if (heads[i] == head) + rightmost = i; + + return rightmost; + } + + private static int leftmostLeft(short[] heads, int head, int min) { + int leftmost = -1; + for (int i = head - 1; i > min; i--) + if (heads[i] == head) + leftmost = i; + return leftmost; + } + + public static final String REL = "REL", END = "END", STR = "STR", LA = "LA", RA = "RA"; + + private static int ra, la; + private static int s_str; + private static int s_end, _cend, _cstr, s_stwrd; + + protected static final String TYPE = "TYPE", DIR = "D"; + public static final String POS = "POS"; + protected static final String DIST = "DIST", MID = "MID", FEAT = "F"; + + private static final String _0 = "0", _4 = "4", _3 = "3", _2 = "2", _1 = "1", _5 = "5", _10 = "10"; + + private static int di0, d4, d3, d2, d1, d5, d10; + + private static final String WORD = "WORD", STWRD = "STWRD", STPOS = "STPOS"; + + private static int nofeat; + + public static int maxForm; + + /** + * Initialize the features. + * + * @param maxFeatures + */ + static public void initFeatures() { + + MFB mf = new MFB(); + mf.register(POS, MID); + s_str = mf.register(POS, STR); + s_end = mf.register(POS, END); + + mf.register(REL, END); + + _cstr = mf.register(Cluster.SPATH, STR); + _cend = mf.register(Cluster.SPATH, END); + + mf.register(TYPE, POS); + + s_stwrd = mf.register(WORD, STWRD); + mf.register(POS, STPOS); + + la = mf.register(DIR, LA); + ra = mf.register(DIR, RA); + + // mf.register(TYPE, CHAR); + + mf.register(TYPE, FEAT); + nofeat = mf.register(FEAT, "NOFEAT"); + + for (int k = 0; k < 215; k++) + mf.register(TYPE, "F" + k); + + di0 = mf.register(DIST, _0); + d1 = mf.register(DIST, _1); + d2 = mf.register(DIST, _2); + d3 = mf.register(DIST, _3); + d4 = mf.register(DIST, _4); + d5 = mf.register(DIST, _5); + // d5l=mf.register(DIST, _5l); + d10 = mf.register(DIST, _10); + + } + + /* + * (non-Javadoc) + * + * @see extractors.Extractor#getType() + */ + @Override + public int getType() { + + return s_type; + } + + /* + * (non-Javadoc) + * + * @see extractors.Extractor#setMaxForm(int) + */ + @Override + public void setMaxForm(int max) { + maxForm = max; + } + + /* + * (non-Javadoc) + * + * @see extractors.Extractor#getMaxForm() + */ + @Override + public int getMaxForm() { + return maxForm; + } + +} diff --git a/dependencyParser/experimental/mate-tools/src/extractors/ExtractorClusterStackedR2.java b/dependencyParser/experimental/mate-tools/src/extractors/ExtractorClusterStackedR2.java new file mode 100644 index 0000000..d1776b6 --- /dev/null +++ b/dependencyParser/experimental/mate-tools/src/extractors/ExtractorClusterStackedR2.java @@ -0,0 +1,1929 @@ +package extractors; + +import java.util.Arrays; + +import is2.data.Cluster; +import is2.data.D4; +import is2.data.DataF; +import is2.data.Edges; +import is2.data.FV; +import is2.data.IFV; +import is2.data.Instances; +import is2.data.Long2IntInterface; +import is2.data.MFB; + +final public class ExtractorClusterStackedR2 implements Extractor { + + public static int s_rel, s_word, s_type, s_dir, s_dist, s_feat, s_child, s_spath, s_lpath, s_pos; + + MFB mf; + + final D4 d0, dl1, dl2, dwr, dr, dwwp, dw, dwp, dlf, d3lp, d2lp, d2pw, d2pp; + + public final Long2IntInterface li; + + public ExtractorClusterStackedR2(Long2IntInterface li) { + + initFeatures(); + this.li = li; + d0 = new D4(li); + dl1 = new D4(li); + dl2 = new D4(li); + dwr = new D4(li); + dr = new D4(li); + dwwp = new D4(li); + + dw = new D4(li); + dwp = new D4(li); + + dlf = new D4(li); + d3lp = new D4(li); + d2lp = new D4(li); + d2pw = new D4(li); + d2pp = new D4(li); + + } + + @Override + public void initStat() { + + mf = new MFB(); + s_rel = mf.getFeatureCounter().get(REL).intValue(); + s_pos = mf.getFeatureCounter().get(POS).intValue(); + s_word = mf.getFeatureCounter().get(WORD).intValue(); + s_type = mf.getFeatureCounter().get(TYPE).intValue();// mf.getFeatureBits(); + s_dir = mf.getFeatureCounter().get(DIR); + la = mf.getValue(DIR, LA); + ra = mf.getValue(DIR, RA); + s_dist = mf.getFeatureCounter().get(DIST);// mf.getFeatureBits(DIST); + s_feat = mf.getFeatureCounter().get(FEAT);// mf.getFeatureBits(Pipe.FEAT); + s_spath = mf.getFeatureCounter().get(Cluster.SPATH) == null ? 0 : mf.getFeatureCounter().get(Cluster.SPATH);// mf.getFeatureBits(Cluster.SPATH); + s_lpath = mf.getFeatureCounter().get(Cluster.LPATH) == null ? 0 : mf.getFeatureCounter().get(Cluster.LPATH);// mf.getFeatureBits(Cluster.LPATH); + } + + @Override + public void init() { + // DB.println("init"); + d0.a0 = s_type; + d0.a1 = s_pos; + d0.a2 = s_pos; + d0.a3 = s_pos; + d0.a4 = s_pos; + d0.a5 = s_pos; + d0.a6 = s_pos; + d0.a7 = s_pos; + dl1.a0 = s_type; + dl1.a1 = s_rel; + dl1.a2 = s_pos; + dl1.a3 = s_pos; + dl1.a4 = s_pos; + dl1.a5 = s_pos; + dl1.a6 = s_pos; + dl1.a7 = s_pos; + dl2.a0 = s_type; + dl2.a1 = s_rel; + dl2.a2 = s_word; + dl2.a3 = s_pos; + dl2.a4 = s_pos; + dl2.a5 = s_pos; + dl2.a6 = s_pos; + dl2.a7 = s_pos; + dwp.a0 = s_type; + dwp.a1 = s_rel; + dwp.a2 = s_word; + dwp.a3 = s_pos; + dwp.a4 = s_pos; + dwp.a5 = s_word; + dwwp.a0 = s_type; + dwwp.a1 = s_rel; + dwwp.a2 = s_word; + dwwp.a3 = s_word; + dwwp.a4 = s_pos; + dwwp.a5 = s_word; + dlf.a0 = s_type; + dlf.a1 = s_rel; + dlf.a2 = s_pos; + dlf.a3 = s_pos; + dlf.a4 = s_feat; + dlf.a5 = s_feat; + dlf.a6 = s_pos; + dlf.a7 = s_pos; + d3lp.a0 = s_type; + d3lp.a1 = s_rel; + d3lp.a2 = s_lpath; + d3lp.a3 = s_lpath; + d3lp.a4 = s_lpath; + d3lp.a5 = s_word; + d3lp.a6 = s_spath; + d3lp.a7 = s_spath; + d2lp.a0 = s_type; + d2lp.a1 = s_rel; + d2lp.a2 = s_lpath; + d2lp.a3 = s_lpath; + d2lp.a4 = s_word; + d2lp.a5 = s_word; // d3lp.a6 = s_spath; d3lp.a7 = s_spath; + d2pw.a0 = s_type; + d2pw.a1 = s_rel; + d2pw.a2 = s_lpath; + d2pw.a3 = s_lpath; + d2pw.a4 = s_word; + d2pw.a5 = s_word; // d3lp.a6 = s_spath; d3lp.a7 = s_spath; + d2pp.a0 = s_type; + d2pp.a1 = s_rel; + d2pp.a2 = s_lpath; + d2pp.a3 = s_lpath; + d2pp.a4 = s_pos; + d2pp.a5 = s_pos; // d3lp.a6 = s_spath; d3lp.a7 = s_spath; + } + + @Override + public int basic(short[] pposs, int[] form, int p, int d, Cluster cluster, IFV f) { + + d0.clean(); + dl1.clean(); + dl2.clean(); + dwp.clean(); + dwwp.clean(); + dlf.clean(); + d3lp.clean(); + + d3lp.clean(); + d2lp.clean(); + d2pw.clean(); + d2pp.clean(); + + int n = 1; + int dir = (p < d) ? ra : la; + // d0.v0= n; d0.v1=pposs[p]; d0.v2=pposs[d]; //d0.stop=4; + int end = (p >= d ? p : d); + int start = (p >= d ? d : p) + 1; + + StringBuilder s = new StringBuilder(end - start); + int[] x = new int[end - start]; + int c = 0; + for (int i = start; i < end; i++) { + // d0.v3=pposs[i]; + // d0.cz4(); + // d0.csa(s_dir,dir,f); + // s.append((char)pposs[i]); + x[c++] = pposs[i]; + } + + Arrays.sort(x); + for (int i = 0; i < x.length; i++) { + if (i == 0 || x[i] != x[i - 1]) + s.append(x[i]); + } + int v = mf.register("px", s.toString()); + + dwp.v0 = n++; + dwp.v1 = 1; + dwp.v2 = v; + dwp.v3 = pposs[p]; + dwp.v4 = pposs[d]; + dwp.cz5(); + dwp.csa(s_dir, dir, f); + + return n; + } + + @Override + public void firstm(Instances is, int i, int prnt, int dpnt, int label, Cluster cluster, long[] f) { + + // short[] pposs, int[] form, int[] lemmas, short[][] feats + for (int k = 0; k < f.length; k++) + f[k] = 0; + + short[] pposs = is.pposs[i]; + int[] form = is.forms[i]; + short[][] feats = is.feats[i]; + + int pF = form[prnt], dF = form[dpnt]; + int pL = is.plemmas[i][prnt], dL = is.plemmas[i][dpnt]; + int pP = pposs[prnt], dP = pposs[dpnt]; + + int prntLS = pF == -1 ? -1 : cluster.getLP(pF), chldLS = dF == -1 ? -1 : cluster.getLP(dF); + + final int dir = (prnt < dpnt) ? ra : la; + + if (pF > maxForm) + pF = -1; + if (pL > maxForm) + pL = -1; + + if (dF > maxForm) + dF = -1; + if (dL > maxForm) + dL = -1; + + int n = 3, c = 0; + + dl2.v1 = label; + dl2.v0 = n++; + dl2.v2 = pF; + dl2.v3 = dP; + dl2.cz4(); + f[c++] = dl2.csa(s_dir, dir); + dl2.v0 = n++; + dl2.cz3(); + f[c++] = dl2.csa(s_dir, dir); + dl2.v0 = n++; + dl2.v2 = dF; + dl2.v3 = pP; + dl2.cz4(); + f[c++] = dl2.csa(s_dir, dir); + dl2.v0 = n++; + dl2.cz3(); + f[c++] = dl2.csa(s_dir, dir); + + dwwp.v1 = label; + dwwp.v0 = n++; + dwwp.v2 = pF; + dwwp.v3 = dF; + dwwp.cz4(); + f[c++] = dwwp.csa(s_dir, dir); + + dl1.v1 = label; + dl1.v0 = n++; + dl1.v2 = dP; + dl1.cz3(); + f[c++] = dl1.csa(s_dir, dir); + dl1.v0 = n++; + dl1.v2 = pP; + dl1.cz3(); + f[c++] = dl1.csa(s_dir, dir); + dl1.v0 = n++; + dl1.v3 = dP; + dl1.cz4(); + f[c++] = dl1.csa(s_dir, dir); + + int pPm1 = prnt > 0 ? pposs[prnt - 1] : s_str, dPm1 = dpnt > 0 ? pposs[dpnt - 1] : s_str; + int pPp1 = prnt < pposs.length - 1 ? pposs[prnt + 1] : s_end, + dPp1 = dpnt < pposs.length - 1 ? pposs[dpnt + 1] : s_end; + + int pPm2 = prnt > 1 ? pposs[prnt - 2] : s_str, dPm2 = dpnt > 1 ? pposs[dpnt - 2] : s_str; + int pPp2 = prnt < pposs.length - 2 ? pposs[prnt + 2] : s_end, + dPp2 = dpnt < pposs.length - 2 ? pposs[dpnt + 2] : s_end; + + int pFm1 = prnt > 0 ? form[prnt - 1] : s_stwrd, dFm1 = dpnt > 0 ? form[dpnt - 1] : s_stwrd; + int pFp1 = prnt < form.length - 1 ? form[prnt + 1] : s_stwrd, + dFp1 = dpnt < form.length - 1 ? form[dpnt + 1] : s_stwrd; + + dl1.v0 = n++; + dl1.v2 = pP; + dl1.v3 = pPp1; + dl1.v4 = dP; + dl1.v5 = dPp1; + dl1.cz6(); + f[n++] = dl1.csa(s_dir, dir); + dl1.v0 = n++; + dl1.v5 = dPm1; + dl1.cz6(); + f[n++] = dl1.csa(s_dir, dir); + dl1.v0 = n++; + dl1.v3 = pPm1; + dl1.cz6(); + f[n++] = dl1.csa(s_dir, dir); + dl1.v0 = n++; + dl1.v5 = dPp1; + dl1.cz6(); + f[n++] = dl1.csa(s_dir, dir); + + dl1.v0 = n++; + dl1.v3 = pPm1; + dl1.cz5(); + f[n++] = dl1.csa(s_dir, dir); + dl1.v0 = n++; + dl1.v3 = dPm1; + dl1.cz5(); + f[n++] = dl1.csa(s_dir, dir); + dl1.v0 = n++; + dl1.v3 = dPp1; + dl1.cz5(); + f[n++] = dl1.csa(s_dir, dir); + dl1.v0 = n++; + dl1.v3 = pPp1; + dl1.cz5(); + f[n++] = dl1.csa(s_dir, dir); + + dl1.v0 = n++; + dl1.v2 = pP; + dl1.v3 = pPp2; + dl1.v4 = dP; + dl1.v5 = dPp2; + dl1.cz6(); + f[n++] = dl1.csa(s_dir, dir); + dl1.v0 = n++; + dl1.v5 = dPm2; + dl1.cz6(); + f[n++] = dl1.csa(s_dir, dir); + dl1.v0 = n++; + dl1.v3 = pPm2; + dl1.cz6(); + f[n++] = dl1.csa(s_dir, dir); + dl1.v0 = n++; + dl1.v5 = dPp2; + dl1.cz6(); + f[n++] = dl1.csa(s_dir, dir); + + dl1.v0 = n++; + dl1.v3 = pPm2; + dl1.cz5(); + f[n++] = dl1.csa(s_dir, dir); + dl1.v0 = n++; + dl1.v3 = dPm2; + dl1.cz5(); + f[n++] = dl1.csa(s_dir, dir); + dl1.v0 = n++; + dl1.v3 = dPp2; + dl1.cz5(); + f[n++] = dl1.csa(s_dir, dir); + dl1.v0 = n++; + dl1.v3 = pPp2; + dl1.cz5(); + f[n++] = dl1.csa(s_dir, dir); + + dl2.v0 = n++; + dl2.v3 = dFm1; + dl2.v3 = pPp1; + dl2.v4 = pP; + dl2.cz5(); + f[n++] = dl2.getVal(); + dl2.v0 = n++; + dl2.v3 = dFp1; + dl2.v3 = pPm1; + dl2.cz5(); + f[n++] = dl2.getVal(); + dl2.v0 = n++; + dl2.v3 = pFm1; + dl2.v3 = dPp1; + dl2.v4 = dP; + dl2.cz5(); + f[n++] = dl2.getVal(); + dl2.v0 = n++; + dl2.v3 = pFp1; + dl2.v3 = dPm1; + dl2.cz5(); + f[n++] = dl2.getVal(); + + dl2.v0 = n++; + dl2.v3 = dFm1; + dl2.v3 = dPm2; + dl2.v4 = pP; + dl2.cz5(); + f[n++] = dl2.getVal(); + dl2.v0 = n++; + dl2.v3 = dFp1; + dl2.v3 = dPp2; + dl2.cz5(); + f[n++] = dl2.getVal(); + dl2.v0 = n++; + dl2.v3 = pFm1; + dl2.v3 = pPm2; + dl2.v4 = dP; + dl2.cz5(); + f[n++] = dl2.getVal(); + dl2.v0 = n++; + dl2.v3 = pFp1; + dl2.v3 = pPp2; + dl2.cz5(); + f[n++] = dl2.getVal(); + + dwwp.v0 = n++; + dwwp.v2 = pF; + dwwp.v3 = dF; + dwwp.v4 = dP; + dwwp.cz5(); + f[n++] = dwwp.csa(s_dir, dir); + dwwp.v0 = n++; + dwwp.v2 = pF; + dwwp.v3 = dF; + dwwp.v4 = pP; + dwwp.cz5(); + f[n++] = dwwp.csa(s_dir, dir); + dwwp.v0 = n++; + dwwp.v2 = dF; + dwwp.v3 = pF; + dwwp.v4 = pP; + dwwp.v4 = dP; + dwwp.cz6(); + f[n++] = dwwp.csa(s_dir, dir); + + // lemmas + + dl2.v1 = label; + dl2.v0 = n++; + dl2.v2 = pL; + dl2.v3 = dP; + dl2.cz4(); + f[c++] = dl2.csa(s_dir, dir); + dl2.v0 = n++; + dl2.cz3(); + f[c++] = dl2.csa(s_dir, dir); + dl2.v0 = n++; + dl2.v2 = dL; + dl2.v3 = pP; + dl2.cz4(); + f[c++] = dl2.csa(s_dir, dir); + dl2.v0 = n++; + dl2.cz3(); + f[c++] = dl2.csa(s_dir, dir); + + dwwp.v1 = label; + dwwp.v0 = n++; + dwwp.v2 = pL; + dwwp.v3 = dL; + dwwp.cz4(); + f[c++] = dwwp.csa(s_dir, dir); + + dwp.v1 = label; + dwp.v0 = n++; + dwp.v2 = dL; + dwp.v3 = pP; + dwp.v4 = dP; + dwp.v5 = pL; + dwp.cz6(); + f[c++] = dwp.csa(s_dir, dir); + dwp.v0 = n++; + dwp.cz5(); + f[c++] = dwp.csa(s_dir, dir); + + dwp.v0 = n++; + dwp.v2 = pL; + dwp.cz5(); + f[c++] = dwp.csa(s_dir, dir); + dwwp.v0 = n++; + dwwp.v2 = pL; + dwwp.v3 = dL; + dwwp.v4 = dP; + dwwp.cz5(); + f[c++] = dwwp.csa(s_dir, dir); + dwwp.v0 = n++; + dwwp.v4 = pP; + dwwp.cz5(); + f[c++] = dwwp.csa(s_dir, dir); + + // cluster + + d2pw.v1 = label; + d2pw.v0 = n++; + d2pw.v2 = prntLS; + d2pw.v3 = chldLS; + d2pw.cz4(); + f[c++] = d2pw.csa(s_dir, dir); + d2pw.v0 = n++; + d2pw.v4 = pF; + d2pw.cz5(); + f[c++] = d2pw.csa(s_dir, dir); + d2pw.v0 = n++; + d2pw.v4 = dF; + d2pw.cz5(); + f[c++] = d2pw.csa(s_dir, dir); + d2pw.v0 = n++; + d2pw.v5 = pF; + d2pw.cz6(); + f[c++] = d2pw.csa(s_dir, dir); + + d2pp.v1 = label; + d2pp.v0 = n++; + d2pp.v2 = prntLS; + d2pp.v3 = chldLS; + d2pp.cz4(); + f[c++] = d2pp.csa(s_dir, dir); + d2pp.v0 = n++; + d2pp.v4 = pP; + d2pp.cz5(); + f[c++] = d2pp.csa(s_dir, dir); + d2pp.v0 = n++; + d2pp.v4 = dP; + d2pp.cz5(); + f[c++] = d2pp.csa(s_dir, dir); + d2pp.v0 = n++; + d2pp.v5 = pP; + d2pp.cz6(); + f[c++] = d2pp.csa(s_dir, dir); + + // take those in for stacking + // dl2.v1=label; + // dl2.v0= n++;dl2.v2=prel[dpnt];dl2.v3=pP;dl2.v4=dP; + // dl2.v5=prnt==phead[dpnt]?1:2; dl2.cz6(); f[c++]=dl2.csa(s_dir,dir); + // dl2.v0= n++;dl2.v2=pP;dl2.v3=dP; dl2.v4=prnt==phead[dpnt]?1:2; + // dl2.cz5(); f[c++]=dl2.csa(s_dir,dir); + + if (feats == null) + return; + + short[] featsP = feats[prnt], featsD = feats[dpnt]; + dlf.v0 = n++; + dlf.v1 = label; + dlf.v2 = pP; + dlf.v3 = dP; + extractFeat(f, c, dir, featsP, featsD); + + return; + } + + @Override + public void gcm(Instances is, int i, int p, int d, int gc, int label, Cluster cluster, long[] f) { + + for (int k = 0; k < f.length; k++) + f[k] = 0; + + short[] pos = is.pposs[i]; + int[] forms = is.forms[i]; + int[] lemmas = is.plemmas[i]; + short[][] feats = is.feats[i]; + + int pP = pos[p], dP = pos[d]; + int prntF = forms[p], chldF = forms[d]; + int prntL = lemmas[p], chldL = lemmas[d]; + int prntLS = prntF == -1 ? -1 : cluster.getLP(prntF), chldLS = chldF == -1 ? -1 : cluster.getLP(chldF); + + int gP = gc != -1 ? pos[gc] : s_str; + int gcF = gc != -1 ? forms[gc] : s_stwrd; + int gcL = gc != -1 ? lemmas[gc] : s_stwrd; + int gcLS = (gc != -1) && (gcF != -1) ? cluster.getLP(gcF) : s_stwrd; + + if (prntF > maxForm) + prntF = -1; + if (prntL > maxForm) + prntL = -1; + + if (chldF > maxForm) + chldF = -1; + if (chldL > maxForm) + chldL = -1; + + if (gcF > maxForm) + gcF = -1; + if (gcL > maxForm) + gcL = -1; + + int dir = (p < d) ? ra : la, dir_gra = (d < gc) ? ra : la; + + int n = 84, c = 0; + + // dl1.v023(); + dl1.v1 = label; + dl1.v0 = n++; + dl1.v2 = pP; + dl1.v3 = dP; + dl1.v4 = gP; + dl1.cz5(); + dl1.cs(s_dir, dir); + f[c++] = dl1.csa(s_dir, dir_gra); + dl1.v0 = n++; + dl1.v2 = pP; + dl1.v3 = gP; + dl1.cz4(); + dl1.cs(s_dir, dir); + f[c++] = dl1.csa(s_dir, dir_gra); + dl1.v0 = n++; + dl1.v2 = dP; + dl1.cz4(); + dl1.cs(s_dir, dir); + f[c++] = dl1.csa(s_dir, dir_gra); + + dwwp.v1 = label; + dwwp.v0 = n++; + dwwp.v2 = prntF; + dwwp.v3 = gcF; + dwwp.cz4(); + dwwp.cs(s_dir, dir); + f[c++] = dwwp.csa(s_dir, dir_gra); + + dwwp.v0 = n++; + dwwp.v2 = chldF; + dwwp.v3 = gcF; + dwwp.cz4(); + dwwp.cs(s_dir, dir); + f[c++] = dwwp.csa(s_dir, dir_gra); + + dwp.v1 = label; + dwp.v0 = n++; + dwp.v2 = gcF; + dwp.v3 = pP; + dwp.cz4(); + dwp.cs(s_dir, dir); + f[c++] = dwp.csa(s_dir, dir_gra); + + dwp.v0 = n++; + dwp.v2 = gcF; + dwp.v3 = dP; + dwp.cz4(); + dwp.cs(s_dir, dir); + f[c++] = dwp.csa(s_dir, dir_gra); + + dwp.v0 = n++; + dwp.v2 = prntF; + dwp.v3 = gP; + dwp.cz4(); + dwp.cs(s_dir, dir); + f[c++] = dwp.csa(s_dir, dir_gra); + + dwp.v0 = n++; + dwp.v2 = chldF; + dwp.v3 = gP; + dwp.cz4(); + dwp.cs(s_dir, dir); + f[c++] = dwp.csa(s_dir, dir_gra); + + // lemma + + dwwp.v0 = n++; + dwwp.v2 = prntL; + dwwp.v3 = gcL; + dwwp.cz4(); + dwwp.cs(s_dir, dir); + f[c++] = dwwp.csa(s_dir, dir_gra); + + dwwp.v0 = n++; + dwwp.v2 = chldL; + dwwp.v3 = gcL; + dwwp.cz4(); + dwwp.cs(s_dir, dir); + f[c++] = dwwp.csa(s_dir, dir_gra); + + dwp.v0 = n++; + dwp.v2 = gcL; + dwp.v3 = pP; + dwp.cz4(); + dwp.cs(s_dir, dir); + f[c++] = dwp.csa(s_dir, dir_gra); + + dwp.v0 = n++; + dwp.v2 = gcL; + dwp.v3 = dP; + dwp.cz4(); + dwp.cs(s_dir, dir); + f[c++] = dwp.csa(s_dir, dir_gra); + + dwp.v0 = n++; + dwp.v2 = prntL; + dwp.v3 = gP; + dwp.cz4(); + dwp.cs(s_dir, dir); + f[c++] = dwp.csa(s_dir, dir_gra); + + dwp.v0 = n++; + dwp.v2 = chldL; + dwp.v3 = gP; + dwp.cz4(); + dwp.cs(s_dir, dir); + f[c++] = dwp.csa(s_dir, dir_gra); + + // clusters + + d2lp.v1 = label; + d2lp.v0 = n++; + d2lp.v2 = prntLS; + d2lp.v3 = gcLS; + d2lp.cz4(); + d2lp.cs(s_dir, dir); + f[c++] = d2lp.csa(s_dir, dir_gra);// f.add(li.l2i(l)); + d2lp.v0 = n++; + d2lp.v2 = chldLS; + d2lp.v3 = gcLS; + d2lp.cz4(); + d2lp.cs(s_dir, dir); + f[c++] = d2lp.csa(s_dir, dir_gra); + d3lp.v0 = n++; + d3lp.v1 = label; + d3lp.v2 = prntLS; + d3lp.v3 = chldLS; + d3lp.v4 = gcLS; + d3lp.cz5(); + d3lp.cs(s_dir, dir); + f[c++] = d3lp.csa(s_dir, dir_gra); + + // _f83; + d2lp.v0 = n++; + d2lp.v2 = prntLS; + d2lp.v3 = chldLS; + d2lp.v4 = gcF; + d2lp.cz5(); + f[c++] = d2lp.csa(s_dir, dir); + d2lp.v0 = n++; + d2lp.v2 = prntLS; + d2lp.v3 = gcLS; + d2lp.v4 = chldF; + d2lp.cz5(); + f[c++] = d2lp.csa(s_dir, dir); + d2lp.v0 = n++; + d2lp.v2 = chldLS; + d2lp.v3 = gcLS; + d2lp.v4 = prntF; + d2lp.cz5(); + f[c++] = d2lp.csa(s_dir, dir); + + d2pp.v1 = label; + d2pp.v0 = n++; + d2pp.v2 = prntLS; + d2pp.v3 = chldLS; + d2pp.v4 = gP; + d2pp.cz5(); + f[c++] = d2pp.csa(s_dir, dir); + d2pp.v0 = n++; + d2pp.v2 = prntLS; + d2pp.v3 = gcLS; + d2pp.v4 = dP; + d2pp.cz5(); + f[c++] = d2pp.csa(s_dir, dir); + d2pp.v0 = n++; + d2pp.v2 = chldLS; + d2pp.v3 = gcLS; + d2pp.v4 = pP; + d2pp.cz5(); + f[c++] = d2pp.csa(s_dir, dir); + + // linear features + + int prntPm1 = p != 0 ? pos[p - 1] : s_str; // parent-pos-minus1 + int chldPm1 = d - 1 >= 0 ? pos[d - 1] : s_str; // child-pos-minus1 + int prntPp1 = p != pos.length - 1 ? pos[p + 1] : s_end; + int chldPp1 = d != pos.length - 1 ? pos[d + 1] : s_end; + + int gcPm1 = gc > 0 ? pos[gc - 1] : s_str; + int gcPp1 = gc < pos.length - 1 ? pos[gc + 1] : s_end; + + dl1.v0 = n++; + dl1.v2 = gP; + dl1.v3 = gcPp1; + dl1.v4 = dP; + dl1.cz5(); + f[c++] = dl1.csa(s_dir, dir); + dl1.v0 = n++; + dl1.v2 = gP; + dl1.v3 = gcPm1; + dl1.v4 = dP; + dl1.cz5(); + f[c++] = dl1.csa(s_dir, dir); + dl1.v0 = n++; + dl1.v2 = gP; + dl1.v3 = dP; + dl1.v4 = chldPp1; + dl1.cz5(); + f[c++] = dl1.csa(s_dir, dir); + dl1.v0 = n++; + dl1.v2 = gP; + dl1.v3 = dP; + dl1.v4 = chldPm1; + dl1.cz5(); + f[c++] = dl1.csa(s_dir, dir); + dl1.v0 = n++; + dl1.v2 = gP; + dl1.v3 = gcPp1; + dl1.v4 = chldPm1; + dl1.v5 = dP; + dl1.cz6(); + f[c++] = dl1.csa(s_dir, dir); + dl1.v0 = n++; + dl1.v2 = gcPm1; + dl1.v3 = gP; + dl1.v4 = chldPm1; + dl1.v5 = dP; + dl1.cz6(); + f[c++] = dl1.csa(s_dir, dir); + dl1.v0 = n++; + dl1.v2 = gP; + dl1.v3 = gcPp1; + dl1.v4 = dP; + dl1.v5 = chldPp1; + dl1.cz6(); + f[c++] = dl1.csa(s_dir, dir); + dl1.v0 = n++; + dl1.v2 = gcPm1; + dl1.v3 = gP; + dl1.v4 = dP; + dl1.cz6(); + f[c++] = dl1.csa(s_dir, dir); + dl1.v0 = n++; + dl1.v2 = gP; + dl1.v3 = gcPp1; + dl1.v4 = pP; + dl1.cz5(); + f[c++] = dl1.csa(s_dir, dir); + dl1.v0 = n++; + dl1.v2 = gP; + dl1.v3 = gcPm1; + dl1.v4 = pP; + dl1.cz5(); + f[c++] = dl1.csa(s_dir, dir); + dl1.v0 = n++; + dl1.v2 = gP; + dl1.v3 = pP; + dl1.v4 = prntPp1; + dl1.cz5(); + f[c++] = dl1.csa(s_dir, dir); + dl1.v0 = n++; + dl1.v2 = gP; + dl1.v3 = pP; + dl1.v4 = prntPm1; + dl1.cz5(); + f[c++] = dl1.csa(s_dir, dir); + dl1.v0 = n++; + dl1.v2 = gP; + dl1.v3 = gcPp1; + dl1.v4 = prntPm1; + dl1.v5 = pP; + dl1.cz6(); + f[c++] = dl1.csa(s_dir, dir); + dl1.v0 = n++; + dl1.v2 = gcPm1; + dl1.v3 = gP; + dl1.v4 = prntPm1; + dl1.v5 = pP; + dl1.cz6(); + f[c++] = dl1.csa(s_dir, dir); + dl1.v0 = n++; + dl1.v2 = gP; + dl1.v3 = gcPp1; + dl1.v4 = pP; + dl1.v5 = prntPp1; + dl1.cz6(); + f[c++] = dl1.csa(s_dir, dir); + dl1.v0 = n++; + dl1.v2 = gcPm1; + dl1.v3 = gP; + dl1.v4 = pP; + dl1.v5 = prntPp1; + dl1.cz6(); + f[c++] = dl1.csa(s_dir, dir); + + int pLSp1 = p != pos.length - 1 ? forms[p + 1] == -1 ? -1 : cluster.getLP(forms[p + 1]) : _cend; + int cLSp1 = d != pos.length - 1 ? forms[d + 1] == -1 ? -1 : cluster.getLP(forms[d + 1]) : _cend; + int gcLSp1 = gc < pos.length - 1 ? forms[gc + 1] == -1 ? -1 : cluster.getLP(forms[gc + 1]) : s_end; + + int pLSm1 = p != 0 ? lemmas[p - 1] == -1 ? -1 : cluster.getLP(lemmas[p - 1]) : _cstr; + int cLSm1 = d - 1 >= 0 ? lemmas[d - 1] == -1 ? -1 : cluster.getLP(lemmas[d - 1]) : _cstr; + int gcLSm1 = gc > 0 ? lemmas[gc - 1] == -1 ? -1 : cluster.getLP(lemmas[gc - 1]) : _cstr; + + dl1.v0 = n++; + dl1.v2 = gP; + dl1.v3 = gcLSp1; + dl1.v4 = dP; + dl1.cz5(); + f[c++] = dl1.csa(s_dir, dir); + dl1.v0 = n++; + dl1.v2 = gP; + dl1.v3 = gcLSm1; + dl1.v4 = dP; + dl1.cz5(); + f[c++] = dl1.csa(s_dir, dir); + dl1.v0 = n++; + dl1.v2 = gP; + dl1.v3 = dP; + dl1.v4 = cLSp1; + dl1.cz5(); + f[c++] = dl1.csa(s_dir, dir); + dl1.v0 = n++; + dl1.v2 = gP; + dl1.v3 = dP; + dl1.v4 = cLSm1; + dl1.cz5(); + f[c++] = dl1.csa(s_dir, dir); + dl1.v0 = n++; + dl1.v2 = gP; + dl1.v3 = gcLSp1; + dl1.v4 = cLSm1; + dl1.v5 = dP; + dl1.cz6(); + f[c++] = dl1.csa(s_dir, dir); + dl1.v0 = n++; + dl1.v2 = gcLSm1; + dl1.v3 = gP; + dl1.v4 = cLSm1; + dl1.v5 = dP; + dl1.cz6(); + f[c++] = dl1.csa(s_dir, dir); + dl1.v0 = n++; + dl1.v2 = gP; + dl1.v3 = gcLSp1; + dl1.v4 = dP; + dl1.v5 = cLSp1; + dl1.cz6(); + f[c++] = dl1.csa(s_dir, dir); + dl1.v0 = n++; + dl1.v2 = cLSm1; + dl1.v3 = gP; + dl1.v4 = dP; + dl1.cz6(); + f[c++] = dl1.csa(s_dir, dir); + dl1.v0 = n++; + dl1.v2 = gP; + dl1.v3 = gcLSp1; + dl1.v4 = pP; + dl1.cz5(); + f[c++] = dl1.csa(s_dir, dir); + dl1.v0 = n++; + dl1.v2 = gP; + dl1.v3 = gcLSm1; + dl1.v4 = pP; + dl1.cz5(); + f[c++] = dl1.csa(s_dir, dir); + dl1.v0 = n++; + dl1.v2 = gP; + dl1.v3 = pP; + dl1.v4 = pLSp1; + dl1.cz5(); + f[c++] = dl1.csa(s_dir, dir); + dl1.v0 = n++; + dl1.v2 = gP; + dl1.v3 = pP; + dl1.v4 = pLSm1; + dl1.cz5(); + f[c++] = dl1.csa(s_dir, dir); + dl1.v0 = n++; + dl1.v2 = gP; + dl1.v3 = gcLSp1; + dl1.v4 = pLSm1; + dl1.v5 = pP; + dl1.cz6(); + f[c++] = dl1.csa(s_dir, dir); + dl1.v0 = n++; + dl1.v2 = gcLSm1; + dl1.v3 = gP; + dl1.v4 = pLSm1; + dl1.v5 = pP; + dl1.cz6(); + f[c++] = dl1.csa(s_dir, dir); + dl1.v0 = n++; + dl1.v2 = gP; + dl1.v3 = gcLSp1; + dl1.v4 = pP; + dl1.v5 = pLSp1; + dl1.cz6(); + f[c++] = dl1.csa(s_dir, dir); + dl1.v0 = n++; + dl1.v2 = gcLSm1; + dl1.v3 = gP; + dl1.v4 = pP; + dl1.v5 = pLSp1; + dl1.cz6(); + f[c++] = dl1.csa(s_dir, dir); + + if (gc >= 0) { + } + + // take those in for stacking + /* + * dl2.v1=label; dl2.v0= + * n++;dl2.v2=prel[d];dl2.v3=g;dl2.v4=gP;dl2.v5=dP;dl2.cz6();f[c++]=dl2. + * csa(s_dir,dir); dl2.v0= + * n++;dl2.v2=prel[d];dl2.v3=g;dl2.v4=gP;dl2.v5=pP;dl2.cz6();f[c++]=dl2. + * csa(s_dir,dir); dl2.v0= + * n++;dl2.v2=prel[d];dl2.v3=g;dl2.v4=gP;dl2.v5=pP;dl2.v6=dP;dl2.cz7();f + * [c++]=dl2.csa(s_dir,dir); + * + * dl2.v0= + * n++;dl2.v2=gr;dl2.v3=g;dl2.v4=gP;dl2.v5=dP;dl2.cz6();f[c++]=dl2.csa( + * s_dir,dir); dl2.v0= + * n++;dl2.v2=gr;dl2.v3=g;dl2.v4=gP;dl2.v5=pP;dl2.cz6();f[c++]=dl2.csa( + * s_dir,dir); dl2.v0= + * n++;dl2.v2=gr;dl2.v3=g;dl2.v4=gP;dl2.v5=pP;dl2.v6=dP;dl2.cz7();f[c++] + * =dl2.csa(s_dir,dir); + * + */ + if (feats == null) + return; + + short[] featsP = feats[d]; + short[] featsD = gc != -1 ? feats[gc] : null; + + dlf.v0 = n++; + dlf.v1 = label; + dlf.v2 = gP; + dlf.v3 = dP; + extractFeat(f, c, dir, featsP, featsD); + return; + } + + @Override + public void siblingm(Instances is, int i, short pos[], int forms[], int[] lemmas, short[][] feats, int prnt, int d, + int sblng, int label, Cluster cluster, long[] f, int v) { + + for (int k = 0; k < f.length; k++) + f[k] = 0; + + int pP = pos[prnt], dP = pos[d]; + int prntF = forms[prnt], chldF = forms[d]; + int prntL = lemmas[prnt], chldL = lemmas[d]; + int prntLS = prntF == -1 ? -1 : cluster.getLP(prntF), chldLS = chldF == -1 ? -1 : cluster.getLP(chldF); + + int sP = sblng != -1 ? pos[sblng] : s_str, sblF = sblng != -1 ? forms[sblng] : s_stwrd, + sblL = sblng != -1 ? lemmas[sblng] : s_stwrd; + + int sblLS = (sblng != -1) && (sblF != -1) ? cluster.getLP(sblF) : s_stwrd; + + int dir = (prnt < d) ? ra : la; + + int abs = Math.abs(prnt - d); + + final int dist; + if (abs > 10) + dist = d10; + else if (abs > 5) + dist = d5; + else if (abs == 5) + dist = d4; + else if (abs == 4) + dist = d3; + else if (abs == 3) + dist = d2; + else if (abs == 2) + dist = d1; + else + dist = di0; + + int n = 147; + + if (prntF > maxForm) + prntF = -1; + if (prntL > maxForm) + prntL = -1; + + if (chldF > maxForm) + chldF = -1; + if (chldL > maxForm) + chldL = -1; + + if (sblF > maxForm) + sblF = -1; + if (sblL > maxForm) + sblL = -1; + + dl1.v0 = n++; + dl1.v1 = label; + dl1.v2 = pP; + dl1.v3 = dP; + dl1.v4 = sP; + dl1.cz5(); + f[0] = dl1.csa(s_dir, dir); + f[1] = dl1.csa(s_dist, dist); + dl1.v0 = n++; + dl1.v3 = sP; + dl1.cz4(); + f[2] = dl1.csa(s_dir, dir); + f[3] = dl1.csa(s_dist, dist); + dl1.v0 = n++; + dl1.v2 = dP; + dl1.cz4(); + f[4] = dl1.csa(s_dir, dir); + f[5] = dl1.csa(s_dist, dist); + + // sibling only could be tried + dwwp.v1 = label; + dwwp.v0 = n++; + dwwp.v2 = prntF; + dwwp.v3 = sblF; + dwwp.cz4(); + f[6] = dwwp.csa(s_dir, dir); + f[7] = dwwp.csa(s_dist, dist); + dwwp.v0 = n++; + dwwp.v2 = chldF; + dwwp.cz4(); + f[8] = dwwp.csa(s_dir, dir); + f[9] = dwwp.csa(s_dist, dist); + dwp.v0 = n++; + dwp.v1 = label; + dwp.v2 = sblF; + dwp.v3 = pP; + dwp.cz4(); + f[10] = dwp.csa(s_dir, dir); + f[11] = dwp.csa(s_dist, dist); + dwp.v0 = n++; + /* dwp.v1=label; */dwp.v3 = dP; + dwp.cz4(); + f[12] = dwp.csa(s_dir, dir); + f[13] = dwp.csa(s_dist, dist); + dwp.v0 = n++; + /* dwp.v1=label; */ dwp.v2 = prntF; + dwp.v3 = sP; + dwp.cz4(); + f[14] = dwp.csa(s_dir, dir); + f[15] = dwp.csa(s_dist, dist); + dwp.v0 = n++; + /* dwp.v1=label; */ dwp.v2 = chldF; + dwp.cz4(); + f[16] = dwp.csa(s_dir, dir); + f[17] = dwp.csa(s_dist, dist); + + // lemmas + dwwp.v0 = n++; + dwwp.v2 = prntL; + dwwp.v3 = sblL; + dwwp.cz4(); + f[18] = dwwp.csa(s_dir, dir); + dwwp.v0 = n++; + dwwp.v2 = chldL; + dwwp.cz4(); + f[19] = dwwp.csa(s_dir, dir); + f[20] = dwwp.csa(s_dist, dist); + dwp.v0 = n++; + /* dwp.v1=label; */ dwp.v2 = sblL; + dwp.v3 = pP; + dwp.cz4(); + f[21] = dwp.csa(s_dir, dir); + f[22] = dwp.csa(s_dist, dist); + dwp.v0 = n++; + /* dwp.v1=label; */ dwp.v3 = dP; + dwp.cz4(); + f[23] = dwp.csa(s_dir, dir); + f[24] = dwp.csa(s_dist, dist); + dwp.v0 = n++; + /* dwp.v1=label; */ dwp.v2 = prntL; + dwp.v3 = sP; + dwp.cz4(); + f[25] = dwp.csa(s_dir, dir); + f[26] = dwp.csa(s_dist, dist); + dwp.v0 = n++; + /* dwp.v1=label; */ dwp.v2 = chldL; + dwp.cz4(); + f[27] = dwp.csa(s_dir, dir); + f[28] = dwp.csa(s_dist, dist); + + // clusters + + d2lp.v1 = label; + d2lp.v0 = n++; + d2lp.v2 = prntLS; + d2lp.v3 = sblLS; + d2lp.cz4(); + f[29] = d2lp.csa(s_dir, dir); + d2lp.v0 = n++; + d2lp.v2 = chldLS; + d2lp.v3 = sblLS; + d2lp.cz4(); + f[30] = d2lp.csa(s_dir, dir); + f[31] = d2lp.csa(s_dist, dist); + + d3lp.v1 = label; + d3lp.v0 = n++; + d3lp.v2 = prntLS; + d3lp.v3 = chldLS; + d3lp.v4 = sblLS; + d3lp.cz5(); + f[32] = d3lp.csa(s_dir, dir); + + d2lp.v0 = n++; + d2lp.v2 = prntLS; + d2lp.v3 = chldLS; + d2lp.v4 = sblF; + d2lp.cz5(); + f[33] = d2lp.csa(s_dir, dir); + f[34] = d2lp.csa(s_dist, dist); + d2lp.v0 = n++; + d2lp.v2 = prntLS; + d2lp.v3 = sblLS; + d2lp.v4 = chldF; + d2lp.cz5(); + f[35] = d2lp.csa(s_dir, dir); + f[36] = d2lp.csa(s_dist, dist); + d2lp.v0 = n++; + d2lp.v2 = chldLS; + d2lp.v3 = sblLS; + d2lp.v4 = prntF; + d2lp.cz5(); + f[37] = d2lp.csa(s_dir, dir); + f[38] = d2lp.csa(s_dist, dist); + + d2pp.v1 = label; + d2pp.v0 = n++; + d2pp.v2 = prntLS; + d2pp.v3 = chldLS; + d2pp.v4 = sP; + d2pp.cz5(); + f[39] = d2pp.csa(s_dir, dir); + f[40] = d2pp.csa(s_dist, dist); + d2pp.v0 = n++; + d2pp.v2 = prntLS; + d2pp.v3 = sblLS; + d2pp.v4 = dP; + d2pp.cz5(); + f[41] = d2pp.csa(s_dir, dir); + f[42] = d2pp.csa(s_dist, dist); + d2pp.v0 = n++; + d2pp.v2 = chldLS; + d2pp.v3 = sblLS; + d2pp.v4 = pP; + d2pp.cz5(); + f[43] = d2pp.csa(s_dir, dir); + f[44] = d2pp.csa(s_dist, dist); + + int prntPm1 = prnt != 0 ? pos[prnt - 1] : s_str; + int chldPm1 = d - 1 >= 0 ? pos[d - 1] : s_str; + int prntPp1 = prnt != pos.length - 1 ? pos[prnt + 1] : s_end; + int chldPp1 = d != pos.length - 1 ? pos[d + 1] : s_end; + + // sibling part of speech minus and plus 1 + int sblPm1 = sblng > 0 ? pos[sblng - 1] : s_str; + int sblPp1 = sblng < pos.length - 1 ? pos[sblng + 1] : s_end; + + dl1.v0 = n++; + dl1.v2 = sP; + dl1.v3 = sblPp1; + dl1.v4 = pP; + dl1.cz5(); + f[45] = dl1.csa(s_dir, dir); + dl1.v0 = n++; + dl1.v2 = sP; + dl1.v3 = sblPm1; + dl1.v4 = pP; + dl1.cz5(); + f[46] = dl1.csa(s_dir, dir);// f.add(li.l2i(l)); + dl1.v0 = n++; + dl1.v2 = sP; + dl1.v3 = pP; + dl1.v4 = prntPp1; + dl1.cz5(); + f[47] = dl1.csa(s_dir, dir);// f.add(li.l2i(l)); + dl1.v0 = n++; + dl1.v2 = sP; + dl1.v3 = pP; + dl1.v4 = prntPm1; + dl1.cz5(); + f[48] = dl1.csa(s_dir, dir);// f.add(li.l2i(l)); + dl1.v0 = n++; + dl1.v2 = sP; + dl1.v3 = sblPp1; + dl1.v4 = prntPm1; + dl1.v5 = pP; + dl1.cz6(); + f[49] = dl1.csa(s_dir, dir); + dl1.v0 = n++; + dl1.v2 = sblPm1; + dl1.v3 = sP; + dl1.v4 = prntPm1; + dl1.v5 = pP; + dl1.cz6(); + f[50] = dl1.csa(s_dir, dir);// f.add(li.l2i(l)); + dl1.v0 = n++; + dl1.v2 = sP; + dl1.v3 = sblPp1; + dl1.v4 = pP; + dl1.v5 = prntPp1; + dl1.cz6(); + f[51] = dl1.csa(s_dir, dir);// f.add(li.l2i(l)); + dl1.v0 = n++; + dl1.v2 = sblPm1; + dl1.v3 = sP; + dl1.v4 = pP; + dl1.v5 = prntPp1; + dl1.cz6(); + f[52] = dl1.csa(s_dir, dir);// f.add(li.l2i(l)); + dl1.v0 = n++; + dl1.v2 = sP; + dl1.v3 = sblPp1; + dl1.v4 = dP; + dl1.cz5(); + f[53] = dl1.csa(s_dir, dir); + dl1.v0 = n++; + dl1.v2 = sP; + dl1.v3 = sblPm1; + dl1.v4 = dP; + dl1.cz5(); + f[54] = dl1.csa(s_dir, dir); + dl1.v0 = n++; + dl1.v2 = sP; + dl1.v3 = dP; + dl1.v4 = chldPp1; + dl1.cz5(); + f[55] = dl1.csa(s_dir, dir); + dl1.v0 = n++; + dl1.v2 = sP; + dl1.v3 = dP; + dl1.v4 = chldPm1; + dl1.cz5(); + f[56] = dl1.csa(s_dir, dir); + dl1.v0 = n++; + dl1.v2 = sP; + dl1.v3 = sblPp1; + dl1.v4 = chldPm1; + dl1.v5 = dP; + dl1.cz6(); + f[57] = dl1.csa(s_dir, dir);// f.add(li.l2i(l)); + dl1.v0 = n++; + dl1.v2 = sblPm1; + dl1.v3 = sP; + dl1.v4 = chldPm1; + dl1.v5 = dP; + dl1.cz6(); + f[58] = dl1.csa(s_dir, dir); + dl1.v0 = n++; + dl1.v2 = sP; + dl1.v3 = sblPp1; + dl1.v4 = dP; + dl1.v5 = chldPp1; + dl1.cz6(); + f[59] = dl1.csa(s_dir, dir);// f.add(li.l2i(l)); + dl1.v0 = n++; + dl1.v2 = sblPm1; + dl1.v3 = sP; + dl1.v4 = dP; + dl1.v5 = chldPp1; + dl1.cz6(); + f[60] = dl1.csa(s_dir, dir); + + int c = 61; + + int pLSp1 = prnt != pos.length - 1 ? forms[prnt + 1] == -1 ? -1 : cluster.getLP(forms[prnt + 1]) : _cend; + int cLSp1 = d != pos.length - 1 ? forms[d + 1] == -1 ? -1 : cluster.getLP(forms[d + 1]) : _cend; + int sLSp1 = sblng < pos.length - 1 ? forms[sblng + 1] == -1 ? -1 : cluster.getLP(forms[sblng + 1]) : _cend; + + int pLSm1 = prnt != 0 ? forms[prnt - 1] == -1 ? -1 : cluster.getLP(forms[prnt - 1]) : _cstr; + int cLSm1 = d - 1 >= 0 ? forms[d - 1] == -1 ? -1 : cluster.getLP(forms[d - 1]) : _cstr; + int sLSm1 = sblng > 0 ? forms[sblng - 1] == -1 ? -1 : cluster.getLP(forms[sblng - 1]) : _cstr; + + // int c=61; + + dl1.v0 = n++; + dl1.v2 = sP; + dl1.v3 = sLSp1; + dl1.v4 = pP; + dl1.cz5(); + f[c++] = dl1.csa(s_dir, dir); + dl1.v0 = n++; + dl1.v2 = sP; + dl1.v3 = sLSm1; + dl1.v4 = pP; + dl1.cz5(); + f[c++] = dl1.csa(s_dir, dir); + dl1.v0 = n++; + dl1.v2 = sP; + dl1.v3 = pP; + dl1.v4 = pLSp1; + dl1.cz5(); + f[c++] = dl1.csa(s_dir, dir); + dl1.v0 = n++; + dl1.v2 = sP; + dl1.v3 = pP; + dl1.v4 = pLSm1; + dl1.cz5(); + f[c++] = dl1.csa(s_dir, dir); + dl1.v0 = n++; + dl1.v2 = sP; + dl1.v3 = sLSp1; + dl1.v4 = pLSm1; + dl1.v5 = pP; + dl1.cz6(); + f[c++] = dl1.csa(s_dir, dir); + dl1.v0 = n++; + dl1.v2 = sLSm1; + dl1.v3 = sP; + dl1.v4 = pLSm1; + dl1.v5 = pP; + dl1.cz6(); + f[c++] = dl1.csa(s_dir, dir); + dl1.v0 = n++; + dl1.v2 = sP; + dl1.v3 = sLSp1; + dl1.v4 = pP; + dl1.v5 = pLSp1; + dl1.cz6(); + f[c++] = dl1.csa(s_dir, dir); + dl1.v0 = n++; + dl1.v2 = sLSm1; + dl1.v3 = sP; + dl1.v4 = pP; + dl1.v5 = pLSp1; + dl1.cz6(); + f[c++] = dl1.csa(s_dir, dir); + dl1.v0 = n++; + dl1.v2 = sP; + dl1.v3 = sLSp1; + dl1.v4 = dP; + dl1.cz5(); + f[c++] = dl1.csa(s_dir, dir); + dl1.v0 = n++; + dl1.v2 = sP; + dl1.v3 = sLSm1; + dl1.v4 = dP; + dl1.cz5(); + f[c++] = dl1.csa(s_dir, dir); + dl1.v0 = n++; + dl1.v2 = sP; + dl1.v3 = dP; + dl1.v4 = cLSp1; + dl1.cz5(); + f[c++] = dl1.csa(s_dir, dir); + dl1.v0 = n++; + dl1.v2 = sP; + dl1.v3 = dP; + dl1.v4 = cLSm1; + dl1.cz5(); + f[c++] = dl1.csa(s_dir, dir); + dl1.v0 = n++; + dl1.v2 = sP; + dl1.v3 = sLSm1; + dl1.v4 = cLSm1; + dl1.v5 = dP; + dl1.cz6(); + f[c++] = dl1.csa(s_dir, dir); + dl1.v0 = n++; + dl1.v2 = sLSm1; + dl1.v3 = sP; + dl1.v4 = cLSm1; + dl1.v5 = dP; + dl1.cz6(); + f[c++] = dl1.csa(s_dir, dir); + dl1.v0 = n++; + dl1.v2 = sP; + dl1.v3 = sLSp1; + dl1.v4 = dP; + dl1.v5 = cLSp1; + dl1.cz6(); + f[c++] = dl1.csa(s_dir, dir); + dl1.v0 = n++; + dl1.v2 = sLSm1; + dl1.v3 = sP; + dl1.v4 = dP; + dl1.v5 = cLSp1; + dl1.cz6(); + f[c++] = dl1.csa(s_dir, dir); + + dl1.v0 = n++; + dl1.v2 = sP; + dl1.v3 = sLSp1; + dl1.v4 = pP; + dl1.cz5(); + f[c++] = dl1.csa(s_dir, dir); + dl1.v0 = n++; + dl1.v2 = sP; + dl1.v3 = sLSm1; + dl1.v4 = pP; + dl1.cz5(); + f[c++] = dl1.csa(s_dir, dir); + dl1.v0 = n++; + dl1.v2 = sP; + dl1.v3 = pP; + dl1.v4 = pLSp1; + dl1.cz5(); + f[c++] = dl1.csa(s_dir, dir); + dl1.v0 = n++; + dl1.v2 = sP; + dl1.v3 = pP; + dl1.v4 = pLSm1; + dl1.cz5(); + f[c++] = dl1.csa(s_dir, dir); + dl1.v0 = n++; + dl1.v2 = sP; + dl1.v3 = sLSp1; + dl1.v4 = pLSm1; + dl1.v5 = pP; + dl1.cz6(); + f[c++] = dl1.csa(s_dir, dir); + dl1.v0 = n++; + dl1.v2 = sLSm1; + dl1.v3 = sP; + dl1.v4 = pLSm1; + dl1.v5 = pP; + dl1.cz6(); + f[c++] = dl1.csa(s_dir, dir); + dl1.v0 = n++; + dl1.v2 = sP; + dl1.v3 = sLSp1; + dl1.v4 = pP; + dl1.v5 = pLSp1; + dl1.cz6(); + f[c++] = dl1.csa(s_dir, dir); + dl1.v0 = n++; + dl1.v2 = sLSm1; + dl1.v3 = sP; + dl1.v4 = pP; + dl1.v5 = pLSp1; + dl1.cz6(); + f[c++] = dl1.csa(s_dir, dir); + dl1.v0 = n++; + dl1.v2 = sP; + dl1.v3 = sLSp1; + dl1.v4 = dP; + dl1.cz5(); + f[c++] = dl1.csa(s_dir, dir); + dl1.v0 = n++; + dl1.v2 = sP; + dl1.v3 = sLSm1; + dl1.v4 = dP; + dl1.cz5(); + f[c++] = dl1.csa(s_dir, dir); + dl1.v0 = n++; + dl1.v2 = sP; + dl1.v3 = dP; + dl1.v4 = cLSp1; + dl1.cz5(); + f[c++] = dl1.csa(s_dir, dir); + dl1.v0 = n++; + dl1.v2 = sP; + dl1.v3 = dP; + dl1.v4 = cLSm1; + dl1.cz5(); + f[c++] = dl1.csa(s_dir, dir); + dl1.v0 = n++; + dl1.v2 = sP; + dl1.v3 = sLSm1; + dl1.v4 = cLSm1; + dl1.v5 = dP; + dl1.cz6(); + f[c++] = dl1.csa(s_dir, dir); + dl1.v0 = n++; + dl1.v2 = sLSm1; + dl1.v3 = sP; + dl1.v4 = cLSm1; + dl1.v5 = dP; + dl1.cz6(); + f[c++] = dl1.csa(s_dir, dir); + dl1.v0 = n++; + dl1.v2 = sP; + dl1.v3 = sLSp1; + dl1.v4 = dP; + dl1.v5 = cLSp1; + dl1.cz6(); + f[c++] = dl1.csa(s_dir, dir); + dl1.v0 = n++; + dl1.v2 = sLSm1; + dl1.v3 = sP; + dl1.v4 = dP; + dl1.v5 = cLSp1; + dl1.cz6(); + f[c++] = dl1.csa(s_dir, dir); + + // take those in for stacking + + /* + * short[] prel = is.plabels[i],phead=is.pheads[i]; + * + * int g = prnt==phead[d]?1:2 ; if (sblng>=0) g += + * prnt==phead[sblng]?4:8; + * + * int gr = sblng==-1?s_relend:prel[sblng]; + * + * + * dl2.v0= + * n++;dl2.v2=prel[d];dl2.v3=g;dl2.v4=sP;dl2.v5=dP;dl2.cz6();f[c++]=dl2. + * csa(s_dir,dir); dl2.v0= + * n++;dl2.v2=prel[d];dl2.v3=g;dl2.v4=sP;dl2.v5=pP;dl2.cz6();f[c++]=dl2. + * csa(s_dir,dir); dl2.v0= + * n++;dl2.v2=prel[d];dl2.v3=g;dl2.v4=sP;dl2.v5=pP;dl2.v6=dP;dl2.cz7();f + * [c++]=dl2.csa(s_dir,dir); + * + * dl2.v0= + * n++;dl2.v2=gr;dl2.v3=g;dl2.v4=sP;dl2.v5=dP;dl2.cz6();f[c++]=dl2.csa( + * s_dir,dir); dl2.v0= + * n++;dl2.v2=gr;dl2.v3=g;dl2.v4=sP;dl2.v5=pP;dl2.cz6();f[c++]=dl2.csa( + * s_dir,dir); dl2.v0= + * n++;dl2.v2=gr;dl2.v3=g;dl2.v4=sP;dl2.v5=pP;dl2.v6=dP;dl2.cz7();f[c++] + * =dl2.csa(s_dir,dir); + */ + + if (feats == null) + return; + + int cnt = c; + + short[] featsP = feats[d]; + short[] featsSbl = sblng != -1 ? feats[sblng] : null; + + dlf.v0 = n++; + dlf.v1 = label; + dlf.v2 = sP; + dlf.v3 = dP; + + cnt = extractFeat(f, cnt, dir, featsP, featsSbl); + + featsP = feats[prnt]; + featsSbl = sblng != -1 ? feats[sblng] : null; + + dlf.v0 = n++; + dlf.v1 = label; + dlf.v2 = pP; + dlf.v3 = sP; + if (featsP != null && featsSbl != null) { + for (short i1 = 0; i1 < featsP.length; i1++) { + for (short i2 = 0; i2 < featsSbl.length; i2++) { + dlf.v4 = featsP[i1]; + dlf.v5 = featsSbl[i2]; + dlf.cz6(); + f[cnt++] = dlf.csa(s_dir, prnt < sblng ? 1 : 2); + } + } + } else if (featsP == null && featsSbl != null) { + + for (short i2 = 0; i2 < featsSbl.length; i2++) { + dlf.v4 = nofeat; + dlf.v5 = featsSbl[i2]; + dlf.cz6(); + f[cnt++] = dlf.csa(s_dir, dir); + } + + } else if (featsP != null && featsSbl == null) { + + for (short i1 = 0; i1 < featsP.length; i1++) { + dlf.v4 = featsP[i1]; + dlf.v5 = nofeat; + dlf.cz6(); + f[cnt++] = dlf.csa(s_dir, dir); + } + } + + return; + } + + private int extractFeat(long[] f, int cnt, int dir, short[] featsP, short[] featsD) { + if (featsP != null && featsD != null) { + for (short i1 = 0; i1 < featsP.length; i1++) { + for (short i2 = 0; i2 < featsD.length; i2++) { + dlf.v4 = featsP[i1]; + dlf.v5 = featsD[i2]; + dlf.cz6(); + f[cnt++] = dlf.csa(s_dir, dir); + } + } + } else if (featsP == null && featsD != null) { + + for (short i2 = 0; i2 < featsD.length; i2++) { + dlf.v4 = nofeat; + dlf.v5 = featsD[i2]; + dlf.cz6(); + f[cnt++] = dlf.csa(s_dir, dir); + + } + } else if (featsP != null && featsD == null) { + + for (short i1 = 0; i1 < featsP.length; i1++) { + dlf.v4 = featsP[i1]; + dlf.v5 = nofeat; + dlf.cz6(); + f[cnt++] = dlf.csa(s_dir, dir); + + } + } + return cnt; + } + + @Override + public FV encodeCat(Instances is, int ic, short pposs[], int forms[], int[] lemmas, short[] heads, short[] types, + short feats[][], Cluster cluster, FV f) { + + long[] svs = new long[250]; + + for (int i = 1; i < heads.length; i++) { + + int n = basic(pposs, forms, heads[i], i, cluster, f); + + firstm(is, ic, heads[i], i, types[i], cluster, svs); + for (long sv : svs) + dl1.map(f, sv); + + int ch, cmi, cmo; + if (heads[i] < i) { + ch = rightmostRight(heads, heads[i], i); + cmi = leftmostLeft(heads, i, heads[i]); + cmo = rightmostRight(heads, i, heads.length); + + } else { + ch = leftmostLeft(heads, heads[i], i); + cmi = rightmostRight(heads, i, heads[i]); + cmo = leftmostLeft(heads, i, 0); + } + + siblingm(is, ic, pposs, forms, lemmas, feats, heads[i], i, ch, types[i], cluster, svs, n); + for (long sv : svs) + dl1.map(f, sv); + + gcm(is, ic, heads[i], i, cmi, types[i], cluster, svs); + for (long sv : svs) + dl1.map(f, sv); + + gcm(is, ic, heads[i], i, cmo, types[i], cluster, svs); + for (long sv : svs) + dl1.map(f, sv); + } + + return f; + } + + @Override + public float encode3(short[] pos, short heads[], short[] types, DataF d2) { + + double v = 0; + for (int i = 1; i < heads.length; i++) { + + int dir = (heads[i] < i) ? 0 : 1; + + v += d2.pl[heads[i]][i]; + v += d2.lab[heads[i]][i][types[i]][dir]; + + boolean left = i < heads[i]; + short[] labels = Edges.get(pos[heads[i]], pos[i], left); + int lid = -1; + for (int k = 0; k < labels.length; k++) + if (types[i] == labels[k]) { + lid = k; + break; + } + + int ch, cmi, cmo; + if (heads[i] < i) { + ch = rightmostRight(heads, heads[i], i); + cmi = leftmostLeft(heads, i, heads[i]); + cmo = rightmostRight(heads, i, heads.length); + + if (ch == -1) + ch = heads[i]; + if (cmi == -1) + cmi = heads[i]; + if (cmo == -1) + cmo = heads[i]; + + } else { + ch = leftmostLeft(heads, heads[i], i); + cmi = rightmostRight(heads, i, heads[i]); + cmo = leftmostLeft(heads, i, 0); + + if (ch == -1) + ch = i; + if (cmi == -1) + cmi = i; + if (cmo == -1) + cmo = i; + } + v += d2.sib[heads[i]][i][ch][dir][lid]; + v += d2.gra[heads[i]][i][cmi][dir][lid]; + v += d2.gra[heads[i]][i][cmo][dir][lid]; + } + return (float) v; + } + + /** + * Provide the scores of the edges + * + * @param pos + * @param heads + * @param types + * @param edgesScores + * @param d2 + * @return + */ + public static float encode3(short[] pos, short heads[], short[] types, float[] edgesScores, DataF d2) { + + double v = 0; + for (int i = 1; i < heads.length; i++) { + + int dir = (heads[i] < i) ? 0 : 1; + + edgesScores[i] = d2.pl[heads[i]][i]; + edgesScores[i] += d2.lab[heads[i]][i][types[i]][dir]; + + boolean left = i < heads[i]; + short[] labels = Edges.get(pos[heads[i]], pos[i], left); + int lid = -1; + for (int k = 0; k < labels.length; k++) + if (types[i] == labels[k]) { + lid = k; + break; + } + + int ch, cmi, cmo; + if (heads[i] < i) { + ch = rightmostRight(heads, heads[i], i); + cmi = leftmostLeft(heads, i, heads[i]); + cmo = rightmostRight(heads, i, heads.length); + + if (ch == -1) + ch = heads[i]; + if (cmi == -1) + cmi = heads[i]; + if (cmo == -1) + cmo = heads[i]; + + } else { + ch = leftmostLeft(heads, heads[i], i); + cmi = rightmostRight(heads, i, heads[i]); + cmo = leftmostLeft(heads, i, 0); + + if (ch == -1) + ch = i; + if (cmi == -1) + cmi = i; + if (cmo == -1) + cmo = i; + } + edgesScores[i] += d2.sib[heads[i]][i][ch][dir][lid]; + edgesScores[i] += d2.gra[heads[i]][i][cmi][dir][lid]; + edgesScores[i] += d2.gra[heads[i]][i][cmo][dir][lid]; + v += edgesScores[i]; + } + return (float) v; + } + + private static int rightmostRight(short[] heads, int head, int max) { + int rightmost = -1; + for (int i = head + 1; i < max; i++) + if (heads[i] == head) + rightmost = i; + + return rightmost; + } + + private static int leftmostLeft(short[] heads, int head, int min) { + int leftmost = -1; + for (int i = head - 1; i > min; i--) + if (heads[i] == head) + leftmost = i; + return leftmost; + } + + public static final String REL = "REL", END = "END", STR = "STR", LA = "LA", RA = "RA"; + + private static int ra, la; + private static int s_str; + private static int s_end, _cend, _cstr, s_stwrd; + + protected static final String TYPE = "TYPE", DIR = "D", FEAT = "F"; + public static final String POS = "POS"; + protected static final String DIST = "DIST", MID = "MID"; + + private static final String _0 = "0", _4 = "4", _3 = "3", _2 = "2", _1 = "1", _5 = "5", _10 = "10"; + + private static int di0, d4, d3, d2, d1, d5, d10; + + private static final String WORD = "WORD", STWRD = "STWRD", STPOS = "STPOS"; + + private static int nofeat; + + private static int maxForm; + + /** + * Initialize the features. + * + * @param maxFeatures + */ + static public void initFeatures() { + + MFB mf = new MFB(); + mf.register(POS, MID); + s_str = mf.register(POS, STR); + s_end = mf.register(POS, END); + + mf.register(REL, END); + + _cstr = mf.register(Cluster.SPATH, STR); + _cend = mf.register(Cluster.SPATH, END); + + mf.register(TYPE, POS); + + s_stwrd = mf.register(WORD, STWRD); + mf.register(POS, STPOS); + + la = mf.register(DIR, LA); + ra = mf.register(DIR, RA); + + // mf.register(TYPE, CHAR); + + mf.register(TYPE, FEAT); + nofeat = mf.register(FEAT, "NOFEAT"); + + for (int k = 0; k < 215; k++) + mf.register(TYPE, "F" + k); + + di0 = mf.register(DIST, _0); + d1 = mf.register(DIST, _1); + d2 = mf.register(DIST, _2); + d3 = mf.register(DIST, _3); + d4 = mf.register(DIST, _4); + d5 = mf.register(DIST, _5); + // d5l=mf.register(DIST, _5l); + d10 = mf.register(DIST, _10); + + } + + /* + * (non-Javadoc) + * + * @see extractors.Extractor#getType() + */ + @Override + public int getType() { + return s_type; + } + + /* + * (non-Javadoc) + * + * @see extractors.Extractor#setMaxForm(java.lang.Integer) + */ + @Override + public void setMaxForm(int max) { + maxForm = max; + } + + /* + * (non-Javadoc) + * + * @see extractors.Extractor#getMaxForm() + */ + @Override + public int getMaxForm() { + return maxForm; + } + +} diff --git a/dependencyParser/experimental/mate-tools/src/extractors/ExtractorFactory.java b/dependencyParser/experimental/mate-tools/src/extractors/ExtractorFactory.java new file mode 100644 index 0000000..20827d4 --- /dev/null +++ b/dependencyParser/experimental/mate-tools/src/extractors/ExtractorFactory.java @@ -0,0 +1,42 @@ +/** + * + */ +package extractors; + +import is2.data.Long2IntInterface; + +/** + * @author Dr. Bernd Bohnet, 29.04.2011 + * + * + */ +public class ExtractorFactory { + + public static final int StackedClustered = 4; + public static final int StackedClusteredR2 = 5; + + private int type = -1; + + /** + * @param stackedClusteredR22 + */ + public ExtractorFactory(int t) { + type = t; + } + + /** + * @param stackedClusteredR22 + * @param l2i + * @return + */ + public Extractor getExtractor(Long2IntInterface l2i) { + switch (type) { + case StackedClustered: + return new ExtractorClusterStacked(l2i); + case StackedClusteredR2: + return new ExtractorClusterStackedR2(l2i); + } + return null; + } + +} diff --git a/dependencyParser/experimental/mate-tools/src/extractors/ExtractorReranker.java b/dependencyParser/experimental/mate-tools/src/extractors/ExtractorReranker.java new file mode 100644 index 0000000..bf068b2 --- /dev/null +++ b/dependencyParser/experimental/mate-tools/src/extractors/ExtractorReranker.java @@ -0,0 +1,1080 @@ +package extractors; + +import java.util.Arrays; + +import is2.data.Cluster; +import is2.data.D4; +import is2.data.Instances; +import is2.data.Long2IntInterface; +import is2.data.MFB; +import is2.data.ParseNBest; +import is2.util.DB; + +final public class ExtractorReranker { + + public static int s_rel, s_word, s_type, s_dir, s_dist, s_feat, s_child, s_spath, s_lpath, s_pos; + public static int d0, d1, d2, d3, d4, d5, d10; + + MFB mf; + + final D4 dl1, dl2, dwr, dr, dwwp, dw, dwp, dlf, d3lp, d2lp, d2pw, d2pp; + + public final Long2IntInterface li; + + public ExtractorReranker(Long2IntInterface li) { + this.li = li; + dl1 = new D4(li); + dl2 = new D4(li); + dwr = new D4(li); + dr = new D4(li); + dwwp = new D4(li); + + dw = new D4(li); + dwp = new D4(li); + + dlf = new D4(li); + d3lp = new D4(li); + d2lp = new D4(li); + d2pw = new D4(li); + d2pp = new D4(li); + + } + + public static void initStat() { + DB.println("init called "); + MFB mf = new MFB(); + s_rel = mf.getFeatureCounter().get(REL).intValue(); + ; + s_pos = mf.getFeatureCounter().get(POS).intValue(); + s_word = mf.getFeatureCounter().get(WORD).intValue(); + s_type = mf.getFeatureCounter().get(TYPE).intValue();// mf.getFeatureBits(); + s_dir = mf.getFeatureCounter().get(DIR); + mf.getValue(DIR, LA); + mf.getValue(DIR, RA); + s_dist = mf.getFeatureCounter().get(DIST);// mf.getFeatureBits(DIST); + s_feat = mf.getFeatureCounter().get(FEAT);// mf.getFeatureBits(Pipe.FEAT); + s_spath = mf.getFeatureCounter().get(Cluster.SPATH) == null ? 0 : mf.getFeatureCounter().get(Cluster.SPATH);// mf.getFeatureBits(Cluster.SPATH); + s_lpath = mf.getFeatureCounter().get(Cluster.LPATH) == null ? 0 : mf.getFeatureCounter().get(Cluster.LPATH);// mf.getFeatureBits(Cluster.LPATH); + } + + public void init() { + mf = new MFB(); + + dl1.a0 = s_type; + dl1.a1 = 3; + dl1.a2 = s_pos; + dl1.a3 = s_pos; + dl1.a4 = s_pos; + dl1.a5 = s_pos; + dl1.a6 = s_pos; + dl1.a7 = s_pos; + dl2.a0 = s_type; + dl2.a1 = 3; + dl2.a2 = s_rel; + dl2.a3 = s_rel; + dl2.a4 = s_rel; + dl2.a5 = s_rel; + dl2.a6 = s_rel; + dl2.a7 = s_rel; + dl2.a8 = s_rel; + dl2.a9 = s_rel; + dwp.a0 = s_type; + dwp.a1 = 3; + dwp.a2 = s_word; + dwp.a3 = s_rel; + dwp.a4 = s_rel; + dwp.a5 = s_rel; + dwp.a6 = s_rel; + dwp.a7 = s_rel; + dwwp.a0 = s_type; + dwwp.a1 = 3; + dwwp.a2 = s_word; + dwwp.a3 = s_word; + dwwp.a4 = s_pos; + dwwp.a5 = s_word; + dwwp.a6 = s_pos; + dwwp.a7 = s_pos; + } + + public static final String REL = "REL", END = "END", STR = "STR", LA = "LA", RA = "RA", FEAT = "F"; + + private static int s_end, s_stwrd, s_relend; + + protected static final String TYPE = "TYPE", DIR = "D"; + public static final String POS = "POS"; + protected static final String DIST = "DIST", MID = "MID"; + + private static final String _0 = "0", _4 = "4", _3 = "3", _2 = "2", _1 = "1", _5 = "5", _10 = "10"; + + private static final String WORD = "WORD", STWRD = "STWRD", STPOS = "STPOS"; + + public static int maxForm; + + final public static int _FC = 60; + + /** + * Initialize the features. + * + * @param maxFeatures + */ + static public void initFeatures() { + + MFB mf = new MFB(); + mf.register(POS, MID); + mf.register(POS, STR); + s_end = mf.register(POS, END); + + s_relend = mf.register(REL, END); + + mf.register(Cluster.SPATH, STR); + mf.register(Cluster.SPATH, END); + + mf.register(TYPE, POS); + + s_stwrd = mf.register(WORD, STWRD); + mf.register(POS, STPOS); + + mf.register(DIR, LA); + mf.register(DIR, RA); + + // mf.register(TYPE, CHAR); + + mf.register(TYPE, FEAT); + mf.register(FEAT, "NOFEAT"); + + for (int k = 0; k < 60; k++) + mf.register(TYPE, "F" + k); + + d0 = mf.register(DIST, _0); + d1 = mf.register(DIST, _1); + d2 = mf.register(DIST, _2); + d3 = mf.register(DIST, _3); + d4 = mf.register(DIST, _4); + d5 = mf.register(DIST, _5); + // d5l=mf.register(DIST, _5l); + d10 = mf.register(DIST, _10); + + } + + /** + * @param is + * @param n + * @param parseNBest + * @param vs + */ + public void extractFeatures3(Instances is, int i, ParseNBest parse, int rank, long[] v) { + + int f = 1, n = 0; + + for (short k = 0; k < is.length(i) - 1; k++) { + + short[] chld = children(parse.heads, k); + + f = 2; + + int fm = is.forms[i][k]; + int hh = k != 0 ? is.pposs[i][parse.heads[k]] : s_end; + int h = is.pposs[i][k]; + int hrel = parse.labels[k]; + int hhrel = k != 0 ? parse.labels[parse.heads[k]] : s_relend; + int hhf = k != 0 ? is.forms[i][parse.heads[k]] : s_stwrd; + + int rlast = chld.length > 0 ? parse.labels[chld[chld.length - 1]] : s_relend; + + int[] rels = new int[chld.length]; + int[] pss = new int[chld.length]; + for (int j = 0; j < chld.length; j++) { + rels[j] = parse.labels[chld[j]]; + pss[j] = is.pposs[i][chld[j]]; + } + + StringBuilder rl = new StringBuilder(chld.length); + StringBuilder psl = new StringBuilder(chld.length); + for (int j = 0; j < chld.length; j++) { + rl.append((char) rels[j]); + psl.append((char) pss[j]); + } + + int rli = mf.register("rli", rl.toString()); + int pli = mf.register("pli", psl.toString()); + + dwwp.v0 = f++; + dwwp.v2 = rli; + dwwp.cz3(); + v[n++] = dwwp.getVal(); + dwwp.v0 = f++; + dwwp.v2 = pli; + dwwp.cz3(); + v[n++] = dwwp.getVal(); + + dwwp.v0 = f++; + dwwp.v2 = rli; + dwwp.v3 = h; + dwwp.cz4(); + v[n++] = dwwp.getVal(); + dwwp.v0 = f++; + dwwp.v2 = pli; + dwwp.v3 = h; + dwwp.cz4(); + v[n++] = dwwp.getVal(); + + dwwp.v0 = f++; + dwwp.v2 = pli; + dwwp.v3 = hh; + dwwp.v4 = h; + dwwp.cz5(); + v[n++] = dwwp.getVal(); + dwwp.v0 = f++; + dwwp.v2 = rli; + dwwp.v3 = hh; + dwwp.v4 = h; + dwwp.cz5(); + v[n++] = dwwp.getVal(); + + dwwp.v0 = f++; + dwwp.v2 = pli; + dwwp.v3 = rli; + dwwp.v4 = h; + dwwp.cz5(); + v[n++] = dwwp.getVal(); + dwwp.v0 = f++; + dwwp.v2 = fm; + dwwp.v3 = rli; + dwwp.v4 = h; + dwwp.cz5(); + v[n++] = dwwp.getVal(); + dwwp.v0 = f++; + dwwp.v2 = pli; + dwwp.v3 = fm; + dwwp.v4 = h; + dwwp.cz5(); + v[n++] = dwwp.getVal(); + + dwwp.v0 = f++; + dwwp.v2 = pli; + dwwp.v3 = rli; + dwwp.v4 = hh; + dwwp.cz5(); + v[n++] = dwwp.getVal(); + dwwp.v0 = f++; + dwwp.v2 = pli; + dwwp.v3 = rli; + dwwp.v4 = hh; + dwwp.v5 = h; + dwwp.cz6(); + v[n++] = dwwp.getVal(); + + dwp.v0 = f++; + dwp.v2 = rli; + dwp.v3 = hrel; + dwp.v4 = hh; + dwp.v5 = h; + dwp.cz6(); + v[n++] = dwp.getVal(); + + Arrays.sort(rels); + Arrays.sort(pss); + + rl = new StringBuilder(chld.length); + psl = new StringBuilder(chld.length); + for (int j = 0; j < chld.length; j++) { + rl.append((char) rels[j]); + psl.append((char) pss[j]); + } + rli = mf.register("rli", rl.toString()); + pli = mf.register("pli", psl.toString()); + + dwwp.v0 = f++; + dwwp.v2 = pli; + dwwp.v3 = rli; + dwwp.v4 = h; + dwwp.cz5(); + v[n++] = dwwp.getVal(); + dwwp.v0 = f++; + dwwp.v2 = fm; + dwwp.v3 = rli; + dwwp.v4 = h; + dwwp.cz5(); + v[n++] = dwwp.getVal(); + dwwp.v0 = f++; + dwwp.v2 = pli; + dwwp.v3 = fm; + dwwp.v4 = h; + dwwp.cz5(); + v[n++] = dwwp.getVal(); + + dwwp.v0 = f++; + dwwp.v2 = rli; + dwwp.v3 = h; + dwwp.cz4(); + v[n++] = dwwp.getVal(); + + dl1.v0 = f++; + dl1.v2 = h; + dl1.v3 = hrel; + dl1.v4 = hhrel; + dl1.v5 = hh; + dl1.v6 = rlast; + dl1.cz6(); + v[n++] = dl1.getVal(); + dwp.v0 = f++; + dwp.v2 = fm; + dwp.v3 = hrel; + dwp.v4 = hh; + dwp.cz5(); + v[n++] = dwp.getVal(); + dwp.v0 = f++; + dwp.v2 = hhf; + dwp.v3 = hrel; + dwp.v4 = hh; + dwp.v5 = h; + dwp.cz6(); + v[n++] = dwp.getVal(); + + dwwp.v0 = f++; + dwwp.v2 = fm; + dwwp.v3 = hhf; + dwwp.v4 = hrel; + dwwp.v5 = hhrel; + dwwp.cz6(); + v[n++] = dwwp.getVal(); + dwwp.v0 = f++; + dwwp.v2 = h; + dwwp.v3 = hhf; + dwwp.v4 = hrel; + dwwp.v5 = hhrel; + dwwp.cz6(); + v[n++] = dwwp.getVal(); + dwwp.v0 = f++; + dwwp.v2 = fm; + dwwp.v3 = hh; + dwwp.v4 = hrel; + dwwp.v5 = hhrel; + dwwp.cz6(); + v[n++] = dwwp.getVal(); + + dwwp.v0 = f++; + dwwp.v2 = fm; + dwwp.v3 = hhf; + dwwp.v4 = h; + dwwp.v5 = hh; + dwwp.cz6(); + v[n++] = dwwp.getVal(); + dwwp.v0 = f++; + dwwp.v2 = h; + dwwp.v3 = hhf; + dwwp.v4 = hrel; + dwwp.v5 = hh; + dwwp.cz6(); + v[n++] = dwwp.getVal(); + dwwp.v0 = f++; + dwwp.v2 = fm; + dwwp.v3 = hh; + dwwp.v4 = h; + dwwp.v5 = hrel; + dwwp.cz6(); + v[n++] = dwwp.getVal(); + + // dl1.v0= f++; dl1.v2=h;dl1.v3=hrel; dl1.v4=hhrel;dl1.v5=hh; + // dl1.v6=hhhrel;dl1.v7=hhh; dl1.v8=rlast; dl1.cz9(); + // v[n++]=dl1.getVal(); + // dl1.v0= f++; dl1.v2=h;dl1.v3=hrel; dl1.v4=hhrel;dl1.v5=hh; + // dl1.v6=hhhrel;dl1.v7=hhh; dl1.v8=rlast; dl1.cz9(); + // v[n++]=dl1.getVal(); + // dl1.v0= f++; dl1.v2=h;dl1.v3=hrel; dl1.v4=dir;dl1.v5=hh; + // dl1.v6=hhh;dl1.v7=rlast; dl1.v8=r1; dl1.cz9(); + // v[n++]=dl1.getVal(); + // dl1.v0= f++; dl1.v2=h;dl1.v3=hh; dl1.v4=hhh;dl1.v5=hrel; + // dl1.cz6(); v[n++]=dl1.getVal(); + + short hp = parse.heads[k]; + short[] hchld = hp == -1 ? new short[0] : children(parse.heads, hp); + + int[] hrels = new int[hchld.length]; + int[] hpss = new int[hchld.length]; + for (int j = 0; j < hchld.length; j++) { + hrels[j] = parse.labels[hchld[j]]; + hpss[j] = is.pposs[i][hchld[j]]; + } + + StringBuilder hrl = new StringBuilder(hchld.length); + StringBuilder hpsl = new StringBuilder(hchld.length); + for (int j = 0; j < hchld.length; j++) { + hrl.append((char) hrels[j]); + hpsl.append((char) hpss[j]); + } + int hrli = mf.register("rli", hrl.toString()); + int hpli = mf.register("pli", hpsl.toString()); + + dwwp.v0 = f++; + dwwp.v2 = hpli; + dwwp.v3 = hrli; + dwwp.cz4(); + v[n++] = dwwp.getVal(); + dwwp.v0 = f++; + dwwp.v2 = fm; + dwwp.v3 = hrli; + dwwp.cz4(); + v[n++] = dwwp.getVal(); + dwwp.v0 = f++; + dwwp.v2 = hpli; + dwwp.v3 = fm; + dwwp.cz4(); + v[n++] = dwwp.getVal(); + + dwwp.v0 = f++; + dwwp.v2 = hpli; + dwwp.v3 = rli; + dwwp.v4 = hrel; + dwwp.v5 = h; + dwwp.cz5(); + v[n++] = dwwp.getVal(); + dwwp.v0 = f++; + dwwp.v2 = pli; + dwwp.v3 = hrli; + dwwp.v4 = hrel; + dwwp.v5 = h; + dwwp.cz5(); + v[n++] = dwwp.getVal(); + dwwp.v0 = f++; + dwwp.v2 = hpli; + dwwp.v3 = hpli; + dwwp.v4 = hrel; + dwwp.v5 = h; + dwwp.cz5(); + v[n++] = dwwp.getVal(); + + } + + v[n] = Integer.MIN_VALUE; + } + + /** + * This works seem works well with n-best n=8 (88.858074) , n=10 + * (88.836884), n=12 (88.858) n=14 (88.913417) n=16 (88.79546) n=20 + * (88.80621) n 50 (88.729364) 1-best: 88.749605 + * + * @param is + * @param i + * @param parse + * @param rank + * @param v + * @param cluster + */ + public void extractFeatures(Instances is, int i, ParseNBest parse, int rank, long[] v, Cluster cluster) { + + // mf.getValue(REL, "SB"); + + int f = 1, n = 0; + + for (short k = 0; k < is.length(i) - 1; k++) { + + short[] chld = children(parse.heads, k); + + int abs = Math.abs(parse.heads[k] - k); + if (abs > 10) { + } else if (abs > 5) { + } else if (abs == 5) { + } else if (abs == 4) { + } else if (abs == 3) { + } else if (abs == 2) { + } else { + } + + f = 2; + + int fm = is.forms[i][k]; + int hh = k != 0 ? is.pposs[i][parse.heads[k]] : s_end; + int h = is.pposs[i][k]; + int hrel = parse.labels[k];// is.labels[i][k]; + int hhrel = k != 0 ? parse.labels[parse.heads[k]] : s_relend; + int hhf = k != 0 ? is.forms[i][parse.heads[k]] : s_stwrd; + + int rlast = chld.length > 0 ? parse.labels[chld[chld.length - 1]] : s_relend; + + int[] rels = new int[chld.length]; + int[] pss = new int[chld.length]; + int[] rc = new int[30]; // 20 was a good length + + for (int j = 0; j < chld.length; j++) { + rels[j] = parse.labels[chld[j]]; + if (rels[j] < rc.length) + rc[rels[j]]++; + pss[j] = is.pposs[i][chld[j]]; + // cls[j] = + // is.forms[i][chld[j]]==-1?0:cluster.getLP(is.forms[i][chld[j]]); + // cls[j] = cls[j]==-1?0:cls[j]; + } + + StringBuilder rl = new StringBuilder(chld.length); + StringBuilder psl = new StringBuilder(chld.length); + new StringBuilder(chld.length); + for (int j = 0; j < chld.length; j++) { + rl.append((char) rels[j]); + psl.append((char) pss[j]); + // csl.append((char)cls[j]); + } + + int rli = mf.register("rli", rl.toString()); + int pli = mf.register("pli", psl.toString()); + // int cli = mf.register("cli", csl.toString()); + + dwwp.v0 = f++; + dwwp.v2 = pli; + dwwp.v3 = rli; + dwwp.v4 = h; + dwwp.cz5(); + v[n++] = dwwp.getVal(); + dwwp.v0 = f++; + dwwp.v2 = fm; + dwwp.v3 = rli; + dwwp.v4 = h; + dwwp.cz5(); + v[n++] = dwwp.getVal(); + dwwp.v0 = f++; + dwwp.v2 = pli; + dwwp.v3 = fm; + dwwp.v4 = h; + dwwp.cz5(); + v[n++] = dwwp.getVal(); + // dwwp.v0=f++; dwwp.v2=cli; dwwp.v3=fm; dwwp.v4=h; dwwp.cz5(); + // v[n++]=dwwp.getVal(); + + dwwp.v0 = f++; + dwwp.v2 = rli; + dwwp.cz3(); + v[n++] = dwwp.getVal(); + dwwp.v0 = f++; + dwwp.v2 = pli; + dwwp.cz3(); + v[n++] = dwwp.getVal(); + // dwwp.v0=f++; dwwp.v2=cli; dwwp.cz3(); v[n++]=dwwp.getVal(); + + // dwwp.v0=f++; dwwp.v2=cli;dwwp.v3=h; dwwp.cz4(); + // v[n++]=dwwp.getVal(); + + for (int j = 1; j < rc.length; j++) { + dwwp.v0 = f++; + dwwp.v2 = rc[j] == 0 ? 1 : rc[j] == 1 ? 2 : 3; + dwwp.v3 = j; + dwwp.cz4(); + v[n++] = dwwp.getVal();// + } + + dwwp.v0 = f++; + dwwp.v2 = rli; + dwwp.v3 = h; + dwwp.cz4(); + v[n++] = dwwp.getVal(); + dwwp.v0 = f++; + dwwp.v2 = pli; + dwwp.v3 = h; + dwwp.cz4(); + v[n++] = dwwp.getVal(); + + dwwp.v0 = f++; + dwwp.v2 = pli; + dwwp.v3 = hh; + dwwp.v4 = h; + dwwp.cz5(); + v[n++] = dwwp.getVal(); + dwwp.v0 = f++; + dwwp.v2 = rli; + dwwp.v3 = hh; + dwwp.v4 = h; + dwwp.cz5(); + v[n++] = dwwp.getVal(); + + dwwp.v0 = f++; + dwwp.v2 = pli; + dwwp.v3 = rli; + dwwp.v4 = hh; + dwwp.cz5(); + v[n++] = dwwp.getVal(); + dwwp.v0 = f++; + dwwp.v2 = pli; + dwwp.v3 = rli; + dwwp.v4 = hh; + dwwp.v5 = h; + dwwp.cz6(); + v[n++] = dwwp.getVal(); + + dwp.v0 = f++; + dwp.v2 = rli; + dwp.v3 = hrel; + dwp.v4 = hh; + dwp.v5 = h; + dwp.cz6(); + v[n++] = dwp.getVal(); + + // dwwp.v0=f++; dwwp.v2=h; dwwp.v3=hh; dwwp.v4=dist; dwwp.cz5(); + // v[n++]=dwwp.getVal(); + + Arrays.sort(rels); + Arrays.sort(pss); + + rl = new StringBuilder(chld.length); + psl = new StringBuilder(chld.length); + for (int j = 0; j < chld.length; j++) { + rl.append((char) rels[j]); + psl.append((char) pss[j]); + } + rli = mf.register("rli", rl.toString()); + pli = mf.register("pli", psl.toString()); + + dwwp.v0 = f++; + dwwp.v2 = pli; + dwwp.v3 = rli; + dwwp.v4 = 1; + dwwp.v5 = h; + dwwp.cz6(); + v[n++] = dwwp.getVal(); + dwwp.v0 = f++; + dwwp.v2 = fm; + dwwp.v3 = rli; + dwwp.v4 = 1; + dwwp.v5 = h; + dwwp.cz6(); + v[n++] = dwwp.getVal(); + dwwp.v0 = f++; + dwwp.v2 = pli; + dwwp.v3 = fm; + dwwp.v4 = 1; + dwwp.v5 = h; + dwwp.cz6(); + v[n++] = dwwp.getVal(); + + dwwp.v0 = f++; + dwwp.v2 = rli; + dwwp.v3 = h; + dwwp.cz4(); + v[n++] = dwwp.getVal(); + + dl1.v0 = f++; + dl1.v2 = h; + dl1.v3 = hrel; + dl1.v4 = hhrel; + dl1.v5 = hh; + dl1.v6 = rlast; + dl1.cz6(); + v[n++] = dl1.getVal(); + dwp.v0 = f++; + dwp.v2 = fm; + dwp.v3 = hrel; + dwp.v4 = hh; + dwp.cz5(); + v[n++] = dwp.getVal(); + dwp.v0 = f++; + dwp.v2 = hhf; + dwp.v3 = hrel; + dwp.v4 = hh; + dwp.v5 = h; + dwp.cz6(); + v[n++] = dwp.getVal(); + } + + v[n] = Integer.MIN_VALUE; + } + + /** + * + * Works well! + * + * @param is + * @param i + * @param parse + * @param rank + * @param v + */ + public void extractFeatures6(Instances is, int i, ParseNBest parse, int rank, long[] v) { + + // mf.getValue(REL, "SB"); + + int f = 1, n = 0; + + for (short k = 0; k < is.length(i) - 1; k++) { + + short[] chld = children(parse.heads, k); + + f = 2; + + int fm = is.forms[i][k]; + int hh = k != 0 ? is.pposs[i][parse.heads[k]] : s_end; + int h = is.pposs[i][k]; + int hrel = parse.labels[k];// is.labels[i][k]; + int hhrel = k != 0 ? parse.labels[parse.heads[k]] : s_relend; + int hhf = k != 0 ? is.forms[i][parse.heads[k]] : s_stwrd; + + int rlast = chld.length > 0 ? parse.labels[chld[chld.length - 1]] : s_relend; + + int[] rels = new int[chld.length]; + int[] pss = new int[chld.length]; + + int[] rc = new int[30]; // 20 was a good length + + for (int j = 0; j < chld.length; j++) { + rels[j] = parse.labels[chld[j]]; + if (rels[j] < rc.length) + rc[rels[j]]++; + // if (rels[j]==sb) numSB++; + pss[j] = is.pposs[i][chld[j]]; + } + + StringBuilder rl = new StringBuilder(chld.length); + StringBuilder psl = new StringBuilder(chld.length); + for (int j = 0; j < chld.length; j++) { + rl.append((char) rels[j]); + psl.append((char) pss[j]); + } + + int rli = mf.register("rli", rl.toString()); + int pli = mf.register("pli", psl.toString()); + + dwwp.v0 = f++; + dwwp.v2 = pli; + dwwp.v3 = rli; + dwwp.v4 = h; + dwwp.cz5(); + v[n++] = dwwp.getVal(); + dwwp.v0 = f++; + dwwp.v2 = fm; + dwwp.v3 = rli; + dwwp.v4 = h; + dwwp.cz5(); + v[n++] = dwwp.getVal(); + dwwp.v0 = f++; + dwwp.v2 = pli; + dwwp.v3 = fm; + dwwp.v4 = h; + dwwp.cz5(); + v[n++] = dwwp.getVal(); + + dwwp.v0 = f++; + dwwp.v2 = rli; + dwwp.cz3(); + v[n++] = dwwp.getVal(); + dwwp.v0 = f++; + dwwp.v2 = pli; + dwwp.cz3(); + v[n++] = dwwp.getVal(); + + for (int j = 1; j < rc.length; j++) { + dwwp.v0 = f++; + dwwp.v2 = rc[j] == 0 ? 1 : rc[j] == 1 ? 2 : 3; + dwwp.v3 = j; + dwwp.cz4(); + v[n++] = dwwp.getVal();// + } + + dwwp.v0 = f++; + dwwp.v2 = rli; + dwwp.v3 = h; + dwwp.cz4(); + v[n++] = dwwp.getVal(); + dwwp.v0 = f++; + dwwp.v2 = pli; + dwwp.v3 = h; + dwwp.cz4(); + v[n++] = dwwp.getVal(); + + dwwp.v0 = f++; + dwwp.v2 = pli; + dwwp.v3 = hh; + dwwp.v4 = h; + dwwp.cz5(); + v[n++] = dwwp.getVal(); + dwwp.v0 = f++; + dwwp.v2 = rli; + dwwp.v3 = hh; + dwwp.v4 = h; + dwwp.cz5(); + v[n++] = dwwp.getVal(); + + dwwp.v0 = f++; + dwwp.v2 = pli; + dwwp.v3 = rli; + dwwp.v4 = hh; + dwwp.cz5(); + v[n++] = dwwp.getVal(); + dwwp.v0 = f++; + dwwp.v2 = pli; + dwwp.v3 = rli; + dwwp.v4 = hh; + dwwp.v5 = h; + dwwp.cz6(); + v[n++] = dwwp.getVal(); + + dwp.v0 = f++; + dwp.v2 = rli; + dwp.v3 = hrel; + dwp.v4 = hh; + dwp.v5 = h; + dwp.cz6(); + v[n++] = dwp.getVal(); + + Arrays.sort(rels); + Arrays.sort(pss); + + rl = new StringBuilder(chld.length); + psl = new StringBuilder(chld.length); + for (int j = 0; j < chld.length; j++) { + rl.append((char) rels[j]); + psl.append((char) pss[j]); + } + rli = mf.register("rli", rl.toString()); + pli = mf.register("pli", psl.toString()); + + dwwp.v0 = f++; + dwwp.v2 = pli; + dwwp.v3 = rli; + dwwp.v4 = 1; + dwwp.v5 = h; + dwwp.cz6(); + v[n++] = dwwp.getVal(); + dwwp.v0 = f++; + dwwp.v2 = fm; + dwwp.v3 = rli; + dwwp.v4 = 1; + dwwp.v5 = h; + dwwp.cz6(); + v[n++] = dwwp.getVal(); + dwwp.v0 = f++; + dwwp.v2 = pli; + dwwp.v3 = fm; + dwwp.v4 = 1; + dwwp.v5 = h; + dwwp.cz6(); + v[n++] = dwwp.getVal(); + + dwwp.v0 = f++; + dwwp.v2 = rli; + dwwp.v3 = h; + dwwp.cz4(); + v[n++] = dwwp.getVal(); + + dl1.v0 = f++; + dl1.v2 = h; + dl1.v3 = hrel; + dl1.v4 = hhrel; + dl1.v5 = hh; + dl1.v6 = rlast; + dl1.cz6(); + v[n++] = dl1.getVal(); + dwp.v0 = f++; + dwp.v2 = fm; + dwp.v3 = hrel; + dwp.v4 = hh; + dwp.cz5(); + v[n++] = dwp.getVal(); + dwp.v0 = f++; + dwp.v2 = hhf; + dwp.v3 = hrel; + dwp.v4 = hh; + dwp.v5 = h; + dwp.cz6(); + v[n++] = dwp.getVal(); + + } + + v[n] = Integer.MIN_VALUE; + } + + public void extractFeatures2(Instances is, int i, ParseNBest parse, int rank, long[] v) { + + int f = 1, n = 0; + + for (short k = 0; k < is.length(i) - 1; k++) { + + short[] chld = children(parse.heads, k); + + f = 2; + + int fm = is.forms[i][k]; + int hh = k != 0 ? is.pposs[i][parse.heads[k]] : s_end; + int h = is.pposs[i][k]; + int hrel = parse.labels[k];// is.labels[i][k]; + int hhrel = k != 0 ? parse.labels[parse.heads[k]] : s_relend; + int hhf = k != 0 ? is.forms[i][parse.heads[k]] : s_stwrd; + + int rlast = chld.length > 0 ? parse.labels[chld[chld.length - 1]] : s_relend; + + int[] rels = new int[chld.length]; + int[] pss = new int[chld.length]; + + for (int j = 0; j < chld.length; j++) { + rels[j] = parse.labels[chld[j]]; + pss[j] = is.pposs[i][chld[j]]; + } + + StringBuilder rl = new StringBuilder(chld.length); + StringBuilder psl = new StringBuilder(chld.length); + for (int j = 0; j < chld.length; j++) { + rl.append((char) rels[j]); + psl.append((char) pss[j]); + } + + int rli = mf.register("rli", rl.toString()); + int pli = mf.register("pli", psl.toString()); + + dwwp.v0 = f++; + dwwp.v2 = pli; + dwwp.v3 = rli; + dwwp.v4 = h; + dwwp.cz5(); + v[n++] = dwwp.getVal(); + dwwp.v0 = f++; + dwwp.v2 = fm; + dwwp.v3 = rli; + dwwp.v4 = h; + dwwp.cz5(); + v[n++] = dwwp.getVal(); + dwwp.v0 = f++; + dwwp.v2 = pli; + dwwp.v3 = fm; + dwwp.v4 = h; + dwwp.cz5(); + v[n++] = dwwp.getVal(); + + dwwp.v0 = f++; + dwwp.v2 = rli; + dwwp.cz3(); + v[n++] = dwwp.getVal(); + dwwp.v0 = f++; + dwwp.v2 = pli; + dwwp.cz3(); + v[n++] = dwwp.getVal(); + + dwwp.v0 = f++; + dwwp.v2 = rli; + dwwp.v3 = h; + dwwp.cz4(); + v[n++] = dwwp.getVal(); + dwwp.v0 = f++; + dwwp.v2 = pli; + dwwp.v3 = h; + dwwp.cz4(); + v[n++] = dwwp.getVal(); + + dwwp.v0 = f++; + dwwp.v2 = pli; + dwwp.v3 = hh; + dwwp.v4 = h; + dwwp.cz5(); + v[n++] = dwwp.getVal(); + dwwp.v0 = f++; + dwwp.v2 = rli; + dwwp.v3 = hh; + dwwp.v4 = h; + dwwp.cz5(); + v[n++] = dwwp.getVal(); + + dwwp.v0 = f++; + dwwp.v2 = pli; + dwwp.v3 = rli; + dwwp.v4 = hh; + dwwp.cz5(); + v[n++] = dwwp.getVal(); + dwwp.v0 = f++; + dwwp.v2 = pli; + dwwp.v3 = rli; + dwwp.v4 = hh; + dwwp.v5 = h; + dwwp.cz6(); + v[n++] = dwwp.getVal(); + + dwp.v0 = f++; + dwp.v2 = rli; + dwp.v3 = hrel; + dwp.v4 = hh; + dwp.v5 = h; + dwp.cz6(); + v[n++] = dwp.getVal(); + + Arrays.sort(rels); + Arrays.sort(pss); + + rl = new StringBuilder(chld.length); + psl = new StringBuilder(chld.length); + for (int j = 0; j < chld.length; j++) { + rl.append((char) rels[j]); + psl.append((char) pss[j]); + } + rli = mf.register("rli", rl.toString()); + pli = mf.register("pli", psl.toString()); + + dwwp.v0 = f++; + dwwp.v2 = pli; + dwwp.v3 = rli; + dwwp.v4 = 1; + dwwp.v5 = h; + dwwp.cz6(); + v[n++] = dwwp.getVal(); + dwwp.v0 = f++; + dwwp.v2 = fm; + dwwp.v3 = rli; + dwwp.v4 = 1; + dwwp.v5 = h; + dwwp.cz6(); + v[n++] = dwwp.getVal(); + dwwp.v0 = f++; + dwwp.v2 = pli; + dwwp.v3 = fm; + dwwp.v4 = 1; + dwwp.v5 = h; + dwwp.cz6(); + v[n++] = dwwp.getVal(); + + dwwp.v0 = f++; + dwwp.v2 = rli; + dwwp.v3 = h; + dwwp.cz4(); + v[n++] = dwwp.getVal(); + + dl1.v0 = f++; + dl1.v2 = h; + dl1.v3 = hrel; + dl1.v4 = hhrel; + dl1.v5 = hh; + dl1.v6 = rlast; + dl1.cz6(); + v[n++] = dl1.getVal(); + dwp.v0 = f++; + dwp.v2 = fm; + dwp.v3 = hrel; + dwp.v4 = hh; + dwp.cz5(); + v[n++] = dwp.getVal(); + dwp.v0 = f++; + dwp.v2 = hhf; + dwp.v3 = hrel; + dwp.v4 = hh; + dwp.v5 = h; + dwp.cz6(); + v[n++] = dwp.getVal(); + + } + + v[n] = Integer.MIN_VALUE; + } + + /** + * @param parse + * @param k + * @return + */ + private short[] children(short[] heads, short h) { + + int c = 0; + for (short head : heads) + if (head == h) + c++; + + short[] clds = new short[c]; + c = 0; + for (int k = 0; k < heads.length; k++) + if (heads[k] == h) + clds[c++] = (short) k; + return clds; + } + +} diff --git a/dependencyParser/experimental/mate-tools/src/extractors/ParallelExtract.java b/dependencyParser/experimental/mate-tools/src/extractors/ParallelExtract.java new file mode 100755 index 0000000..5e0ec08 --- /dev/null +++ b/dependencyParser/experimental/mate-tools/src/extractors/ParallelExtract.java @@ -0,0 +1,193 @@ +package extractors; + +import java.util.ArrayList; +import java.util.concurrent.Callable; + +import is2.data.Cluster; +import is2.data.DataF; +import is2.data.Edges; +import is2.data.F2SF; +import is2.data.Instances; +import is2.data.Long2IntInterface; + +/** + * @author Bernd Bohnet, 30.08.2009 + * + * This class implements a parallel feature extractor. + */ +final public class ParallelExtract implements Callable<Object> { + // the data space of the weights for a dependency tree + final DataF d; + + // the data extractor does the actual work + final Extractor extractor; + + private Instances is; + private int i; + + private F2SF para; + + private Cluster cluster; + + private Long2IntInterface li; + + public ParallelExtract(Extractor e, Instances is, int i, DataF d, F2SF para, Cluster cluster, + Long2IntInterface li) { + + this.is = is; + extractor = e; + this.d = d; + this.i = i; + this.para = para; + this.cluster = cluster; + this.li = li; + } + + public static class DSet { + int w1, w2; + } + + @Override + public Object call() { + + try { + + F2SF f = para; + + short[] pos = is.pposs[i]; + int[] forms = is.forms[i]; + int[] lemmas = is.plemmas[i]; + short[][] feats = is.feats[i]; + int length = pos.length; + + long[] svs = new long[250]; + + int type = extractor.getType(); + + while (true) { + + DSet set = get(); + if (set == null) + break; + + int w1 = set.w1; + int w2 = set.w2; + + f.clear(); + int n = extractor.basic(pos, forms, w1, w2, cluster, f); + d.pl[w1][w2] = f.getScoreF(); + + short[] labels = Edges.get(pos[w1], pos[w2], false); + float[][] lab = d.lab[w1][w2]; + + extractor.firstm(is, i, w1, w2, 0, cluster, svs); + + if (labels != null) { + + for (int l = labels.length - 1; l >= 0; l--) { + + short label = labels[l]; + + f.clear(); + for (int k = svs.length - 1; k >= 0; k--) + if (svs[k] > 0) + f.add(li.l2i(svs[k] + label * type)); + lab[label][0] = f.getScoreF(); + } + } + + labels = Edges.get(pos[w1], pos[w2], true); + + if (labels != null) { + + for (int l = labels.length - 1; l >= 0; l--) { + + int label = labels[l]; + f.clear(); + for (int k = svs.length - 1; k >= 0; k--) + if (svs[k] > 0) + f.add(li.l2i(svs[k] + label * type)); + lab[label][1] = f.getScoreF(); + } + } + + int s = w1 < w2 ? w1 : w2; + int e = w1 < w2 ? w2 : w1; + + int sg = w1 < w2 ? w1 : 0; + int eg = w1 < w2 ? length : w1 + 1; + + for (int m = s; m < e; m++) { + for (int dir = 0; dir < 2; dir++) { + labels = Edges.get(pos[w1], pos[w2], dir == 1); + float lab2[] = new float[labels.length]; + + int g = (m == s || e == m) ? -1 : m; + + extractor.siblingm(is, i, pos, forms, lemmas, feats, w1, w2, g, 0, cluster, svs, n); + + for (int l = labels.length - 1; l >= 0; l--) { + + int label = labels[l]; + f.clear(); + + for (int k = svs.length - 1; k >= 0; k--) { + if (svs[k] > 0) + f.add(li.l2i(svs[k] + label * type)); + } + lab2[l] = f.score;// f.getScoreF(); + } + d.sib[w1][w2][m][dir] = lab2; + } + } + + for (int m = sg; m < eg; m++) { + for (int dir = 0; dir < 2; dir++) { + labels = Edges.get(pos[w1], pos[w2], dir == 1); + float[] lab2 = new float[labels.length]; + + int g = (m == s || e == m) ? -1 : m; + + extractor.gcm(is, i, w1, w2, g, 0, cluster, svs); + + for (int l = labels.length - 1; l >= 0; l--) { + + int label = labels[l]; + + f.clear(); + for (int k = svs.length - 1; k >= 0; k--) { + if (svs[k] > 0) + f.add(li.l2i(svs[k] + label * type)); + } + lab2[l] = f.getScoreF(); + } + d.gra[w1][w2][m][dir] = lab2; + } + } + + } + } catch (Exception e) { + e.printStackTrace(); + } + return null; + } + + static ArrayList<DSet> sets = new ArrayList<DSet>(); + + private DSet get() { + + synchronized (sets) { + if (sets.size() == 0) + return null; + return sets.remove(sets.size() - 1); + } + } + + static public void add(int w1, int w2) { + DSet ds = new DSet(); + ds.w1 = w1; + ds.w2 = w2; + sets.add(ds); + } + +} diff --git a/dependencyParser/experimental/mate-tools/src/is2/data/Closed.java b/dependencyParser/experimental/mate-tools/src/is2/data/Closed.java new file mode 100755 index 0000000..3e938a8 --- /dev/null +++ b/dependencyParser/experimental/mate-tools/src/is2/data/Closed.java @@ -0,0 +1,28 @@ +package is2.data; + +final public class Closed { + + public double p; + short b, e, m; + byte dir; + + Closed d; + Open u; + + public Closed(short s, short t, int m, int dir, Open u, Closed d, float score) { + this.b = s; + this.e = t; + this.m = (short) m; + this.dir = (byte) dir; + this.u = u; + this.d = d; + p = score; + } + + public void create(Parse parse) { + if (u != null) + u.create(parse); + if (d != null) + d.create(parse); + } +} diff --git a/dependencyParser/experimental/mate-tools/src/is2/data/Cluster.java b/dependencyParser/experimental/mate-tools/src/is2/data/Cluster.java new file mode 100644 index 0000000..5cc8427 --- /dev/null +++ b/dependencyParser/experimental/mate-tools/src/is2/data/Cluster.java @@ -0,0 +1,163 @@ +/** + * + */ +package is2.data; + +import java.io.BufferedReader; +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.FileInputStream; +import java.io.IOException; +import java.io.InputStreamReader; + +import is2.util.DB; + +/** + * @author Dr. Bernd Bohnet, 28.10.2010 + * + * + */ +final public class Cluster { + + public static final String LPATH = "LP"; + public static final String SPATH = "SP"; + + // [word][p] p = [0:long-path | 1:short-path] + final private short[][] word2path; + + public Cluster() { + word2path = new short[0][0]; + } + + /** + * @param clusterFile + * @param mf + * + */ + public Cluster(String clusterFile, IEncoderPlus mf, int ls) { + + final String REGEX = "\t"; + + // register words + try { + BufferedReader inputReader = new BufferedReader( + new InputStreamReader(new FileInputStream(clusterFile), "UTF-8"), 32768); + + int cnt = 0; + String line; + while ((line = inputReader.readLine()) != null) { + + cnt++; + try { + String[] split = line.split(REGEX); + mf.register(SPATH, split[0].length() < ls ? split[0] : split[0].substring(0, ls)); + mf.register(LPATH, split[0]); + mf.register(PipeGen.WORD, split[1]); + } catch (Exception e) { + System.out.println("Error in cluster line " + cnt + " error: " + e.getMessage()); + } + } + System.out.println("read number of clusters " + cnt); + inputReader.close(); + + } catch (Exception e) { + e.printStackTrace(); + } + + word2path = new short[mf.getFeatureCounter().get(PipeGen.WORD)][2]; + + // insert words + try { + String line; + BufferedReader inputReader = new BufferedReader( + new InputStreamReader(new FileInputStream(clusterFile), "UTF-8"), 32768); + + while ((line = inputReader.readLine()) != null) { + + String[] split = line.split(REGEX); + int wd = mf.getValue(PipeGen.WORD, split[1]); + word2path[wd][0] = (short) mf.getValue(SPATH, + split[0].length() < ls ? split[0] : split[0].substring(0, ls)); + word2path[wd][1] = (short) mf.getValue(LPATH, split[0]); + } + inputReader.close(); + int fill = 0; + for (short[] element : word2path) { + if (element[0] != 0) + fill++; + } + /* + * for(int l = 0; l<word2path.length; l++ ){ if (word2path[l][1]!=0) + * fillL++; if (word2path[l][1]<-1) + * System.out.println("lower "+word2path[l][1]); } + */ + System.out.println("filled " + fill + " of " + word2path.length); + + } catch (Exception e) { + e.printStackTrace(); + } + } + + /** + * Read the cluster + * + * @param dos + * @throws IOException + */ + public Cluster(DataInputStream dis) throws IOException { + + word2path = new short[dis.readInt()][2]; + for (int i = 0; i < word2path.length; i++) { + word2path[i][0] = dis.readShort(); + word2path[i][1] = dis.readShort(); + } + DB.println("Read cluster with " + word2path.length + " words "); + } + + /** + * Write the cluster + * + * @param dos + * @throws IOException + */ + public void write(DataOutputStream dos) throws IOException { + + dos.writeInt(word2path.length); + for (short[] i : word2path) { + dos.writeShort(i[0]); + dos.writeShort(i[1]); + } + + } + + /** + * @param form + * the id of a word form + * @return the short path to the word form in the cluster + * + * final public int getSP(int form) { if (word2path.length<form) + * return -1; return word2path[form][0]; } + */ + /** + * get the long path to a word form in the cluster + * + * @param form + * the id of a word form + * @return the long path to the word + */ + final public int getLP(int form) { + if (word2path.length <= form || word2path[form].length <= 0) + return -1; + return word2path[form][0] == 0 ? -1 : word2path[form][0]; + } + + final public int getLP(int form, int l) { + if (word2path.length < form) + return -1; + return word2path[form][l] == 0 ? -1 : word2path[form][l]; + } + + final public int size() { + return word2path.length; + } +} diff --git a/dependencyParser/experimental/mate-tools/src/is2/data/D4.java b/dependencyParser/experimental/mate-tools/src/is2/data/D4.java new file mode 100644 index 0000000..d607668 --- /dev/null +++ b/dependencyParser/experimental/mate-tools/src/is2/data/D4.java @@ -0,0 +1,252 @@ +/** + * + */ +package is2.data; + +/** + * @author Dr. Bernd Bohnet, 30.10.2010 + * + * This class computes the mapping of features to the weight vector. + */ +final public class D4 extends DX { + private long shift; + private long h; + + private final Long2IntInterface _li; + + public D4(Long2IntInterface li) { + _li = li; + } + + @Override + final public void clean() { + v0 = 0; + v1 = 0; + v2 = 0; + v3 = 0; + v4 = 0; + v5 = 0; + v6 = 0; + v7 = 0; + v8 = 0; + shift = 0; + h = 0; + } + + @Override + final public void cz3() { + if (v0 < 0 || v1 < 0 || v2 < 0) { + h = -1; + return; + } + + h = v0 + v1 * (shift = a0) + v2 * (shift *= a1); + shift *= a2; + } + + final public long c3() { + if (v0 < 0 || v1 < 0 || v2 < 0) { + h = -1; + return h; + } + + h = v0 + v1 * (shift = a0) + v2 * (shift *= a1); + shift *= a2; + return h; + } + + @Override + final public void cz4() { + if (v0 < 0 || v1 < 0 || v2 < 0 || v3 < 0) { + h = -1; + return; + } + + h = v0 + v1 * (shift = a0) + v2 * (shift *= a1) + v3 * (shift *= a2); + shift *= a3; + } + + final public long c4() { + if (v0 < 0 || v1 < 0 || v2 < 0 || v3 < 0) { + h = -1; + return h; + } + + h = v0 + v1 * (shift = a0) + v2 * (shift *= a1) + v3 * (shift *= a2); + shift *= a3; + return h; + } + + @Override + final public void cz5() { + + if (v0 < 0 || v1 < 0 || v2 < 0 || v3 < 0 || v4 < 0) { + h = -1; + return; + } + + h = v0 + v1 * (shift = a0) + v2 * (shift *= a1) + v3 * (shift *= a2) + v4 * (shift *= a3); + shift *= a4; + + } + + final public long c5() { + + if (v0 < 0 || v1 < 0 || v2 < 0 || v3 < 0 || v4 < 0) { + h = -1; + return h; + } + + h = v0 + v1 * (shift = a0) + v2 * (shift *= a1) + v3 * (shift *= a2) + v4 * (shift *= a3); + shift *= a4; + return h; + } + + @Override + final public void cz6() { + + if (v0 < 0 || v1 < 0 || v2 < 0 || v3 < 0 || v4 < 0 || v5 < 0) { + h = -1; + return; + } + + h = v0 + v1 * (shift = a0) + v2 * (shift *= a1) + v3 * (shift *= a2); + h += v4 * (shift *= a3) + v5 * (shift *= a4); + shift *= a5; + } + + final public long c6() { + + if (v0 < 0 || v1 < 0 || v2 < 0 || v3 < 0 || v4 < 0 || v5 < 0) { + h = -1; + return h; + } + + h = v0 + v1 * (shift = a0) + v2 * (shift *= a1) + v3 * (shift *= a2); + h += v4 * (shift *= a3) + v5 * (shift *= a4); + shift *= a5; + return h; + } + + @Override + final public long cs(int b, int v) { + if (h < 0) { + h = -1; + return h; + } + + h += v * shift; + shift *= b; + return h; + + } + + @Override + final public void csa(int b, int v, IFV f) { + if (h < 0) { + h = -1; + return; + } + + h += v * shift; + shift *= b; + f.add(_li.l2i(h)); + } + + @Override + final public long csa(int b, int v) { + if (h < 0) { + h = -1; + return -1; + } + + h += v * shift; + shift *= b; + return h; + } + + @Override + public final long getVal() { + return h; + } + + @Override + public final void map(IFV f, long l) { + if (l > 0) + f.add(this._li.l2i(l)); + } + + /** + * @param f + */ + final public void add(IFV f) { + f.add(_li.l2i(h)); + } + + @Override + final public void cz7() { + if (v0 < 0 || v1 < 0 || v2 < 0 || v3 < 0 || v4 < 0 || v5 < 0 || v6 < 0) { + h = -1; + return; + } + + h = v0 + v1 * (shift = a0) + v2 * (shift *= a1) + v3 * (shift *= a2); + h += v4 * (shift *= a3) + v5 * (shift *= a4) + v6 * (shift *= a5); + shift *= a6; + + } + + final public long c7() { + if (v0 < 0 || v1 < 0 || v2 < 0 || v3 < 0 || v4 < 0 || v5 < 0 || v6 < 0) { + h = -1; + return h; + } + + h = v0 + v1 * (shift = a0) + v2 * (shift *= a1) + v3 * (shift *= a2); + h += v4 * (shift *= a3) + v5 * (shift *= a4) + v6 * (shift *= a5); + shift *= a6; + return h; + } + + /** + * + */ + @Override + final public void cz8() { + if (v0 < 0 || v1 < 0 || v2 < 0 || v3 < 0 || v4 < 0 || v5 < 0 || v6 < 0 || v7 < 0) { + h = -1; + return; + } + + h = v0 + v1 * (shift = a0) + v2 * (shift *= a1) + v3 * (shift *= a2); + h += v4 * (shift *= a3) + v5 * (shift *= a4) + v6 * (shift *= a5) + v7 * (shift *= a6); + shift *= a7; + } + + final public void cz9() { + if (v0 < 0 || v1 < 0 || v2 < 0 || v3 < 0 || v4 < 0 || v5 < 0 || v6 < 0 || v7 < 0 || v8 < 0) { + h = -1; + return; + } + + h = v0 + v1 * (shift = a0) + v2 * (shift *= a1) + v3 * (shift *= a2); + h += v4 * (shift *= a3) + v5 * (shift *= a4) + v6 * (shift *= a5) + v7 * (shift *= a6) + v8 * (shift *= a7); + shift *= a8; + } + + /* + * (non-Javadoc) + * + * @see is2.data.DX#computeLabeValue(short, short) + */ + @Override + public int computeLabeValue(int label, int shift) { + return label * shift; + } + + @Override + public void fix() { + + } + +} \ No newline at end of file diff --git a/dependencyParser/experimental/mate-tools/src/is2/data/D6.java b/dependencyParser/experimental/mate-tools/src/is2/data/D6.java new file mode 100644 index 0000000..0a17d51 --- /dev/null +++ b/dependencyParser/experimental/mate-tools/src/is2/data/D6.java @@ -0,0 +1,260 @@ +/** + * + */ +package is2.data; + +import is2.util.DB; + +/** + * @author Dr. Bernd Bohnet, 30.10.2010 + * + * This class computes the mapping of features to the weight vector. + */ +final public class D6 extends DX { + private long shift; + private long h; + + private final Long2IntInterface _li; + + public D6(Long2IntInterface li) { + _li = li; + } + + boolean fixed = false; + + @Override + public void fix() { + + if (fixed) { + DB.println("warning: already fixed"); + // return; + } + + long t0 = 1, t1 = a0, t2 = t1 * a1, t3 = t2 * a2, t4 = t3 * a3, t5 = t4 * a4, t6 = t5 * a5, t7 = t6 * a6, + t8 = t7 * a7, t9 = t8 * a8; + + a0 = t0; + a1 = t1; + a2 = t2; + a3 = t3; + a4 = t4; + a5 = t5; + a6 = t6; + a7 = t7; + a8 = t8; + a9 = t9; + + fixed = true; + } + + @Override + final public void clean() { + v0 = 0; + v1 = 0; + v2 = 0; + v3 = 0; + v4 = 0; + v5 = 0; + v6 = 0; + v7 = 0; + v8 = 0; + shift = 0; + h = 0; + } + + @Override + final public void cz3() { + if (v0 < 0 || v1 < 0 || v2 < 0) { + h = -1; + return; + } + + h = v0 + v1 * a1 + v2 * a2; + shift = a3; + } + + final public long c3() { + if (v0 < 0 || v1 < 0 || v2 < 0) { + h = -1; + return h; + } + + h = v0 + v1 * a1 + v2 * a2; + shift = a3; + return h; + } + + @Override + final public void cz4() { + if (v0 < 0 || v1 < 0 || v2 < 0 || v3 < 0) { + h = -1; + return; + } + + h = v0 + v1 * a1 + v2 * a2 + v3 * a3; + shift = a4; + } + + final public long c4() { + if (v0 < 0 || v1 < 0 || v2 < 0 || v3 < 0) { + h = -1; + return h; + } + + h = v0 + v1 * a1 + v2 * a2 + v3 * a3; + shift = a4; + return h; + } + + @Override + final public void cz5() { + + if (v0 < 0 || v1 < 0 || v2 < 0 || v3 < 0 || v4 < 0) { + h = -1; + return; + } + + h = v0 + v1 * a1 + v2 * a2 + v3 * a3 + v4 * a4; + shift = a5; + + } + + final public long c5() { + + if (v0 < 0 || v1 < 0 || v2 < 0 || v3 < 0 || v4 < 0) { + h = -1; + return h; + } + + h = v0 + v1 * a1 + v2 * a2 + v3 * a3 + v4 * a4; + shift = a5; + return h; + } + + @Override + final public void cz6() { + + if (v0 < 0 || v1 < 0 || v2 < 0 || v3 < 0 || v4 < 0 || v5 < 0) { + h = -1; + return; + } + + h = v0 + v1 * a1 + v2 * a2 + v3 * a3 + v4 * a4 + v5 * a5; + shift = a6; + } + + final public long c6() { + + if (v0 < 0 || v1 < 0 || v2 < 0 || v3 < 0 || v4 < 0 || v5 < 0) { + h = -1; + return h; + } + + h = v0 + v1 * a1 + v2 * a2 + v3 * a3 + v4 * a4 + v5 * a5; + shift = a6; + return h; + } + + @Override + final public long cs(int b, int v) { + if (h < 0) { + h = -1; + return h; + } + + h += v * shift; + shift *= b; + return h; + + } + + @Override + final public void csa(int b, int v, IFV f) { + if (h < 0) { + h = -1; + return; + } + + h += v * shift; + shift *= b; + f.add(_li.l2i(h)); + } + + @Override + final public long csa(int b, int v) { + if (h < 0) { + h = -1; + return -1; + } + + h += v * shift; + shift *= b; + return h; + } + + @Override + public final long getVal() { + return h; + } + + @Override + public final void map(IFV f, long l) { + if (l > 0) + f.add(this._li.l2i(l)); + } + + /** + * @param f + */ + final public void add(IFV f) { + f.add(_li.l2i(h)); + } + + @Override + final public void cz7() { + if (v0 < 0 || v1 < 0 || v2 < 0 || v3 < 0 || v4 < 0 || v5 < 0 || v6 < 0) { + h = -1; + return; + } + + h = v0 + v1 * a1 + v2 * a2 + v3 * a3 + v4 * a4 + v5 * a5 + v6 * a6; + shift = a7; + + } + + final public long c7() { + if (v0 < 0 || v1 < 0 || v2 < 0 || v3 < 0 || v4 < 0 || v5 < 0 || v6 < 0) { + h = -1; + return h; + } + + h = v0 + v1 * a1 + v2 * a2 + v3 * a3 + v4 * a4 + v5 * a5 + v6 * a6; + shift = a7; + return h; + } + + /** + * + */ + @Override + final public void cz8() { + if (v0 < 0 || v1 < 0 || v2 < 0 || v3 < 0 || v4 < 0 || v5 < 0 || v6 < 0 || v7 < 0) { + h = -1; + return; + } + + h = v0 + v1 * a1 + v2 * a2 + v3 * a3 + v4 * a4 + v5 * a5 + v6 * a6 + v7 * a7; + shift = a8; + } + + /* + * (non-Javadoc) + * + * @see is2.data.DX#computeLabeValue(short, short) + */ + @Override + public int computeLabeValue(int label, int shift) { + return label * shift; + } + +} \ No newline at end of file diff --git a/dependencyParser/experimental/mate-tools/src/is2/data/D7.java b/dependencyParser/experimental/mate-tools/src/is2/data/D7.java new file mode 100644 index 0000000..319c54a --- /dev/null +++ b/dependencyParser/experimental/mate-tools/src/is2/data/D7.java @@ -0,0 +1,290 @@ +/** + * + */ +package is2.data; + +/** + * @author Dr. Bernd Bohnet, 30.10.2010 + * + * This class computes the mapping of features to the weight vector. + */ +final public class D7 extends DX { + + private long shift; + private long h; + private final Long2IntInterface _li; + + public D7(Long2IntInterface li) { + _li = li; + } + + boolean fixed = false; + + @Override + public void fix() { + + long t0 = 1, t1 = a0, t2 = t1 * a1, t3 = t2 * a2, t4 = t3 * a3, t5 = t4 * a4, t6 = t5 * a5, t7 = t6 * a6, + t8 = t7 * a7, t9 = t8 * a8; + + a0 = t0; + a1 = t1; + a2 = t2; + a3 = t3; + a4 = t4; + a5 = t5; + a6 = t6; + a7 = t7; + a8 = t8; + a9 = t9; + + } + + @Override + final public void clean() { + v0 = 0; + v1 = 0; + v2 = 0; + v3 = 0; + v4 = 0; + v5 = 0; + v6 = 0; + v7 = 0; + v8 = 0; + shift = 0; + h = 0; + } + + @Override + final public void cz3() { + if (v2 < 0) { + h = -1; + return; + } + + h = v0 + v1 * a1 + v2 * a2; + shift = a3; + } + + final public long c3() { + if (v2 < 0) { + h = -1; + return h; + } + + h = v0 + v1 * a1 + v2 * a2; + shift = a3; + return h; + } + + final public long d3() { + if (v2 < 0) + return -1; + return v0 + v2 * a2; + } + + @Override + final public void cz4() { + // if (v0<0||v1<0||v2<0||v3<0) {h=-1;return;} + if (v2 < 0 || v3 < 0) { + h = -1; + return; + } + + h = v0 + v1 * a1 + v2 * a2 + v3 * a3; + shift = a4; + } + + final public long c4() { + if (v2 < 0 || v3 < 0) { + h = -1; + return h; + } + + h = v0 + v1 * a1 + v2 * a2 + v3 * a3; + shift = a4; + return h; + } + + final public long d4() { + if (v2 < 0 || v3 < 0) + return -1; + return v0 + v2 * a2 + v3 * a3; + } + + @Override + final public void cz5() { + + if (v2 < 0 || v3 < 0 || v4 < 0) { + h = -1; + return; + } + + h = v0 + v1 * a1 + v2 * a2 + v3 * a3 + v4 * a4; + shift = a5; + + } + + final public long c5() { + + if (v2 < 0 || v3 < 0 || v4 < 0) { + h = -1; + return h; + } + + h = v0 + v1 * a1 + v2 * a2 + v3 * a3 + v4 * a4; + shift = a5; + return h; + } + + final public long d5() { + if (v2 < 0 || v3 < 0 || v4 < 0) + return -1; + return v0 + v2 * a2 + v3 * a3 + v4 * a4; + } + + @Override + final public void cz6() { + + if (v0 < 0 || v1 < 0 || v2 < 0 || v3 < 0 || v4 < 0 || v5 < 0) { + h = -1; + return; + } + + h = v0 + v1 * a1 + v2 * a2 + v3 * a3 + v4 * a4 + v5 * a5; + shift = a6; + } + + final public long c6() { + + if (v2 < 0 || v3 < 0 || v4 < 0 || v5 < 0) { + h = -1; + return h; + } + + h = v0 + v1 * a1 + v2 * a2 + v3 * a3 + v4 * a4 + v5 * a5; + shift = a6; + return h; + } + + final public long d6() { + if (v2 < 0 || v3 < 0 || v4 < 0 || v5 < 0) + return -1; + return v0 + v2 * a2 + v3 * a3 + v4 * a4 + v5 * a5; + } + + @Override + final public long cs(int b, int v) { + if (h < 0) { + h = -1; + return h; + } + + h += v * shift; + shift *= b; + return h; + + } + + @Override + final public void csa(int b, int v, IFV f) { + if (h < 0) { + h = -1; + return; + } + + h += v * shift; + shift *= b; + f.add(_li.l2i(h)); + } + + @Override + final public long csa(int b, int v) { + if (h < 0) { + h = -1; + return -1; + } + + h += v * shift; + shift *= b; + return h; + } + + @Override + public final long getVal() { + return h; + } + + @Override + public final void map(IFV f, long l) { + if (l > 0) + f.add(this._li.l2i(l)); + } + + /** + * @param f + */ + final public void add(IFV f) { + f.add(_li.l2i(h)); + } + + @Override + final public void cz7() { + if (v0 < 0 || v1 < 0 || v2 < 0 || v3 < 0 || v4 < 0 || v5 < 0 || v6 < 0) { + h = -1; + return; + } + + h = v0 + v1 * a1 + v2 * a2 + v3 * a3 + v4 * a4 + v5 * a5 + v6 * a6; + shift = a7; + + } + + final public long c7() { + if (v2 < 0 || v3 < 0 || v4 < 0 || v5 < 0 || v6 < 0) { + h = -1; + return h; + } + + h = v0 + v1 * a1 + v2 * a2 + v3 * a3 + v4 * a4 + v5 * a5 + v6 * a6; + shift = a7; + return h; + } + + final public long d7() { + if (v2 < 0 || v3 < 0 || v4 < 0 || v5 < 0 || v6 < 0) + return -1; + return v0 + v2 * a2 + v3 * a3 + v4 * a4 + v5 * a5 + v6 * a6; + } + + /** + * + */ + @Override + final public void cz8() { + if (v0 < 0 || v1 < 0 || v2 < 0 || v3 < 0 || v4 < 0 || v5 < 0 || v6 < 0 || v7 < 0) { + h = -1; + return; + } + + h = v0 + v1 * a1 + v2 * a2 + v3 * a3 + v4 * a4 + v5 * a5 + v6 * a6 + v7 * a7; + shift = a8; + } + + final public long d8() { + if (v2 < 0 || v3 < 0 || v4 < 0 || v5 < 0 || v6 < 0 || v7 < 0) { + return -1; + } + return v0 + v2 * a2 + v3 * a3 + v4 * a4 + v5 * a5 + v6 * a6 + v7 * a7; + } + + /* + * (non-Javadoc) + * + * @see is2.data.DX#computeLabeValue(short, short) + */ + @Override + public int computeLabeValue(int label, int shift) { + return label * shift; + } + +} \ No newline at end of file diff --git a/dependencyParser/experimental/mate-tools/src/is2/data/DPSTree.java b/dependencyParser/experimental/mate-tools/src/is2/data/DPSTree.java new file mode 100644 index 0000000..085c0c7 --- /dev/null +++ b/dependencyParser/experimental/mate-tools/src/is2/data/DPSTree.java @@ -0,0 +1,109 @@ +/** + * + */ +package is2.data; + +/** + * @author Dr. Bernd Bohnet, 17.01.2011 + * + * Dynamic phrase structure tree. + */ +public class DPSTree { + + private int size = 0; + + public int[] heads; + public int[] labels; + + public DPSTree() { + this(30); + } + + public DPSTree(int initialCapacity) { + heads = new int[initialCapacity]; + labels = new int[initialCapacity]; + } + + /** + * Increases the capacity of this <tt>Graph</tt> instance, if necessary, to + * ensure that it can hold at least the number of nodes specified by the + * minimum capacity argument. + * + * @param minCapacity + * the desired minimum capacity. + */ + private void ensureCapacity(int minCapacity) { + + if (minCapacity > heads.length) { + + int newCapacity = minCapacity + 1; + + if (newCapacity < minCapacity) + newCapacity = minCapacity; + int oldIndex[] = heads; + heads = new int[newCapacity]; + System.arraycopy(oldIndex, 0, heads, 0, oldIndex.length); + + oldIndex = labels; + labels = new int[newCapacity]; + System.arraycopy(oldIndex, 0, labels, 0, oldIndex.length); + + } + } + + final public int size() { + return size; + } + + final public boolean isEmpty() { + return size == 0; + } + + final public void clear() { + size = 0; + } + + final public void createTerminals(int terminals) { + ensureCapacity(terminals + 1); + size = terminals + 1; + } + + final public int create(int phrase) { + + ensureCapacity(size + 1); + labels[size] = phrase; + size++; + return size - 1; + } + + public int create(int phrase, int nodeId) { + + if (nodeId < 0) + return this.create(phrase); + // DB.println("create phrase "+nodeId+" label "+phrase); + ensureCapacity(nodeId + 1); + labels[nodeId] = phrase; + if (size < nodeId) + size = nodeId + 1; + return nodeId; + } + + public void createEdge(int i, int j) { + heads[i] = j; + // DB.println("create edge "+i+"\t "+j); + } + + @Override + public DPSTree clone() { + DPSTree ps = new DPSTree(this.size + 1); + + for (int k = 0; k < size; k++) { + ps.heads[k] = heads[k]; + ps.labels[k] = labels[k]; + } + ps.size = size; + return ps; + + } + +} \ No newline at end of file diff --git a/dependencyParser/experimental/mate-tools/src/is2/data/DX.java b/dependencyParser/experimental/mate-tools/src/is2/data/DX.java new file mode 100644 index 0000000..8650038 --- /dev/null +++ b/dependencyParser/experimental/mate-tools/src/is2/data/DX.java @@ -0,0 +1,56 @@ +/** + * + */ +package is2.data; + +/** + * @author Dr. Bernd Bohnet, 30.08.2011 + * + * + */ +public abstract class DX { + + public long a0, a1, a2, a3, a4, a5, a6, a7, a8, a9; + public long v0, v1, v2, v3, v4, v5, v6, v7, v8, v9; + + public abstract void cz3(); + + public abstract void cz4(); + + public abstract void cz5(); + + public abstract void cz6(); + + public abstract void cz7(); + + public abstract void cz8(); + + public abstract void clean(); + + public abstract long cs(int b, int v); + + public abstract long csa(int b, int v); + + public abstract void csa(int b, int v, IFV f); + + /** + * @return + */ + public abstract long getVal(); + + /** + * @param f + * @param l + */ + public abstract void map(IFV f, long l); + + /** + * @param label + * @param s_type + * @return + */ + public abstract int computeLabeValue(int label, int s_type); + + public abstract void fix(); + +} \ No newline at end of file diff --git a/dependencyParser/experimental/mate-tools/src/is2/data/DataF.java b/dependencyParser/experimental/mate-tools/src/is2/data/DataF.java new file mode 100755 index 0000000..0ec145f --- /dev/null +++ b/dependencyParser/experimental/mate-tools/src/is2/data/DataF.java @@ -0,0 +1,35 @@ +package is2.data; + +final public class DataF { + + final public short typesLen; + final public int len; + + // first order features + final public float[][] pl; + + // remove !!!! + // final public float[][] highestLab; + + // final public FV[][][] label; + final public float[][][][] lab; + + public FV fv; + + final public float[][][][][] sib; + + final public float[][][][][] gra; + + public DataF(int length, short types) { + typesLen = types; + len = length; + + pl = new float[length][length]; + lab = new float[length][length][types][2]; + // highestLab = new float[length][length]; + + sib = new float[length][length][length][2][]; + gra = new float[length][length][length][2][]; + + } +} diff --git a/dependencyParser/experimental/mate-tools/src/is2/data/DataFES.java b/dependencyParser/experimental/mate-tools/src/is2/data/DataFES.java new file mode 100644 index 0000000..751ddc3 --- /dev/null +++ b/dependencyParser/experimental/mate-tools/src/is2/data/DataFES.java @@ -0,0 +1,71 @@ +package is2.data; + +import java.util.Arrays; + +final public class DataFES { + + final public short typesLen; + final public int len; + + // first order features + final public float[][] pl; + + // remove !!!! + // final public float[][] highestLab; + + // final public FV[][][] label; + final public float[][][] lab; + + public FV fv; + + final public float[][][][] sib; + + final public float[][][][] gra; + + public DataFES(int length, short types) { + typesLen = types; + len = length; + + pl = new float[length][length]; + lab = new float[length][length][types]; + + sib = new float[length][length][length][]; + gra = new float[length][length][length][]; + + } + + public void print2DFloatArray(float[][] a, String name) { + for(int i = 0; i < a.length; ++i) + if(a[i] != null) + for(int j = 0; j < a[i].length; ++j) + System.out.println(name + "[" + i + "][" + j + "] = " + a[i][j]); + } + + public void print3DFloatArray(float[][][] a, String name) { + for(int i = 0; i < a.length; ++i) + if(a[i] != null) + for(int j = 0; j < a[i].length; ++j) + if(a[i][j] != null) + System.out.println(name + "[" + i + "][" + j + "] = " + Arrays.toString(a[i][j])); + } + + public void print4DFloatArray(float[][][][] a, String name) { + for(int i = 0; i < a.length; ++i) + if(a[i] != null) + for(int j = 0; j < a[i].length; ++j) + if(a[i][j] != null) + for(int k = 0; k < a[i][j].length; ++k) + if(a[i][j][k] != null) + System.out.println(name + "[" + i + "][" + j + "][" + k + "] = " + Arrays.toString(a[i][j][k])); + } + + public void print() { + System.out.println("typesLen = " + typesLen); + System.out.println("len = " + len); + print2DFloatArray(pl, "pl"); + print3DFloatArray(lab, "lab"); + System.out.println("fv = a feature vector"); + print4DFloatArray(sib, "sib"); + print4DFloatArray(gra, "gra"); + } +} diff --git a/dependencyParser/experimental/mate-tools/src/is2/data/DataT.java b/dependencyParser/experimental/mate-tools/src/is2/data/DataT.java new file mode 100644 index 0000000..2ae816d --- /dev/null +++ b/dependencyParser/experimental/mate-tools/src/is2/data/DataT.java @@ -0,0 +1,19 @@ +package is2.data; + +final public class DataT { + + final public short typesLen; + final public int len; + + // final public FV[][][] label; + // a b lab op + final public float[][][][] lab; + + public DataT(int length, short types) { + typesLen = types; + len = length; + + lab = new float[length][length][types][4]; + + } +} diff --git a/dependencyParser/experimental/mate-tools/src/is2/data/Edges.java b/dependencyParser/experimental/mate-tools/src/is2/data/Edges.java new file mode 100644 index 0000000..a14db91 --- /dev/null +++ b/dependencyParser/experimental/mate-tools/src/is2/data/Edges.java @@ -0,0 +1,216 @@ +/** + * + */ +package is2.data; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; +import java.util.Comparator; +import java.util.HashMap; +import java.util.Map.Entry; + +/** + * @author Dr. Bernd Bohnet, 13.05.2009; + * + * + */ +public final class Edges { + + private static short[][][][] edges; + private static HashMap<Short, Integer> labelCount = new HashMap<Short, Integer>(); + + private static HashMap<String, Integer> slabelCount = new HashMap<String, Integer>(); + + static short[] def = new short[1]; + + private Edges() { + } + + /** + * @param length + */ + public static void init(int length) { + edges = new short[length][length][2][]; + } + + public static void findDefault() { + + int best = 0; + + for (Entry<Short, Integer> e : labelCount.entrySet()) { + + if (best < e.getValue()) { + best = e.getValue(); + def[0] = e.getKey(); + } + } + + // labelCount=null; + // String[] types = new String[mf.getFeatureCounter().get(PipeGen.REL)]; + // for (Entry<String, Integer> e : + // MFO.getFeatureSet().get(PipeGen.REL).entrySet()) types[e.getValue()] + // = e.getKey(); + + is2.util.DB.println("set default label to " + def[0] + " "); + + // System.out.println("found default "+def[0]); + + } + + final static public void put(int pos1, int pos2, boolean dir, short label) { + putD(pos1, pos2, dir, label); + // putD(pos2, pos1,!dir, label); + } + + final static public void putD(int pos1, int pos2, boolean dir, short label) { + + Integer lc = labelCount.get(label); + if (lc == null) + labelCount.put(label, 1); + else + labelCount.put(label, lc + 1); + + String key = pos1 + "-" + pos2 + dir + label; + Integer lcs = slabelCount.get(key); + if (lcs == null) + slabelCount.put(key, 1); + else + slabelCount.put(key, lcs + 1); + + if (edges[pos1][pos2][dir ? 0 : 1] == null) { + edges[pos1][pos2][dir ? 0 : 1] = new short[1]; + edges[pos1][pos2][dir ? 0 : 1][0] = label; + + // edgesh[pos1][pos2][dir?0:1] = new TIntHashSet(2); + // edgesh[pos1][pos2][dir?0:1].add(label); + } else { + short labels[] = edges[pos1][pos2][dir ? 0 : 1]; + for (short l : labels) { + // contains label already? + if (l == label) + return; + } + + short[] nlabels = new short[labels.length + 1]; + System.arraycopy(labels, 0, nlabels, 0, labels.length); + nlabels[labels.length] = label; + edges[pos1][pos2][dir ? 0 : 1] = nlabels; + + // edgesh[pos1][pos2][dir?0:1].add(label); + } + } + + final static public short[] get(int pos1, int pos2, boolean dir) { + + if (pos1 < 0 || pos2 < 0 || edges[pos1][pos2][dir ? 0 : 1] == null) + return def; + return edges[pos1][pos2][dir ? 0 : 1]; + } + + /** + * @param dis + */ + static public void write(DataOutputStream d) throws IOException { + + int len = edges.length; + d.writeShort(len); + + for (int p1 = 0; p1 < len; p1++) { + for (int p2 = 0; p2 < len; p2++) { + if (edges[p1][p2][0] == null) + d.writeShort(0); + else { + d.writeShort(edges[p1][p2][0].length); + for (int l = 0; l < edges[p1][p2][0].length; l++) { + d.writeShort(edges[p1][p2][0][l]); + } + + } + + if (edges[p1][p2][1] == null) + d.writeShort(0); + else { + d.writeShort(edges[p1][p2][1].length); + for (int l = 0; l < edges[p1][p2][1].length; l++) { + d.writeShort(edges[p1][p2][1][l]); + } + } + } + } + + d.writeShort(def[0]); + + } + + /** + * @param dis + */ + public static void read(DataInputStream d) throws IOException { + int len = d.readShort(); + + edges = new short[len][len][2][]; + for (int p1 = 0; p1 < len; p1++) { + for (int p2 = 0; p2 < len; p2++) { + int ll = d.readShort(); + if (ll == 0) { + edges[p1][p2][0] = null; + } else { + edges[p1][p2][0] = new short[ll]; + for (int l = 0; l < ll; l++) { + edges[p1][p2][0][l] = d.readShort(); + } + } + + ll = d.readShort(); + if (ll == 0) { + edges[p1][p2][1] = null; + } else { + edges[p1][p2][1] = new short[ll]; + for (int l = 0; l < ll; l++) { + edges[p1][p2][1][l] = d.readShort(); + } + } + } + } + + def[0] = d.readShort(); + + } + + public static class C implements Comparator<Short> { + + public C() { + super(); + } + + String _key; + + public C(String key) { + super(); + _key = key; + } + + /* + * (non-Javadoc) + * + * @see java.util.Comparator#compare(java.lang.Object, java.lang.Object) + */ + @Override + public int compare(Short l1, Short l2) { + + // int c1 = labelCount.get(l1); + // int c2 = labelCount.get(l2); + // if (true) return c1==c2?0:c1>c2?-1:1; + + int x1 = slabelCount.get(_key + l1.shortValue()); + int x2 = slabelCount.get(_key + l2.shortValue()); + // System.out.println(x1+" "+x2); + + return x1 == x2 ? 0 : x1 > x2 ? -1 : 1; + + } + + } + +} diff --git a/dependencyParser/experimental/mate-tools/src/is2/data/F2S.java b/dependencyParser/experimental/mate-tools/src/is2/data/F2S.java new file mode 100755 index 0000000..37ee11a --- /dev/null +++ b/dependencyParser/experimental/mate-tools/src/is2/data/F2S.java @@ -0,0 +1,54 @@ +package is2.data; + +final public class F2S extends IFV { + + private double[] parameters; + + public F2S() { + } + + public double score; + + /** + * @param parameters2 + */ + public F2S(double[] parameters2) { + parameters = parameters2; + } + + @Override + public void add(int i) { + if (i > 0) + score += parameters[i]; + } + + public void setParameters(double[] p) { + parameters = p; + } + + @Override + public void clear() { + score = 0; + } + + /* + * (non-Javadoc) + * + * @see is2.IFV#getScore() + */ + @Override + public double getScore() { + return score; + } + + /* + * (non-Javadoc) + * + * @see is2.IFV#clone() + */ + @Override + public IFV clone() { + return new F2S(parameters); + } + +} diff --git a/dependencyParser/experimental/mate-tools/src/is2/data/F2SD.java b/dependencyParser/experimental/mate-tools/src/is2/data/F2SD.java new file mode 100755 index 0000000..2cdd793 --- /dev/null +++ b/dependencyParser/experimental/mate-tools/src/is2/data/F2SD.java @@ -0,0 +1,44 @@ +package is2.data; + +final public class F2SD extends IFV { + + final private double[] parameters; + + public double score = 0; + + public F2SD(double[] p) { + parameters = p; + } + + @Override + public void add(int i) { + if (i > 0) + score += parameters[i]; + } + + @Override + public void clear() { + score = 0; + } + + /* + * (non-Javadoc) + * + * @see is2.IFV#getScore() + */ + @Override + public double getScore() { + return score; + } + + /* + * (non-Javadoc) + * + * @see is2.IFV#clone() + */ + @Override + public IFV clone() { + return new F2SD(parameters); + } + +} diff --git a/dependencyParser/experimental/mate-tools/src/is2/data/F2SF.java b/dependencyParser/experimental/mate-tools/src/is2/data/F2SF.java new file mode 100755 index 0000000..394352f --- /dev/null +++ b/dependencyParser/experimental/mate-tools/src/is2/data/F2SF.java @@ -0,0 +1,77 @@ +package is2.data; + +final public class F2SF extends IFV { + + final private float[] parameters; + + public float score = 0; + + public F2SF(float[] p) { + parameters = p; + } + + @Override + final public void add(int i) { + if (i > 0) + score += parameters[i]; + } + + final public void add(int[] i) { + for (int element : i) { + if (element > 0) + score += parameters[element]; + } + } + + final public void sub(float[] px, int i, Long2IntInterface li) { + + if (i > 0) { + score -= px[li.l2i(i)]; + // score -= px[i]; + // else score -=px[]; + } + } + + @Override + public void clear() { + score = 0; + } + + /* + * (non-Javadoc) + * + * @see is2.IFV#getScore() + */ + @Override + public double getScore() { + return score; + } + + public float getScoreF() { + return score; + } + + /* + * (non-Javadoc) + * + * @see is2.IFV#clone() + */ + @Override + public IFV clone() { + return new F2SF(this.parameters); + } + + /** + * @param l2i + */ + public void addRel(int i, float f) { + if (i > 0) + score += parameters[i] * f; + + } + + public int length() { + return this.parameters.length; + } + +} diff --git a/dependencyParser/experimental/mate-tools/src/is2/data/F2SP.java b/dependencyParser/experimental/mate-tools/src/is2/data/F2SP.java new file mode 100644 index 0000000..513fa33 --- /dev/null +++ b/dependencyParser/experimental/mate-tools/src/is2/data/F2SP.java @@ -0,0 +1,77 @@ +package is2.data; + +final public class F2SP extends IFV { + + final private float[] parameters; + + public double score = 0; + + public F2SP(float[] p) { + parameters = p; + } + + @Override + final public void add(int i) { + if (i > 0) + score += parameters[i]; + } + + final public void add(int[] i) { + for (int element : i) { + if (element > 0) + score += parameters[element]; + } + } + + final public void sub(float[] px, int i, Long2IntInterface li) { + + if (i > 0) { + score -= px[li.l2i(i)]; + // score -= px[i]; + // else score -=px[]; + } + } + + @Override + public void clear() { + score = 0; + } + + /* + * (non-Javadoc) + * + * @see is2.IFV#getScore() + */ + @Override + public double getScore() { + return score; + } + + public double getScoreF() { + return score; + } + + /* + * (non-Javadoc) + * + * @see is2.IFV#clone() + */ + @Override + public IFV clone() { + return new F2SP(this.parameters); + } + + /** + * @param l2i + */ + public void addRel(int i, float f) { + if (i > 0) + score += parameters[i] * f; + + } + + public int length() { + return this.parameters.length; + } + +} diff --git a/dependencyParser/experimental/mate-tools/src/is2/data/F2ST.java b/dependencyParser/experimental/mate-tools/src/is2/data/F2ST.java new file mode 100644 index 0000000..4c30144 --- /dev/null +++ b/dependencyParser/experimental/mate-tools/src/is2/data/F2ST.java @@ -0,0 +1,48 @@ +package is2.data; + +final public class F2ST extends IFV { + + final private short[] parameters; + + public int score = 0; + + public F2ST(short[] p) { + parameters = p; + } + + @Override + final public void add(int i) { + if (i > 0) + score += parameters[i]; + } + + @Override + public void clear() { + score = 0; + } + + /* + * (non-Javadoc) + * + * @see is2.IFV#getScore() + */ + @Override + public double getScore() { + return score; + } + + public float getScoreF() { + return score; + } + + /* + * (non-Javadoc) + * + * @see is2.IFV#clone() + */ + @Override + public IFV clone() { + return new F2ST(this.parameters); + } + +} diff --git a/dependencyParser/experimental/mate-tools/src/is2/data/FV.java b/dependencyParser/experimental/mate-tools/src/is2/data/FV.java new file mode 100755 index 0000000..10c0030 --- /dev/null +++ b/dependencyParser/experimental/mate-tools/src/is2/data/FV.java @@ -0,0 +1,562 @@ +package is2.data; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; + +public final class FV extends IFV { + + private FV subfv1; + private FV subfv2; + private boolean negateSecondSubFV = false; + + private int size; + + // content of the nodes NxC + private int m_index[]; + + // type of the nodes NxT + + public FV() { + this(10); + } + + public FV(int initialCapacity) { + m_index = new int[initialCapacity]; + } + + public FV(FV fv1, FV fv2) { + subfv1 = fv1; + subfv2 = fv2; + } + + public FV(FV fv1, FV fv2, boolean negSecond) { + this(0); + subfv1 = fv1; + subfv2 = fv2; + negateSecondSubFV = negSecond; + } + + /** + * Read a feature vector + * + * @param index + * @param value + */ + public FV(DataInputStream dos, int capacity) throws IOException { + this(capacity); + size = m_index.length; + + for (int i = 0; i < size; i++) + m_index[i] = dos.readInt(); + } + + /** + * Read a feature vector + * + * @param index + * @param value + */ + public FV(DataInputStream dos) throws IOException { + this(dos.readInt()); + size = m_index.length; + + for (int i = 0; i < size; i++) + m_index[i] = dos.readInt(); + + } + + /** + * Increases the capacity of this <tt>Graph</tt> instance, if necessary, to + * ensure that it can hold at least the number of nodes specified by the + * minimum capacity argument. + * + * @param minCapacity + * the desired minimum capacity. + */ + private void ensureCapacity(int minCapacity) { + + if (minCapacity > m_index.length) { + + int oldIndex[] = m_index; + + int newCapacity = (m_index.length * 3) / 2 + 1; + + if (newCapacity < minCapacity) + newCapacity = minCapacity; + + m_index = new int[newCapacity]; + System.arraycopy(oldIndex, 0, m_index, 0, oldIndex.length); + + } + } + + final public int size() { + return size; + } + + final public boolean isEmpty() { + return size == 0; + } + + @Override + final public void clear() { + size = 0; + } + + final public int createFeature(int i, double v) { + + ensureCapacity(size + 1); + m_index[size] = i; + size++; + return size - 1; + } + + final public int createFeature(int i) { + + ensureCapacity(size + 1); + m_index[size] = i; + size++; + return size - 1; + } + + final public int getIndex(int i) { + return m_index[i]; + } + + public void setIndex(int p, int i) { + m_index[p] = i; + } + + /** + * Trims the capacity of this <tt>Graph</tt> instance to true size. An + * application can use this operation to minimize the storage of an + * <tt>Graph</tt> instance. + */ + public void trimToSize() { + + if (size < m_index.length) { + + int oldIndex[] = m_index; + + m_index = new int[size]; + System.arraycopy(oldIndex, 0, m_index, 0, size); + + } + + } + + @Override + final public void add(int i) { + if (i >= 0) { + ensureCapacity(size + 1); + m_index[size] = i; + size++; + } + } + + final public void add(int[] i) { + + for (int element : i) + add(element); + + } + + final public void put(int i, double f) { + if (i >= 0) + createFeature(i, f); + } + + // fv1 - fv2 + public FV getDistVector(FV fl2) { + return new FV(this, fl2, true); + } + + public double getScore(double[] parameters, boolean negate) { + double score = 0.0; + + if (null != subfv1) { + score += subfv1.getScore(parameters, negate); + + if (null != subfv2) { + if (negate) + score += subfv2.getScore(parameters, !negateSecondSubFV); + else + score += subfv2.getScore(parameters, negateSecondSubFV); + + } + } + + if (negate) + for (int i = 0; i < size; i++) + score -= parameters[m_index[i]]; + else + for (int i = 0; i < size; i++) + score += parameters[m_index[i]]; + + return score; + } + + final public float getScore(float[] parameters, boolean negate) { + float score = 0.0F; + + if (null != subfv1) { + score += subfv1.getScore(parameters, negate); + + if (null != subfv2) { + if (negate) + score += subfv2.getScore(parameters, !negateSecondSubFV); + else + score += subfv2.getScore(parameters, negateSecondSubFV); + + } + } + + // warning changed the the value + + if (negate) + for (int i = 0; i < size; i++) + score -= parameters[m_index[i]];// *m_value[i]; + else + for (int i = 0; i < size; i++) + score += parameters[m_index[i]];// *m_value[i]; + + return score; + } + + final public int getScore(short[] parameters, boolean negate) { + int score = 0; + + if (null != subfv1) { + score += subfv1.getScore(parameters, negate); + + if (null != subfv2) { + if (negate) + score += subfv2.getScore(parameters, !negateSecondSubFV); + else + score += subfv2.getScore(parameters, negateSecondSubFV); + + } + } + + // warning changed the value + + if (negate) + for (int i = 0; i < size; i++) + score -= parameters[m_index[i]];// *m_value[i]; + else + for (int i = 0; i < size; i++) + score += parameters[m_index[i]];// *m_value[i]; + + return score; + } + + public void update(double[] parameters, double[] total, double alpha_k, double upd) { + update(parameters, total, alpha_k, upd, false); + } + + public final void update(double[] parameters, double[] total, double alpha_k, double upd, boolean negate) { + + if (null != subfv1) { + subfv1.update(parameters, total, alpha_k, upd, negate); + + if (null != subfv2) { + if (negate) + subfv2.update(parameters, total, alpha_k, upd, !negateSecondSubFV); + else + subfv2.update(parameters, total, alpha_k, upd, negateSecondSubFV); + } + } + + if (negate) { + for (int i = 0; i < size; i++) { + parameters[m_index[i]] -= alpha_k;// *getValue(i); + total[m_index[i]] -= upd * alpha_k;// *getValue(i); + } + } else { + for (int i = 0; i < size; i++) { + parameters[m_index[i]] += alpha_k;// *getValue(i); + total[m_index[i]] += upd * alpha_k;// *getValue(i); + } + } + + } + + public final void update(short[] parameters, short[] total, double alpha_k, double upd, boolean negate) { + + if (null != subfv1) { + subfv1.update(parameters, total, alpha_k, upd, negate); + + if (null != subfv2) { + if (negate) + subfv2.update(parameters, total, alpha_k, upd, !negateSecondSubFV); + else + subfv2.update(parameters, total, alpha_k, upd, negateSecondSubFV); + } + } + + if (negate) { + for (int i = 0; i < size; i++) { + parameters[m_index[i]] -= alpha_k;// *getValue(i); + total[m_index[i]] -= upd * alpha_k;// *getValue(i); + } + } else { + for (int i = 0; i < size; i++) { + parameters[m_index[i]] += alpha_k;// *getValue(i); + total[m_index[i]] += upd * alpha_k;// *getValue(i); + } + } + + } + + public final void update(float[] parameters, float[] total, double alpha_k, double upd, boolean negate) { + + if (null != subfv1) { + subfv1.update(parameters, total, alpha_k, upd, negate); + + if (null != subfv2 && negate) { + subfv2.update(parameters, total, alpha_k, upd, !negateSecondSubFV); + } else { + subfv2.update(parameters, total, alpha_k, upd, negateSecondSubFV); + } + + } + + if (negate) { + for (int i = 0; i < size; i++) { + parameters[getIndex(i)] -= alpha_k; + total[getIndex(i)] -= upd * alpha_k; + } + } else { + for (int i = 0; i < size; i++) { + parameters[getIndex(i)] += alpha_k; + total[getIndex(i)] += upd * alpha_k; // + } + } + + } + + public final void update(float[] parameters, float[] total, double alpha_k, double upd, boolean negate, + float[] totalp, Long2IntInterface li) { + + if (null != subfv1) { + subfv1.update(parameters, total, alpha_k, upd, negate, totalp, li); + + if (null != subfv2 && negate) { + subfv2.update(parameters, total, alpha_k, upd, !negateSecondSubFV, totalp, li); + } else { + subfv2.update(parameters, total, alpha_k, upd, negateSecondSubFV, totalp, li); + } + } + + if (negate) { + for (int i = 0; i < size; i++) { + parameters[getIndex(i)] -= alpha_k; + total[getIndex(i)] -= upd * alpha_k; + + totalp[li.l2i(getIndex(i))] -= upd * alpha_k; + // totalp[getIndex(i)] -=upd*alpha_k; + } + } else { + for (int i = 0; i < size; i++) { + parameters[getIndex(i)] += alpha_k; + total[getIndex(i)] += upd * alpha_k; // + + totalp[li.l2i(getIndex(i))] += upd * alpha_k; + // totalp[getIndex(i)] +=upd*alpha_k; + } + } + } + + private static IntIntHash hm1; + private static IntIntHash hm2; + + public int dotProduct(FV fl2) { + + if (hm1 == null) + hm1 = new IntIntHash(size(), 0.4F); + else + hm1.clear(); + + addFeaturesToMap(hm1); + + if (hm2 == null) + hm2 = new IntIntHash(fl2.size, 0.4F); + else + hm2.clear(); + + fl2.addFeaturesToMap(hm2); + + int[] keys = hm1.keys(); + + int result = 0; + for (int key : keys) + result += hm1.get(key) * hm2.get(key); + + return result; + + } + + public double twoNorm(FV fl2) { + + if (hm1 == null) + hm1 = new IntIntHash(size(), 0.4F); + else + hm1.clear(); + + addFeaturesToMap(hm1); + + if (hm2 == null) + hm2 = new IntIntHash(fl2.size, 0.4F); + else + hm2.clear(); + + fl2.addFeaturesToMap(hm2); + + int[] keys = hm1.keys(); + + int result = 0; + for (int key : keys) + result += hm1.get(key) * hm2.get(key); + + return Math.sqrt(result); + + } + + public void addFeaturesToMap(IntIntHash map) { + + if (null != subfv1) { + subfv1.addFeaturesToMap(map); + + if (null != subfv2) { + subfv2.addFeaturesToMap(map, negateSecondSubFV); + + } + } + + for (int i = 0; i < size; i++) + if (!map.adjustValue(getIndex(i), 1)) + map.put(getIndex(i), 1); + + } + + private void addFeaturesToMap(IntIntHash map, boolean negate) { + + if (null != subfv1) { + subfv1.addFeaturesToMap(map, negate); + + if (null != subfv2) { + if (negate) + subfv2.addFeaturesToMap(map, !negateSecondSubFV); + else + subfv2.addFeaturesToMap(map, negateSecondSubFV); + + } + } + + if (negate) { + for (int i = 0; i < size; i++) + if (!map.adjustValue(getIndex(i), -1)) + map.put(getIndex(i), -1); + } else { + for (int i = 0; i < size; i++) + if (!map.adjustValue(getIndex(i), 1)) + map.put(getIndex(i), 1); + } + + } + + @Override + public final String toString() { + StringBuilder sb = new StringBuilder(); + toString(sb); + return sb.toString(); + } + + private final void toString(StringBuilder sb) { + if (null != subfv1) { + subfv1.toString(sb); + + if (null != subfv2) + subfv2.toString(sb); + } + for (int i = 0; i < size; i++) + sb.append(getIndex(i)).append(' '); + } + + public void writeKeys(DataOutputStream dos) throws IOException { + + // int keys[] = keys(); + // dos.writeInt(keys.length); + // for(int i=0;i<keys.length;i++) { + // dos.writeInt(keys[i]); + // } + + // int keys[] = keys(); + dos.writeInt(size); + for (int i = 0; i < size; i++) { + dos.writeInt(m_index[i]); + } + + } + + public void readKeys(DataInputStream dos) throws IOException { + + int keys = dos.readInt(); + for (int i = 0; i < keys; i++) + createFeature(dos.readInt(), 1.0); + + } + + final public static FV cat(FV f1, FV f2) { + if (f1 == null) + return f2; + if (f2 == null) + return f1; + return new FV(f1, f2); + } + + final public static FV cat(FV f1, FV f2, FV f3) { + return FV.cat(f1, FV.cat(f2, f3)); + } + + final public static FV cat(FV f1, FV f2, FV f3, FV f4) { + return FV.cat(f1, FV.cat(f2, FV.cat(f3, f4))); + } + + final public static FV read(DataInputStream dis) throws IOException { + int cap = dis.readInt(); + if (cap == 0) + return null; + return new FV(dis, cap); + + } + + /* + * (non-Javadoc) + * + * @see is2.IFV#getScore() + */ + @Override + public double getScore() { + // System.out.println("not implemented"); + // TODO Auto-generated method stub + return 0; + } + + /* + * (non-Javadoc) + * + * @see is2.IFV#clone() + */ + @Override + public IFV clone() { + FV f = new FV(this.size); + for (int i = 0; i < this.size; i++) { + f.m_index[i] = m_index[i]; + } + f.size = this.size; + return f; + } + +} diff --git a/dependencyParser/experimental/mate-tools/src/is2/data/FVR.java b/dependencyParser/experimental/mate-tools/src/is2/data/FVR.java new file mode 100644 index 0000000..c5bc073 --- /dev/null +++ b/dependencyParser/experimental/mate-tools/src/is2/data/FVR.java @@ -0,0 +1,435 @@ +package is2.data; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; + +import gnu.trove.TIntDoubleHashMap; + +public final class FVR extends IFV { + + private FVR subfv1; + private FVR subfv2; + private boolean negateSecondSubFV = false; + + private int size; + + // content of the nodes NxC + private int m_index[]; + private float m_value[]; + + // type of the nodes NxT + + public FVR() { + this(10); + } + + public FVR(int initialCapacity) { + m_index = new int[initialCapacity]; + m_value = new float[initialCapacity]; + } + + /* + * public FVR (FVR fv1, FVR fv2) { subfv1 = fv1; subfv2 = fv2; } + */ + public FVR(FVR fv1, FVR fv2, boolean negSecond) { + this(0); + subfv1 = fv1; + subfv2 = fv2; + negateSecondSubFV = negSecond; + } + + /** + * Read a feature vector + * + * @param index + * @param value + */ + public FVR(DataInputStream dos, int capacity) throws IOException { + this(capacity); + size = m_index.length; + + for (int i = 0; i < size; i++) + m_index[i] = dos.readInt(); + } + + /** + * Read a feature vector + * + * @param index + * @param value + */ + public FVR(DataInputStream dos) throws IOException { + this(dos.readInt()); + size = m_index.length; + + for (int i = 0; i < size; i++) + m_index[i] = dos.readInt(); + + } + + /** + * Increases the capacity of this <tt>Graph</tt> instance, if necessary, to + * ensure that it can hold at least the number of nodes specified by the + * minimum capacity argument. + * + * @param minCapacity + * the desired minimum capacity. + */ + private void ensureCapacity(int minCapacity) { + + if (minCapacity > m_index.length) { + + int oldIndex[] = m_index; + float oldValue[] = m_value; + + int newCapacity = (m_index.length * 3) / 2 + 1; + + if (newCapacity < minCapacity) + newCapacity = minCapacity; + + m_index = new int[newCapacity]; + m_value = new float[newCapacity]; + + System.arraycopy(oldIndex, 0, m_index, 0, oldIndex.length); + System.arraycopy(oldValue, 0, m_value, 0, oldValue.length); + + } + } + + final public int size() { + return size; + } + + final public boolean isEmpty() { + return size == 0; + } + + @Override + final public void clear() { + size = 0; + } + + final public int createFeature(int i, float v) { + + ensureCapacity(size + 1); + m_index[size] = i; + m_value[size] = v; + size++; + return size - 1; + } + /* + * final public int createFeature(int i) { + * + * ensureCapacity(size+1); m_index[size] =i; size++; return size-1; } + */ + + final public int getIndex(int i) { + return m_index[i]; + } + + public void setIndex(int p, int i) { + m_index[p] = i; + } + + /** + * Trims the capacity of this <tt>Graph</tt> instance to true size. An + * application can use this operation to minimize the storage of an + * <tt>Graph</tt> instance. + */ + public void trimToSize() { + + if (size < m_index.length) { + + int oldIndex[] = m_index; + + m_index = new int[size]; + System.arraycopy(oldIndex, 0, m_index, 0, size); + + } + + } + + @Override + final public void add(int i) { + if (i >= 0) { + ensureCapacity(size + 1); + m_index[size] = i; + m_value[size] = 1.0f; + size++; + } + } + + final public void add(int i, float f) { + if (i >= 0) + createFeature(i, f); + } + + // fv1 - fv2 + public FVR getDistVector(FVR fl2) { + return new FVR(this, fl2, true); + } + + public double getScore(double[] parameters, boolean negate) { + double score = 0.0; + + if (null != subfv1) { + score += subfv1.getScore(parameters, negate); + + if (null != subfv2) { + if (negate) + score += subfv2.getScore(parameters, !negateSecondSubFV); + else + score += subfv2.getScore(parameters, negateSecondSubFV); + + } + } + + if (negate) + for (int i = 0; i < size; i++) + score -= parameters[m_index[i]]; + else + for (int i = 0; i < size; i++) + score += parameters[m_index[i]]; + + return score; + } + + final public float getScore(float[] parameters, boolean negate) { + float score = 0.0F; + + if (null != subfv1) { + score += subfv1.getScore(parameters, negate); + + if (null != subfv2) { + if (negate) + score += subfv2.getScore(parameters, !negateSecondSubFV); + else + score += subfv2.getScore(parameters, negateSecondSubFV); + + } + } + + // warning changed the value + + if (negate) + for (int i = 0; i < size; i++) + score -= parameters[m_index[i]] * m_value[i]; + else + for (int i = 0; i < size; i++) + score += parameters[m_index[i]] * m_value[i]; + + return score; + } + + final public int getScore(short[] parameters, boolean negate) { + int score = 0; + + if (null != subfv1) { + score += subfv1.getScore(parameters, negate); + + if (null != subfv2) { + if (negate) + score += subfv2.getScore(parameters, !negateSecondSubFV); + else + score += subfv2.getScore(parameters, negateSecondSubFV); + + } + } + + // warning changed the value + + if (negate) + for (int i = 0; i < size; i++) + score -= parameters[m_index[i]] * m_value[i]; + else + for (int i = 0; i < size; i++) + score += parameters[m_index[i]] * m_value[i]; + + return score; + } + + public final void update(float[] parameters, float[] total, double alpha_k, double upd, boolean negate) { + + if (null != subfv1) { + subfv1.update(parameters, total, alpha_k, upd, negate); + + if (null != subfv2 && negate) { + subfv2.update(parameters, total, alpha_k, upd, !negateSecondSubFV); + } else { + subfv2.update(parameters, total, alpha_k, upd, negateSecondSubFV); + } + + } + + if (negate) { + for (int i = 0; i < size; i++) { + parameters[getIndex(i)] -= alpha_k * m_value[i]; + total[getIndex(i)] -= upd * alpha_k * m_value[i]; + } + } else { + for (int i = 0; i < size; i++) { + parameters[getIndex(i)] += alpha_k * m_value[i]; + total[getIndex(i)] += upd * alpha_k * m_value[i]; // + } + } + + } + + // private static IntIntHash hm1; + // private static IntIntHash hm2; + + private static TIntDoubleHashMap hd1; + private static TIntDoubleHashMap hd2; + + public int dotProduct(FVR fl2) { + + if (hd1 == null) + hd1 = new TIntDoubleHashMap(size(), 0.4F); + else + hd1.clear(); + + addFeaturesToMap(hd1); + + if (hd2 == null) + hd2 = new TIntDoubleHashMap(fl2.size, 0.4F); + else + hd2.clear(); + + fl2.addFeaturesToMap(hd2); + + int[] keys = hd1.keys(); + + int result = 0; + for (int key : keys) + result += hd1.get(key) * hd2.get(key); + + return result; + + } + + private void addFeaturesToMap(TIntDoubleHashMap map) { + + if (null != subfv1) { + subfv1.addFeaturesToMap(map); + + if (null != subfv2) { + subfv2.addFeaturesToMap(map, negateSecondSubFV); + + } + } + + for (int i = 0; i < size; i++) + if (!map.adjustValue(getIndex(i), m_value[i])) + map.put(getIndex(i), m_value[i]); + + } + + private void addFeaturesToMap(TIntDoubleHashMap map, boolean negate) { + + if (null != subfv1) { + subfv1.addFeaturesToMap(map, negate); + + if (null != subfv2) { + if (negate) + subfv2.addFeaturesToMap(map, !negateSecondSubFV); + else + subfv2.addFeaturesToMap(map, negateSecondSubFV); + + } + } + + if (negate) { + for (int i = 0; i < size; i++) + if (!map.adjustValue(getIndex(i), -m_value[i])) + map.put(getIndex(i), -m_value[i]); + } else { + for (int i = 0; i < size; i++) + if (!map.adjustValue(getIndex(i), m_value[i])) + map.put(getIndex(i), m_value[i]); + } + + } + + @Override + public final String toString() { + StringBuilder sb = new StringBuilder(); + toString(sb); + return sb.toString(); + } + + private final void toString(StringBuilder sb) { + if (null != subfv1) { + subfv1.toString(sb); + + if (null != subfv2) + subfv2.toString(sb); + } + for (int i = 0; i < size; i++) + sb.append(getIndex(i)).append('=').append(m_value[i]).append(' '); + } + + public void writeKeys(DataOutputStream dos) throws IOException { + + // int keys[] = keys(); + // dos.writeInt(keys.length); + // for(int i=0;i<keys.length;i++) { + // dos.writeInt(keys[i]); + // } + + // int keys[] = keys(); + dos.writeInt(size); + for (int i = 0; i < size; i++) { + dos.writeInt(m_index[i]); + } + + } + + /* + * + * final public static FVR cat(FVR f1,FVR f2) { if (f1==null) return f2; if + * (f2==null) return f1; return new FVR(f1, f2); } + * + * final public static FVR cat(FVR f1,FVR f2, FVR f3) { return FVR.cat(f1, + * FVR.cat(f2, f3)); } final public static FVR cat(FVR f1,FVR f2, FVR f3, + * FVR f4) { return FVR.cat(f1, FVR.cat(f2, FVR.cat(f3, f4))); } + */ + + final public static FVR read(DataInputStream dis) throws IOException { + int cap = dis.readInt(); + if (cap == 0) + return null; + return new FVR(dis, cap); + + } + + /* + * (non-Javadoc) + * + * @see is2.IFV#getScore() + */ + @Override + public double getScore() { + System.out.println("not implemented"); + new Exception().printStackTrace(); + // TODO Auto-generated method stub + return 0; + } + + /* + * (non-Javadoc) + * + * @see is2.IFV#clone() + */ + @Override + public IFV clone() { + FVR f = new FVR(this.size); + for (int i = 0; i < this.size; i++) { + f.m_index[i] = m_index[i]; + f.m_value[i] = m_value[i]; + } + f.size = this.size; + return f; + } + +} diff --git a/dependencyParser/experimental/mate-tools/src/is2/data/IEncoder.java b/dependencyParser/experimental/mate-tools/src/is2/data/IEncoder.java new file mode 100755 index 0000000..2a784af --- /dev/null +++ b/dependencyParser/experimental/mate-tools/src/is2/data/IEncoder.java @@ -0,0 +1,27 @@ +/** + * + */ +package is2.data; + +/** + * @author Bernd Bohnet, 20.09.2009 + * + * + */ +public interface IEncoder { + public int getValue(String a, String v); + + default public void print() { + throw new UnsupportedOperationException(); + }; + /** + * @param spath + * @param substring + */ + // public int register(String spath, String substring); + + /** + * @return + */ + // public HashMap<String,Integer> getFeatureCounter(); +} diff --git a/dependencyParser/experimental/mate-tools/src/is2/data/IEncoderPlus.java b/dependencyParser/experimental/mate-tools/src/is2/data/IEncoderPlus.java new file mode 100644 index 0000000..b033381 --- /dev/null +++ b/dependencyParser/experimental/mate-tools/src/is2/data/IEncoderPlus.java @@ -0,0 +1,27 @@ +/** + * + */ +package is2.data; + +import java.util.HashMap; + +/** + * @author Bernd Bohnet, 20.09.2009 + * + * + */ +public interface IEncoderPlus extends IEncoder { + + final public static String NONE = "<None>"; + + /** + * @param spath + * @param substring + */ + public int register(String spath, String substring); + + /** + * @return + */ + public HashMap<String, Integer> getFeatureCounter(); +} diff --git a/dependencyParser/experimental/mate-tools/src/is2/data/IFV.java b/dependencyParser/experimental/mate-tools/src/is2/data/IFV.java new file mode 100755 index 0000000..010f411 --- /dev/null +++ b/dependencyParser/experimental/mate-tools/src/is2/data/IFV.java @@ -0,0 +1,29 @@ +package is2.data; + +public abstract class IFV { + + // public double score=0; + + public abstract void add(int i); + + public abstract double getScore(); + + public abstract void clear(); + + @Override + public abstract IFV clone(); + + /** + * @param gvs + * @param li + */ + public void add(long[] gvs, Long2IntInterface li, int l) { + for (long gv : gvs) { + if (gv == Integer.MIN_VALUE) + break; + if (gv > 0) + add(li.l2i(gv + l)); + } + } + +} diff --git a/dependencyParser/experimental/mate-tools/src/is2/data/Instances.java b/dependencyParser/experimental/mate-tools/src/is2/data/Instances.java new file mode 100755 index 0000000..20493a9 --- /dev/null +++ b/dependencyParser/experimental/mate-tools/src/is2/data/Instances.java @@ -0,0 +1,408 @@ +package is2.data; + +import java.util.Arrays; +import java.util.BitSet; + +public class Instances { + + public IEncoder m_encoder; + + protected int size = 0; + + protected int capacity; + + public int[][] forms; + + public int[][] plemmas; + public int[][] glemmas; + + public short[][] heads; + public short[][] pheads; + + public short[][] labels; + public short[][] plabels; + + public short[][] gpos; + public short[][] pposs; + + public short[][][] feats; + + public int[][] predicat; + + public short[][] predicateId; + + public short[][] semposition; + + public short[][][] arg; + + public short[][][] argposition; + + public BitSet[] pfill; + + public short[][] gfeats; + public short[][] pfeats; + + public Instances() { + } + + public static int m_unkown = 0; + public static int m_count = 0; + + public static boolean m_report; + public static boolean m_found = false; + + final public void setForm(int i, int p, String x) { + + forms[i][p] = m_encoder.getValue(PipeGen.WORD, x); + if (forms[i][p] == -1) { + if (m_report) + System.out.println("unkwrd " + x); + m_unkown++; + m_found = true; + } + m_count++; + } + + final public void setRel(int i, int p, String x) { + labels[i][p] = (short) m_encoder.getValue(PipeGen.REL, x); + + } + + final public void setHead(int i, int c, int p) { + heads[i][c] = (short) p; + } + + final public int size() { + return size; + } + + public void setSize(int n) { + size = n; + } + + public void init(int ic, IEncoder mf) { + init(ic, mf, -1); + } + + public void init(int ic, IEncoder mf, int version) { + capacity = ic; + m_encoder = mf; + + forms = new int[capacity][]; + plemmas = new int[capacity][]; + glemmas = new int[capacity][]; + pposs = new short[capacity][]; + + gpos = new short[capacity][]; + labels = new short[capacity][]; + heads = new short[capacity][]; + plabels = new short[capacity][]; + pheads = new short[capacity][]; + feats = new short[capacity][][]; + gfeats = new short[capacity][]; + pfeats = new short[capacity][]; + + predicat = new int[ic][]; + predicateId = new short[ic][]; + semposition = new short[ic][]; + arg = new short[ic][][]; + argposition = new short[ic][][]; + + pfill = new BitSet[ic]; + } + + public int length(int i) { + return forms[i].length; + } + + public int createInstance09(int length) { + + forms[size] = new int[length]; + plemmas[size] = new int[length]; + glemmas[size] = new int[length]; + + pposs[size] = new short[length]; + + gpos[size] = new short[length]; + + labels[size] = new short[length]; + heads[size] = new short[length]; + + this.pfill[size] = new BitSet(length); + + feats[size] = new short[length][]; + gfeats[size] = new short[length]; + pfeats[size] = new short[length]; + plabels[size] = new short[length]; + pheads[size] = new short[length]; + + size++; + + return size - 1; + + } + + /* + * public final void setPPos(int i, int p, String x) { ppos[i][p] = + * (short)m_encoder.getValue(PipeGen.POS,x); + * + * } + */ + + public final void setPPoss(int i, int p, String x) { + pposs[i][p] = (short) m_encoder.getValue(PipeGen.POS, x); + + } + + public final void setGPos(int i, int p, String x) { + gpos[i][p] = (short) m_encoder.getValue(PipeGen.POS, x); + } + + public void setLemma(int i, int p, String x) { + plemmas[i][p] = m_encoder.getValue(PipeGen.WORD, x); + } + + public void setGLemma(int i, int p, String x) { + glemmas[i][p] = m_encoder.getValue(PipeGen.WORD, x); + } + + public void setFeats(int i, int p, String[] fts) { + if (fts == null) { + feats[i][p] = null; + return; + } + feats[i][p] = new short[fts.length]; + + for (int k = 0; k < fts.length; k++) { + feats[i][p][k] = (short) m_encoder.getValue(PipeGen.FEAT, fts[k]); + } + + } + + public void setFeature(int i, int p, String feature) { + if (feature == null) + return; + this.gfeats[i][p] = (short) m_encoder.getValue(PipeGen.FFEATS, feature); + /* + * if (gfeats[i][p]==-1) { System.out.println("+"+feature); new + * Exception().printStackTrace(); System.exit(0); } + */ + } + + public void setPFeature(int i, int p, String feature) { + if (feature == null) + return; + this.pfeats[i][p] = (short) m_encoder.getValue(PipeGen.FFEATS, feature); + } + + public int getWValue(String v) { + return m_encoder.getValue(PipeGen.WORD, v); + } + + public final void setPRel(int i, int p, String x) { + plabels[i][p] = (short) m_encoder.getValue(PipeGen.REL, x); + } + + public final void setPHead(int i, int c, int p) { + pheads[i][c] = (short) p; + } + + /* + * public String toString(int c) { StringBuffer s = new StringBuffer(); + * for(int i=0;i<length(c);i++) { + * s.append(i).append('\t').append(forms[c][i]).append("\t_\t").append(ppos[ + * c][i]).append('\t'). append('\t').append(heads[c][i]).append('\n'); } + * + * return s.toString(); } + */ + + /* + * public void setPos(int i, int p, String x) { ppos[i][p] = + * (short)m_encoder.getValue(PipeGen.POS,x); + * + * } + */ + + /** + * Create the semantic representation + * + * @param inst + * @param it + * @return + */ + public boolean createSem(int inst, SentenceData09 it) { + + boolean error = false; + + if (it.sem == null) + return error; + + predicat[inst] = new int[it.sem.length]; + semposition[inst] = new short[it.sem.length]; + predicateId[inst] = new short[it.sem.length]; + + if (it.sem != null) { + arg[inst] = new short[it.sem.length][]; + argposition[inst] = new short[it.sem.length][]; + } + if (it.sem == null) + return error; + + // init sems + + for (int i = 0; i < it.sem.length; i++) { + + String pred; + short predSense = 0; + if (it.sem[i].indexOf('.') > 0) { + pred = it.sem[i].substring(0, it.sem[i].indexOf('.')); + predSense = (short) m_encoder.getValue(PipeGen.SENSE, + it.sem[i].substring(it.sem[i].indexOf('.') + 1, it.sem[i].length())); + // Short.parseShort(it.sem[i].substring(it.sem[i].indexOf('.')+1, + // it.sem[i].length())); + } else { + pred = it.sem[i]; + predSense = (short) m_encoder.getValue(PipeGen.SENSE, ""); + } + + predicat[inst][i] = m_encoder.getValue(PipeGen.PRED, pred); + predicateId[inst][i] = predSense; + + semposition[inst][i] = (short) it.semposition[i]; + + // this can happen too when no arguments have values + if (it.arg == null) { + // DB.println("error arg == null "+i+" sem"+it.sem[i]+" inst + // number "+inst); + // error =true; + continue; + } + + // last pred(s) might have no argument + if (it.arg.length <= i) { + // DB.println("error in instance "+inst+" argument list and + // number of predicates different arg lists: "+it.arg.length+" + // preds "+sem.length); + // error =true; + continue; + } + + // this happens from time to time, if the predicate has no arguments + if (it.arg[i] == null) { + // DB.println("error no args for pred "+i+" "+it.sem[i]+" length + // "+it.ppos.length); + // error =true; + continue; + } + + int argCount = it.arg[i].length; + arg[inst][i] = new short[it.arg[i].length]; + argposition[inst][i] = new short[it.arg[i].length]; + + // add the content of the argument + for (int a = 0; a < argCount; a++) { + arg[inst][i][a] = (short) m_encoder.getValue(PipeGen.ARG, it.arg[i][a]); + argposition[inst][i][a] = (short) it.argposition[i][a]; + + // System.out.print(" #"+a+" pos: "+argposition[inst][i][a]+" + // "+it.arg[i][a]+" "); + } + // System.out.println(""); + + } + + return error; + + } + + public int predCount(int n) { + return pfill[n].cardinality(); + } + + public void print2DIntArray(int[][] a, String name) { + for(int i = 0; i < a.length; ++i) + if(a[i] != null) + for(int j = 0; j < a[i].length; ++j) + System.out.println(name + "[" + i + "][" + j + "] = " + a[i][j]); + } + + public void print2DShortArray(short[][] a, String name) { + for(int i = 0; i < a.length; ++i) + if(a[i] != null) + for(int j = 0; j < a[i].length; ++j) + System.out.println(name + "[" + i + "][" + j + "] = " + a[i][j]); + } + + public void print3DShortArray(short[][][] a, String name) { + for(int i = 0; i < a.length; ++i) + if(a[i] != null) + for(int j = 0; j < a[i].length; ++j) + if(a[i][j] != null) + System.out.println(name + "[" + i + "][" + j + "] = " + Arrays.toString(a[i][j])); + } + + public void print() { + System.out.println("-----m_encoder-----"); + m_encoder.print(); + System.out.println("-------------------"); + + System.out.println("size = " + size); + System.out.println("capacity = " + capacity); + + print2DIntArray(forms, "forms"); + print2DIntArray(plemmas, "plemmas"); + print2DIntArray(glemmas, "glemmas"); + print2DShortArray(heads, "heads"); + print2DShortArray(pheads, "pheads"); + print2DShortArray(labels, "labels"); + print2DShortArray(plabels, "plabels"); + print2DShortArray(gpos, "gpos"); + print2DShortArray(pposs, "pposs"); + print3DShortArray(feats, "feats"); + print2DIntArray(predicat, "predicat"); + print2DShortArray(predicateId, "predicateId"); + print2DShortArray(semposition, "semposition"); + print3DShortArray(arg, "arg"); + print3DShortArray(argposition, "argposition"); + for(int i = 0; i < pfill.length; ++i) + System.out.println("pfill [" + i + "] = " + pfill[i]); + print2DShortArray(gfeats, "gfeats"); + print2DShortArray(pfeats, "pfeats"); + + System.out.println("m_unkown = " + m_unkown); + System.out.println("m_count = " + m_count); + System.out.println("m_report = " + m_report); + System.out.println("m_found = " + m_found); + } + + /** + * @param pscnt + * @return + */ + public String print(int pscnt) { + StringBuilder s = new StringBuilder(); + + for (int i = 0; i < this.length(pscnt); i++) { + s.append(i + "\t" + forms[pscnt][i] + "\t" + this.glemmas[pscnt][i] + "\t" + this.plemmas[pscnt][i] + "\t" + + this.gpos[pscnt][i] + "\t" + this.pposs[pscnt][i] + "\t" + this.gfeats[pscnt][i] + "\t" + + (this.feats[pscnt][i] != null && this.feats[pscnt][i].length > 0 ? this.feats[pscnt][i][0] : null) + + "\t l " + (labels[pscnt] != null && labels[pscnt].length > i ? labels[pscnt][i] : null) + "\t" + + "\t" + heads[pscnt][i] + "\t" + + (plabels[pscnt] != null && plabels[pscnt].length > i ? plabels[pscnt][i] : null) + "\t" + + this.predicat[pscnt][i] + "\n"); + } + return s.toString(); + } + + public String print1(int pscnt) { + StringBuilder s = new StringBuilder(); + + for (int i = 0; i < this.length(pscnt); i++) { + s.append(i + "\t" + forms[pscnt][i] + "\t" + "\t" + this.plemmas[pscnt][i] + "\t" + +this.pposs[pscnt][i] + + "\t l " + (labels[pscnt] != null && labels[pscnt].length > i ? labels[pscnt][i] : null) + "\t" + + "\t" + heads[pscnt][i] + "\t" + + (plabels[pscnt] != null && plabels[pscnt].length > i ? plabels[pscnt][i] : null) + "\n"); + } + return s.toString(); + } +} diff --git a/dependencyParser/experimental/mate-tools/src/is2/data/InstancesTagger.java b/dependencyParser/experimental/mate-tools/src/is2/data/InstancesTagger.java new file mode 100644 index 0000000..4cf894a --- /dev/null +++ b/dependencyParser/experimental/mate-tools/src/is2/data/InstancesTagger.java @@ -0,0 +1,95 @@ +/** + * + */ +package is2.data; + +/** + * @author Dr. Bernd Bohnet, 06.11.2010 + * + * + */ +public class InstancesTagger extends Instances { + + public short[][][] chars; + public int[][] formlc; + + @Override + public void init(int ic, IEncoder mf) { + super.init(ic, mf, 9); + chars = new short[capacity][][]; + formlc = new int[capacity][]; + // System.out.println("create chars "+capacity ); + } + + public void fillChars(SentenceData09 instance, int i, int cend) { + chars[i] = new short[instance.length()][13]; + formlc[i] = new int[instance.length()]; + + for (int k = 0; k < instance.length(); k++) { + chars[i][k][0] = (short) (instance.forms[k].length() > 0 + ? m_encoder.getValue(PipeGen.CHAR, String.valueOf(instance.forms[k].charAt(0))) : cend); + chars[i][k][1] = (short) (instance.forms[k].length() > 1 + ? m_encoder.getValue(PipeGen.CHAR, String.valueOf(instance.forms[k].charAt(1))) : cend);// m_encoder.getValue(PipeGen.CHAR, + // END); + chars[i][k][2] = (short) (instance.forms[k].length() > 2 + ? m_encoder.getValue(PipeGen.CHAR, String.valueOf(instance.forms[k].charAt(2))) : cend); + chars[i][k][3] = (short) (instance.forms[k].length() > 3 + ? m_encoder.getValue(PipeGen.CHAR, String.valueOf(instance.forms[k].charAt(3))) : cend); + chars[i][k][4] = (short) (instance.forms[k].length() > 4 + ? m_encoder.getValue(PipeGen.CHAR, String.valueOf(instance.forms[k].charAt(4))) : cend); + chars[i][k][5] = (short) (instance.forms[k].length() > 5 + ? m_encoder.getValue(PipeGen.CHAR, String.valueOf(instance.forms[k].charAt(5))) : cend); + + chars[i][k][6] = (short) (instance.forms[k].length() > 0 ? m_encoder.getValue(PipeGen.CHAR, + String.valueOf(instance.forms[k].charAt(instance.forms[k].length() - 1))) : cend); + chars[i][k][7] = (short) (instance.forms[k].length() > 1 ? m_encoder.getValue(PipeGen.CHAR, + String.valueOf(instance.forms[k].charAt(instance.forms[k].length() - 2))) : cend);// m_encoder.getValue(PipeGen.CHAR, + // END); + chars[i][k][8] = (short) (instance.forms[k].length() > 2 ? m_encoder.getValue(PipeGen.CHAR, + String.valueOf(instance.forms[k].charAt(instance.forms[k].length() - 3))) : cend); + chars[i][k][9] = (short) (instance.forms[k].length() > 3 ? m_encoder.getValue(PipeGen.CHAR, + String.valueOf(instance.forms[k].charAt(instance.forms[k].length() - 4))) : cend); + chars[i][k][10] = (short) (instance.forms[k].length() > 4 ? m_encoder.getValue(PipeGen.CHAR, + String.valueOf(instance.forms[k].charAt(instance.forms[k].length() - 5))) : cend); + chars[i][k][11] = (short) instance.forms[k].length(); + chars[i][k][12] = (short) (instance.forms[k].length() > 0 + ? m_encoder.getValue(PipeGen.CHAR, String.valueOf(instance.forms[k].charAt(0))) : cend); + formlc[i][k] = m_encoder.getValue(PipeGen.WORD, instance.forms[k].toLowerCase()); + } + } + + public void fillChars(SentenceData09 instance, int i, String[] what, int cend) { + chars[i] = new short[instance.length()][13]; + formlc[i] = new int[instance.length()]; + + for (int k = 0; k < instance.length(); k++) { + chars[i][k][0] = (short) m_encoder.getValue(PipeGen.CHAR, String.valueOf(what[k].charAt(0))); + chars[i][k][1] = (short) (what[k].length() > 1 + ? m_encoder.getValue(PipeGen.CHAR, String.valueOf(what[k].charAt(1))) : cend);// m_encoder.getValue(PipeGen.CHAR, + // END); + chars[i][k][2] = (short) (what[k].length() > 2 + ? m_encoder.getValue(PipeGen.CHAR, String.valueOf(what[k].charAt(2))) : cend); + chars[i][k][3] = (short) (what[k].length() > 3 + ? m_encoder.getValue(PipeGen.CHAR, String.valueOf(what[k].charAt(3))) : cend); + chars[i][k][4] = (short) (what[k].length() > 4 + ? m_encoder.getValue(PipeGen.CHAR, String.valueOf(what[k].charAt(4))) : cend); + chars[i][k][5] = (short) (what[k].length() > 5 + ? m_encoder.getValue(PipeGen.CHAR, String.valueOf(what[k].charAt(5))) : cend); + + chars[i][k][6] = (short) (m_encoder.getValue(PipeGen.CHAR, + String.valueOf(what[k].charAt(what[k].length() - 1)))); + chars[i][k][7] = (short) (what[k].length() > 1 + ? m_encoder.getValue(PipeGen.CHAR, String.valueOf(what[k].charAt(what[k].length() - 2))) : cend);// m_encoder.getValue(PipeGen.CHAR, + // END); + chars[i][k][8] = (short) (what[k].length() > 2 + ? m_encoder.getValue(PipeGen.CHAR, String.valueOf(what[k].charAt(what[k].length() - 3))) : cend); + chars[i][k][9] = (short) (what[k].length() > 3 + ? m_encoder.getValue(PipeGen.CHAR, String.valueOf(what[k].charAt(what[k].length() - 4))) : cend); + chars[i][k][10] = (short) (what[k].length() > 4 + ? m_encoder.getValue(PipeGen.CHAR, String.valueOf(what[k].charAt(what[k].length() - 5))) : cend); + chars[i][k][11] = (short) what[k].length(); + formlc[i][k] = m_encoder.getValue(PipeGen.WORD, what[k].toLowerCase()); + } + } + +} diff --git a/dependencyParser/experimental/mate-tools/src/is2/data/IntIntHash.java b/dependencyParser/experimental/mate-tools/src/is2/data/IntIntHash.java new file mode 100644 index 0000000..1019507 --- /dev/null +++ b/dependencyParser/experimental/mate-tools/src/is2/data/IntIntHash.java @@ -0,0 +1,255 @@ +package is2.data; + +import java.util.Arrays; + +final public class IntIntHash { + + protected int _size; + protected int _free; + protected float _loadFactor; + public int _maxSize; + protected int _autoCompactRemovesRemaining; + protected float _autoCompactionFactor; + public int _set[]; + private int _values[]; + + public IntIntHash() { + this(102877, 0.5F); + } + + public IntIntHash(int initialCapacity, float loadFactor) { + _loadFactor = loadFactor; + _autoCompactionFactor = loadFactor; + setUp((int) Math.ceil(initialCapacity / loadFactor)); + } + + public int size() { + return _size; + } + + public void ensureCapacity(int desiredCapacity) { + + if (desiredCapacity > _maxSize - size()) { + rehash(PrimeFinder.nextPrime((int) Math.ceil((desiredCapacity + size()) / _loadFactor) + 1)); + computeMaxSize(capacity()); + } + } + + public void compact() { + rehash(PrimeFinder.nextPrime((int) Math.ceil(size() / _loadFactor) + 1)); + computeMaxSize(capacity()); + if (_autoCompactionFactor != 0.0F) + computeNextAutoCompactionAmount(size()); + } + + public void setAutoCompactionFactor(float factor) { + if (factor < 0.0F) { + throw new IllegalArgumentException( + (new StringBuilder()).append("Factor must be >= 0: ").append(factor).toString()); + } else { + _autoCompactionFactor = factor; + return; + } + } + + public float getAutoCompactionFactor() { + return _autoCompactionFactor; + } + + private void computeMaxSize(int capacity) { + _maxSize = Math.min(capacity - 1, (int) Math.floor(capacity * _loadFactor)); + _free = capacity - _size; + } + + private void computeNextAutoCompactionAmount(int size) { + if (_autoCompactionFactor != 0.0F) + _autoCompactRemovesRemaining = Math.round(size * _autoCompactionFactor); + } + + protected final void postInsertHook(boolean usedFreeSlot) { + if (usedFreeSlot) + _free--; + if (++_size > _maxSize || _free == 0) { + int newCapacity = _size <= _maxSize ? capacity() : PrimeFinder.nextPrime(capacity() << 1); + rehash(newCapacity); + computeMaxSize(capacity()); + } + } + + protected int calculateGrownCapacity() { + return capacity() << 1; + } + + protected int capacity() { + return _values.length; + } + + public boolean contains(int val) { + return index(val) >= 0; + } + + private int index(int v) { + + int length = _set.length; + int index = Math.abs((computeHashCode(v) /* & 2147483647 */ ) % length); + + while (true) { + // first + long l = _set[index]; + if (l == 0) { + // good++; + return -1; + } + // second + if (l == v) { + return index; + } + if (--index < 0) + index += length; + } + // return -1; + } + + protected int insertionIndex(long val) { + int length = _set.length; + int index = Math.abs((computeHashCode(val) /* & 2147483647 */ ) % length); + while (true) { + if (_set[index] == 0) + return index; + if (_set[index] == val) + return -index - 1; + if (--index < 0) + index += length; + + } + } + + public int computeHashCode(long value) { + return (int) ((value ^ (value & 0xffffffff00000000L) >>> 32) * 31);// 0x811c9dc5 + // ^ + // // + // 29 + } + + protected int setUp(int initialCapacity) { + int capacity = PrimeFinder.nextPrime(initialCapacity); + computeMaxSize(capacity); + computeNextAutoCompactionAmount(initialCapacity); + _set = new int[capacity]; + _values = new int[capacity]; + return capacity; + } + + public void put(int key, int value) { + int index = insertionIndex(key); + doPut(key, value, index); + } + + private void doPut(int key, int value, int index) { + boolean isNewMapping = true; + if (index < 0) { + index = -index - 1; + isNewMapping = false; + } + _set[index] = key; + _values[index] = value; + if (isNewMapping) + postInsertHook(true); + + } + + protected void rehash(int newCapacity) { + int oldCapacity = _set.length; + int oldKeys[] = _set; + int oldVals[] = _values; + _set = new int[newCapacity]; + _values = new int[newCapacity]; + int i = oldCapacity; + + while (true) { + if (i-- <= 0) + break; + if (oldVals[i] != 0) { + int o = oldKeys[i]; + int index = insertionIndex(o); + _set[index] = o; + _values[index] = oldVals[i]; + } + } + } + + int index = 0; + + public int get(int key) { + int index = index(key); + return index >= 0 ? _values[index] : 0; + } + + public void clear() { + _size = 0; + _free = capacity(); + Arrays.fill(_set, 0, _set.length, 0); + // Arrays.fill(_values, 0, _values.length, 0); + } + + public int remove(int key) { + int prev = 0; + int index = index(key); + if (index >= 0) { + prev = _values[index]; + _values[index] = 0; + _set[index] = 0; + _size--; + if (_autoCompactionFactor != 0.0F) { + _autoCompactRemovesRemaining--; + if (_autoCompactRemovesRemaining <= 0) + compact(); + } + } + return prev; + } + + public int[] getValues() { + int vals[] = new int[size()]; + int v[] = _values; + int i = v.length; + int j = 0; + do { + if (i-- <= 0) + break; + if (v[i] != 0) + vals[j++] = v[i]; + } while (true); + return vals; + } + + public int[] keys() { + int keys[] = new int[size()]; + int k[] = _set; + // byte states[] = _states; + int i = k.length; + int j = 0; + do { + if (i-- <= 0) + break; + if (k[i] != 0) + keys[j++] = k[i]; + } while (true); + return keys; + } + + /** + * @param index2 + * @param i + * @return + */ + public boolean adjustValue(int key, int i) { + int index = index(key); + if (index >= 0) { + _values[index] += i; + return true; + } + return false; + } + +} diff --git a/dependencyParser/experimental/mate-tools/src/is2/data/Long2Int.java b/dependencyParser/experimental/mate-tools/src/is2/data/Long2Int.java new file mode 100755 index 0000000..1a4a3c4 --- /dev/null +++ b/dependencyParser/experimental/mate-tools/src/is2/data/Long2Int.java @@ -0,0 +1,112 @@ +package is2.data; + +/** + * @author Bernd Bohnet, 01.09.2009 + * + * Maps for the Hash Kernel the long values to the int values. + */ +final public class Long2Int implements Long2IntInterface { + + public Long2Int() { + size = 115911564; + } + + public Long2Int(int s) { + size = s; + } + + public static void main(String args[]) { + + long l = 123456; + long l2 = 1010119; + System.out.println("l \t" + l + "\t" + printBits(l)); + + long x = 100000000; + System.out.println("1m\t" + l2 + "\t" + printBits(x) + "\t" + x); + + System.out.println("l2\t" + l2 + "\t" + printBits(l)); + + System.out.println("l2*l\t" + l2 + "\t" + printBits(l * l2) + " \t " + l * l2); + + System.out.println("l2*l*l2\t" + l2 + "\t" + printBits(l * l2 * l2) + " \t " + l * l2 * l2); + + System.out.println("l2*l*l2\t" + l2 + "\t" + printBits(l * l2 * l2 * l2) + " \t " + l * l2 * l2 * l2); + + System.out.println( + "l2*l*l2\t" + l2 + "\t" + printBits((l * l2) % 0xfffff) + " \t " + l * l2 * l2 * l2 + "\t " + 0xfffff); + System.out.println("l2*l*l2\t" + l2 + "\t" + printBits((l * l2) & 0xfffffff) + " \t " + l * l2 * l2 * l2); + } + + /** Integer counter for long2int */ + final private int size; // 0x03ffffff //0x07ffffff + + /* + * (non-Javadoc) + * + * @see is2.sp09k9992.Long2IntIterface#size() + */ + @Override + public int size() { + return size; + } + + /* + * (non-Javadoc) + * + * @see is2.sp09k9992.Long2IntIterface#start() has no meaning for this + * implementation + */ + final public void start() { + } + + /* + * (non-Javadoc) + * + * @see is2.sp09k9992.Long2IntIterface#l2i(long) + */ + @Override + final public int l2i(long l) { + if (l < 0) + return -1; + + // this works well LAS 88.138 + // int r= (int)(( l ^ (l&0xffffffff00000000L) >>> 29 ));//0x811c9dc5 ^ + // // 29 + // return Math.abs(r % size); + // this works a bit better and good with 0x03ffffff + // + /* + * long r= l;//26 l = (l>>12)&0xfffffffffffff000L; r ^= l;//38 l = + * (l>>11)&0xffffffffffffc000L; r ^= l;//49 l = (l>>9)& + * 0xffffffffffff0000L; //53 r ^= l;//58 l = (l>>7)&0xfffffffffffc0000L; + * //62 r ^=l;//65 int x = (int)r; x = x % size; // return x >= 0 ? x : + * -x ;// Math.abs(r % size); + * + */ + // 26 0x03ffffff + // together with 0x07ffffff 27 88.372 + long r = l;// 27 + l = (l >> 13) & 0xffffffffffffe000L; + r ^= l; // 40 + l = (l >> 11) & 0xffffffffffff0000L; + r ^= l; // 51 + l = (l >> 9) & 0xfffffffffffc0000L; // 53 + r ^= l; // 60 + l = (l >> 7) & 0xfffffffffff00000L; // 62 + r ^= l; // 67 + int x = ((int) r) % size; + + return x >= 0 ? x : -x; + } + + static public StringBuffer printBits(long out) { + StringBuffer s = new StringBuffer(); + + for (int k = 0; k < 65; k++) { + s.append((out & 1) == 1 ? "1" : "0"); + out >>= 1; + } + s.reverse(); + return s; + } +} diff --git a/dependencyParser/experimental/mate-tools/src/is2/data/Long2IntExact.java b/dependencyParser/experimental/mate-tools/src/is2/data/Long2IntExact.java new file mode 100644 index 0000000..debf455 --- /dev/null +++ b/dependencyParser/experimental/mate-tools/src/is2/data/Long2IntExact.java @@ -0,0 +1,65 @@ +package is2.data; + +/** + * @author Bernd Bohnet, 01.09.2009 + * + * Maps for the Hash Kernel the long values to the int values. + */ +final public class Long2IntExact implements Long2IntInterface { + + static gnu.trove.TLongIntHashMap mapt = new gnu.trove.TLongIntHashMap(); + + static int cnt = 0; + + public Long2IntExact() { + size = 115911564; + } + + public Long2IntExact(int s) { + size = s; + } + + /** Integer counter for long2int */ + final private int size; // 0x03ffffff //0x07ffffff + + /* + * (non-Javadoc) + * + * @see is2.sp09k9992.Long2IntIterface#size() + */ + @Override + public int size() { + return size; + } + + /* + * (non-Javadoc) + * + * @see is2.sp09k9992.Long2IntIterface#start() has no meaning for this + * implementation + */ + final public void start() { + } + + /* + * (non-Javadoc) + * + * @see is2.sp09k9992.Long2IntIterface#l2i(long) + */ + @Override + final public int l2i(long l) { + if (l < 0) + return -1; + + int i = mapt.get(l); + if (i != 0) + return i; + + if (i == 0 && cnt < size - 1) { + cnt++; + mapt.put(l, cnt); + return cnt; + } + return -1; + } +} diff --git a/dependencyParser/experimental/mate-tools/src/is2/data/Long2IntInterface.java b/dependencyParser/experimental/mate-tools/src/is2/data/Long2IntInterface.java new file mode 100755 index 0000000..8401c1f --- /dev/null +++ b/dependencyParser/experimental/mate-tools/src/is2/data/Long2IntInterface.java @@ -0,0 +1,16 @@ +package is2.data; + +public interface Long2IntInterface { + + public abstract int size(); + + /** + * Maps a long to a integer value. This is very useful to save memory for + * sparse data long values + * + * @param l + * @return the integer + */ + public abstract int l2i(long l); + +} \ No newline at end of file diff --git a/dependencyParser/experimental/mate-tools/src/is2/data/Long2IntQuick.java b/dependencyParser/experimental/mate-tools/src/is2/data/Long2IntQuick.java new file mode 100644 index 0000000..9956173 --- /dev/null +++ b/dependencyParser/experimental/mate-tools/src/is2/data/Long2IntQuick.java @@ -0,0 +1,51 @@ +package is2.data; + +/** + * @author Bernd Bohnet, 01.09.2009 + * + * Maps for the Hash Kernel the long values to the int values. + */ +final public class Long2IntQuick implements Long2IntInterface { + + /** Integer counter for long2int */ + final private int size; + + public Long2IntQuick() { + size = 0x07ffffff; + } + + public Long2IntQuick(int s) { + size = s; + } + + /* + * (non-Javadoc) + * + * @see is2.sp09k9992.Long2IntIterface#size() + */ + @Override + public int size() { + return size; + } + + /* + * (non-Javadoc) + * + * @see is2.sp09k9992.Long2IntIterface#start() has no meaning for this + * implementation + */ + + /* + * (non-Javadoc) + * + * @see is2.sp09k9992.Long2IntIterface#l2i(long) + */ + @Override + final public int l2i(long r) { + long l = (r >> 16) & 0xfffffffffffff000L; + r ^= l; + r ^= l = (l >> 12) & 0xffffffffffff0000L; + r ^= l = (l >> 8) & 0xfffffffffffc0000L; + return (int) (r % size); + } +} diff --git a/dependencyParser/experimental/mate-tools/src/is2/data/MFB.java b/dependencyParser/experimental/mate-tools/src/is2/data/MFB.java new file mode 100755 index 0000000..9fa4e3c --- /dev/null +++ b/dependencyParser/experimental/mate-tools/src/is2/data/MFB.java @@ -0,0 +1,248 @@ +package is2.data; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; +import java.util.HashMap; +import java.util.Map.Entry; + +import is2.util.DB; + +/** + * Map Features, do not map long to integer + * + * @author Bernd Bohnet, 20.09.2009 + */ + +final public class MFB implements IEncoderPlus { + + /** The features and its values */ + static private final HashMap<String, HashMap<String, Integer>> m_featureSets = new HashMap<String, HashMap<String, Integer>>(); + + /** The feature class and the number of values */ + static private final HashMap<String, Integer> m_featureCounters = new HashMap<String, Integer>(); + + /** The number of bits needed to encode a feature */ + static final HashMap<String, Integer> m_featureBits = new HashMap<String, Integer>(); + + /** Integer counter for long2int */ + static private int count = 0; + + /** Stop growing */ + public boolean stop = false; + + final public static String NONE = "<None>"; + + public MFB() { + } + + public int size() { + return count; + } + + /** + * Register an attribute class, if it not exists and add a possible value + * + * @param type + * @param type2 + */ + @Override + final public int register(String a, String v) { + + synchronized (m_featureCounters) { + + HashMap<String, Integer> fs = getFeatureSet().get(a); + if (fs == null) { + fs = new HashMap<String, Integer>(); + getFeatureSet().put(a, fs); + fs.put(NONE, 0); + getFeatureCounter().put(a, 1); + } + + Integer i = fs.get(v); + if (i == null) { + Integer c = getFeatureCounter().get(a); + fs.put(v, c); + c++; + getFeatureCounter().put(a, c); + return c - 1; + } else + return i; + } + } + + /** + * Calculates the number of bits needed to encode a feature + */ + public void calculateBits() { + + for (Entry<String, Integer> e : getFeatureCounter().entrySet()) { + int bits = (int) Math.ceil((Math.log(e.getValue() + 1) / Math.log(2))); + m_featureBits.put(e.getKey(), bits); + } + + // System.out.println("total number of needed bits "+total); + } + + @Override + public String toString() { + + StringBuffer content = new StringBuffer(); + for (Entry<String, Integer> e : getFeatureCounter().entrySet()) { + content.append(e.getKey() + " " + e.getValue()); + content.append(':'); + // HashMap<String,Integer> vs = getFeatureSet().get(e.getKey()); + content.append(getFeatureBits(e.getKey())); + + /* + * if (vs.size()<120) for(Entry<String,Integer> e2 : vs.entrySet()) + * { content.append(e2.getKey()+" ("+e2.getValue()+") "); } + */ + content.append('\n'); + + } + return content.toString(); + } + + static final public short getFeatureBits(String a) { + if (m_featureBits.get(a) == null) + return 0; + return (short) m_featureBits.get(a).intValue(); + } + + /** + * Get the integer place holder of the string value v of the type a + * + * @param t + * the type + * @param v + * the value + * @return the integer place holder of v + */ + @Override + final public int getValue(String t, String v) { + + if (m_featureSets.get(t) == null) + return -1; + Integer vi = m_featureSets.get(t).get(v); + if (vi == null) + return -1; // stop && + return vi.intValue(); + } + + /** + * Static version of getValue + * + * @see getValue + */ + static final public int getValueS(String a, String v) { + + if (m_featureSets.get(a) == null) + return -1; + Integer vi = m_featureSets.get(a).get(v); + if (vi == null) + return -1; // stop && + return vi.intValue(); + } + + public int hasValue(String a, String v) { + + Integer vi = m_featureSets.get(a).get(v); + if (vi == null) + return -1; + return vi.intValue(); + } + + public static String printBits(int k) { + StringBuffer s = new StringBuffer(); + for (int i = 0; i < 31; i++) { + s.append((k & 0x00000001) == 1 ? '1' : '0'); + k = k >> 1; + + } + s.reverse(); + return s.toString(); + } + + /** + * Maps a long to a integer value. This is very useful to save memory for + * sparse data long values + * + * @param l + * @return the integer + */ + static public int misses = 0; + static public int good = 0; + + /** + * Write the data + * + * @param dos + * @throws IOException + */ + static public void writeData(DataOutputStream dos) throws IOException { + dos.writeInt(getFeatureSet().size()); + // DB.println("write"+getFeatureSet().size()); + for (Entry<String, HashMap<String, Integer>> e : getFeatureSet().entrySet()) { + dos.writeUTF(e.getKey()); + dos.writeInt(e.getValue().size()); + + for (Entry<String, Integer> e2 : e.getValue().entrySet()) { + + if (e2.getKey() == null) + DB.println("key " + e2.getKey() + " value " + e2.getValue() + " e -key " + e.getKey()); + dos.writeUTF(e2.getKey()); + dos.writeInt(e2.getValue()); + + } + + } + } + + public void read(DataInputStream din) throws IOException { + + int size = din.readInt(); + for (int i = 0; i < size; i++) { + String k = din.readUTF(); + int size2 = din.readInt(); + + HashMap<String, Integer> h = new HashMap<String, Integer>(); + getFeatureSet().put(k, h); + for (int j = 0; j < size2; j++) { + h.put(din.readUTF(), din.readInt()); + } + getFeatureCounter().put(k, size2); + } + + count = size; + // stop(); + calculateBits(); + } + + /** + * Clear the data + */ + static public void clearData() { + getFeatureSet().clear(); + m_featureBits.clear(); + getFeatureSet().clear(); + } + + @Override + public HashMap<String, Integer> getFeatureCounter() { + return m_featureCounters; + } + + static public HashMap<String, HashMap<String, Integer>> getFeatureSet() { + return m_featureSets; + } + + static public String[] reverse(HashMap<String, Integer> v) { + String[] set = new String[v.size()]; + for (Entry<String, Integer> e : v.entrySet()) { + set[e.getValue()] = e.getKey(); + } + return set; + } + +} diff --git a/dependencyParser/experimental/mate-tools/src/is2/data/MFC.java b/dependencyParser/experimental/mate-tools/src/is2/data/MFC.java new file mode 100644 index 0000000..859a8ce --- /dev/null +++ b/dependencyParser/experimental/mate-tools/src/is2/data/MFC.java @@ -0,0 +1,243 @@ +package is2.data; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; +import java.util.HashMap; +import java.util.Map.Entry; + +import is2.util.DB; + +/** + * Map Features, do not map long to integer + * + * @author Bernd Bohnet, 17.09.2011 + */ + +final public class MFC implements IEncoderPlus { + + /** The features and its values */ + private final HashMap<String, HashMap<String, Integer>> m_featureSets = new HashMap<String, HashMap<String, Integer>>(); + + /** The feature class and the number of values */ + private final HashMap<String, Integer> m_featureCounters = new HashMap<String, Integer>(); + + /** The number of bits needed to encode a feature */ + final HashMap<String, Integer> m_featureBits = new HashMap<String, Integer>(); + + /** Integer counter for long2int */ + private int count = 0; + + public MFC() { + } + + public int size() { + return count; + } + + /** + * Register an attribute class, if it not exists and add a possible value + * + * @param type + * @param type2 + */ + @Override + final public int register(String a, String v) { + + synchronized (m_featureCounters) { + + HashMap<String, Integer> fs = getFeatureSet().get(a); + if (fs == null) { + fs = new HashMap<String, Integer>(); + getFeatureSet().put(a, fs); + fs.put(NONE, 0); + getFeatureCounter().put(a, 1); + } + + Integer i = fs.get(v); + if (i == null) { + Integer c = getFeatureCounter().get(a); + fs.put(v, c); + c++; + getFeatureCounter().put(a, c); + return c - 1; + } else + return i; + } + } + + /** + * Calculates the number of bits needed to encode a feature + */ + public void calculateBits() { + + for (Entry<String, Integer> e : getFeatureCounter().entrySet()) { + int bits = (int) Math.ceil((Math.log(e.getValue() + 1) / Math.log(2))); + m_featureBits.put(e.getKey(), bits); + } + + // System.out.println("total number of needed bits "+total); + } + + @Override + public String toString() { + + StringBuffer content = new StringBuffer(); + for (Entry<String, Integer> e : getFeatureCounter().entrySet()) { + content.append(e.getKey() + " " + e.getValue()); + content.append(':'); + // HashMap<String,Integer> vs = getFeatureSet().get(e.getKey()); + content.append(getFeatureBits(e.getKey())); + + /* + * if (vs.size()<120) for(Entry<String,Integer> e2 : vs.entrySet()) + * { content.append(e2.getKey()+" ("+e2.getValue()+") "); } + */ + content.append('\n'); + + } + return content.toString(); + } + + final public short getFeatureBits(String a) { + if (m_featureBits.get(a) == null) + return 0; + return (short) m_featureBits.get(a).intValue(); + } + + /** + * Get the integer place holder of the string value v of the type a + * + * @param t + * the type + * @param v + * the value + * @return the integer place holder of v + */ + @Override + final public int getValue(String t, String v) { + + if (m_featureSets.get(t) == null) + return -1; + Integer vi = m_featureSets.get(t).get(v); + if (vi == null) + return -1; // stop && + return vi.intValue(); + } + + /** + * Static version of getValue + * + * @see getValue + */ + final public int getValueS(String a, String v) { + + if (m_featureSets.get(a) == null) + return -1; + Integer vi = m_featureSets.get(a).get(v); + if (vi == null) + return -1; // stop && + return vi.intValue(); + } + + public int hasValue(String a, String v) { + + Integer vi = m_featureSets.get(a).get(v); + if (vi == null) + return -1; + return vi.intValue(); + } + + public static String printBits(int k) { + StringBuffer s = new StringBuffer(); + for (int i = 0; i < 31; i++) { + s.append((k & 0x00000001) == 1 ? '1' : '0'); + k = k >> 1; + + } + s.reverse(); + return s.toString(); + } + + /** + * Maps a long to a integer value. This is very useful to save memory for + * sparse data long values + * + * @param l + * @return the integer + */ + static public int misses = 0; + static public int good = 0; + + /** + * Write the data + * + * @param dos + * @throws IOException + */ + public void writeData(DataOutputStream dos) throws IOException { + dos.writeInt(getFeatureSet().size()); + // DB.println("write"+getFeatureSet().size()); + for (Entry<String, HashMap<String, Integer>> e : getFeatureSet().entrySet()) { + dos.writeUTF(e.getKey()); + dos.writeInt(e.getValue().size()); + + for (Entry<String, Integer> e2 : e.getValue().entrySet()) { + + if (e2.getKey() == null) + DB.println("key " + e2.getKey() + " value " + e2.getValue() + " e -key " + e.getKey()); + dos.writeUTF(e2.getKey()); + dos.writeInt(e2.getValue()); + + } + + } + } + + public void read(DataInputStream din) throws IOException { + + int size = din.readInt(); + for (int i = 0; i < size; i++) { + String k = din.readUTF(); + int size2 = din.readInt(); + + HashMap<String, Integer> h = new HashMap<String, Integer>(); + getFeatureSet().put(k, h); + for (int j = 0; j < size2; j++) { + h.put(din.readUTF(), din.readInt()); + } + getFeatureCounter().put(k, size2); + } + + count = size; + // stop(); + calculateBits(); + } + + /** + * Clear the data + */ + public void clearData() { + getFeatureSet().clear(); + m_featureBits.clear(); + getFeatureSet().clear(); + } + + @Override + public HashMap<String, Integer> getFeatureCounter() { + return m_featureCounters; + } + + public HashMap<String, HashMap<String, Integer>> getFeatureSet() { + return m_featureSets; + } + + public String[] reverse(HashMap<String, Integer> v) { + String[] set = new String[v.size()]; + for (Entry<String, Integer> e : v.entrySet()) { + set[e.getValue()] = e.getKey(); + } + return set; + } + +} diff --git a/dependencyParser/experimental/mate-tools/src/is2/data/MFO.java b/dependencyParser/experimental/mate-tools/src/is2/data/MFO.java new file mode 100755 index 0000000..a8bc441 --- /dev/null +++ b/dependencyParser/experimental/mate-tools/src/is2/data/MFO.java @@ -0,0 +1,380 @@ +package is2.data; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; +import java.util.HashMap; +import java.util.Map.Entry; + +import is2.util.DB; + +/** + * Map Features, do not map long to integer + * + * @author Bernd Bohnet, 20.09.2009 + */ + +final public class MFO implements IEncoderPlus { + + /** The features and its values */ + static private final HashMap<String, HashMap<String, Integer>> m_featureSets = new HashMap<String, HashMap<String, Integer>>(); + + /** The feature class and the number of values */ + static private final HashMap<String, Integer> m_featureCounters = new HashMap<String, Integer>(); + + /** The number of bits needed to encode a feature */ + static final HashMap<String, Integer> m_featureBits = new HashMap<String, Integer>(); + + final public static String NONE = "<None>"; + + final public static class Data4 { + public int shift; + public short a0, a1, a2, a3, a4, a5, a6, a7, a8, a9; + public int v0, v1, v2, v3, v4, v5, v6, v7, v8, v9; + + final public long calcs(int b, long v, long l) { + if (l < 0) + return l; + l |= v << shift; + shift += b; + return l; + } + + } + + public MFO() { + } + + /** + * Register an attribute class, if it not exists and add a possible value + * + * @param type + * @param type2 + */ + @Override + final public int register(String a, String v) { + + HashMap<String, Integer> fs = getFeatureSet().get(a); + if (fs == null) { + fs = new HashMap<String, Integer>(); + getFeatureSet().put(a, fs); + fs.put(NONE, 0); + getFeatureCounter().put(a, 1); + } + Integer c = getFeatureCounter().get(a); + + Integer i = fs.get(v); + if (i == null) { + fs.put(v, c); + c++; + getFeatureCounter().put(a, c); + return c - 1; + } else + return i; + } + + /** + * Calculates the number of bits needed to encode a feature + */ + public void calculateBits() { + + for (Entry<String, Integer> e : getFeatureCounter().entrySet()) { + int bits = (int) Math.ceil((Math.log(e.getValue() + 1) / Math.log(2))); + m_featureBits.put(e.getKey(), bits); + } + + // System.out.println("total number of needed bits "+total); + } + + @Override + public String toString() { + + StringBuffer content = new StringBuffer(); + for (Entry<String, Integer> e : getFeatureCounter().entrySet()) { + content.append(e.getKey() + " " + e.getValue()); + content.append(':'); + // HashMap<String,Integer> vs = getFeatureSet().get(e.getKey()); + content.append(getFeatureBits(e.getKey())); + + /* + * if (vs.size()<120) for(Entry<String,Integer> e2 : vs.entrySet()) + * { content.append(e2.getKey()+" ("+e2.getValue()+") "); } + */ + content.append('\n'); + + } + return content.toString(); + } + + static final public long calcs(Data4 d, int b, long v, long l) { + if (l < 0) + return l; + l |= v << d.shift; + d.shift += b; + return l; + } + + static final public short getFeatureBits(String a) { + return (short) m_featureBits.get(a).intValue(); + } + + /** + * Get the integer place holder of the string value v of the type a + * + * @param t + * the type + * @param v + * the value + * @return the integer place holder of v + */ + @Override + final public int getValue(String t, String v) { + + if (m_featureSets.get(t) == null) + return -1; + Integer vi = m_featureSets.get(t).get(v); + if (vi == null) + return -1; // stop && + return vi.intValue(); + } + + /** + * Static version of getValue + * + * @see getValue + */ + static final public int getValueS(String a, String v) { + + if (m_featureSets.get(a) == null) + return -1; + Integer vi = m_featureSets.get(a).get(v); + if (vi == null) + return -1; // stop && + return vi.intValue(); + } + + public int hasValue(String a, String v) { + + Integer vi = m_featureSets.get(a).get(v); + if (vi == null) + return -1; + return vi.intValue(); + } + + final public long calc2(Data4 d) { + + if (d.v0 < 0 || d.v1 < 0) + return -1; + // if (d.v1<0||d.v2<0) return -1; + + long l = d.v0; + short shift = d.a0; + l |= (long) d.v1 << shift; + shift += d.a1; + // l |= (long)d.v2<<shift; + d.shift = shift; + + // d.shift=; + return l; + } + + final public long calc3(Data4 d) { + + if (d.v0 < 0 || d.v1 < 0 || d.v2 < 0) + return -1; + // if (d.v1<0||d.v2<0) return -1; + + long l = d.v0; + short shift = d.a0; + l |= (long) d.v1 << shift; + shift += d.a1; + l |= (long) d.v2 << shift; + d.shift = shift + d.a2; + + // d.shift=; + return l; + } + + final public long calc4(Data4 d) { + if (d.v0 < 0 || d.v1 < 0 || d.v2 < 0 || d.v3 < 0) + return -1; + + long l = d.v0; + int shift = d.a0; + l |= (long) d.v1 << shift; + shift += d.a1; + l |= (long) d.v2 << shift; + shift += d.a2; + l |= (long) d.v3 << shift; + d.shift = shift + d.a3; + + return l; + } + + final public long calc5(Data4 d) { + + if (d.v0 < 0 || d.v1 < 0 || d.v2 < 0 || d.v3 < 0 || d.v4 < 0) + return -1; + + long l = d.v0; + int shift = d.a0; + l |= (long) d.v1 << shift; + shift += d.a1; + l |= (long) d.v2 << shift; + shift += d.a2; + l |= (long) d.v3 << shift; + shift += d.a3; + l |= (long) d.v4 << shift; + d.shift = shift + d.a4; + + return l; + } + + static final public long calc6(Data4 d) { + + if (d.v0 < 0 || d.v1 < 0 || d.v2 < 0 || d.v3 < 0 || d.v4 < 0 || d.v5 < 0) + return -1; + + long l = d.v0; + int shift = d.a0; + l |= (long) d.v1 << shift; + shift += d.a1; + l |= (long) d.v2 << shift; + shift += d.a2; + l |= (long) d.v3 << shift; + shift += d.a3; + l |= (long) d.v4 << shift; + shift += d.a4; + l |= (long) d.v5 << shift; + d.shift = shift + d.a5; + + return l; + } + + final public long calc7(Data4 d) { + + if (d.v0 < 0 || d.v1 < 0 || d.v2 < 0 || d.v3 < 0 || d.v4 < 0 || d.v5 < 0 || d.v6 < 0) + return -1; + + long l = d.v0; + int shift = d.a0; + l |= (long) d.v1 << shift; + shift += d.a1; + l |= (long) d.v2 << shift; + shift += d.a2; + l |= (long) d.v3 << shift; + shift += d.a3; + l |= (long) d.v4 << shift; + shift += d.a4; + l |= (long) d.v5 << shift; + shift += d.a5; + l |= (long) d.v6 << shift; + d.shift = shift + d.a6; + + return l; + } + + final public long calc8(Data4 d) { + + if (d.v0 < 0 || d.v1 < 0 || d.v2 < 0 || d.v3 < 0 || d.v4 < 0 || d.v5 < 0 || d.v6 < 0 || d.v7 < 0) + return -1; + + long l = d.v0; + int shift = d.a0; + l |= (long) d.v1 << shift; + shift += d.a1; + l |= (long) d.v2 << shift; + shift += d.a2; + l |= (long) d.v3 << shift; + shift += d.a3; + l |= (long) d.v4 << shift; + shift += d.a4; + l |= (long) d.v5 << shift; + shift += d.a5; + l |= (long) d.v6 << shift; + shift += d.a6; + l |= (long) d.v7 << shift; + d.shift = shift + d.a7; + + return l; + } + + /** + * Maps a long to a integer value. This is very useful to save memory for + * sparse data long values + * + * @param node + * @return the integer + */ + static public int misses = 0; + static public int good = 0; + + /** + * Write the data + * + * @param dos + * @throws IOException + */ + public void writeData(DataOutputStream dos) throws IOException { + dos.writeInt(getFeatureSet().size()); + for (Entry<String, HashMap<String, Integer>> e : getFeatureSet().entrySet()) { + dos.writeUTF(e.getKey()); + dos.writeInt(e.getValue().size()); + + for (Entry<String, Integer> e2 : e.getValue().entrySet()) { + + if (e2.getKey() == null) + DB.println("key " + e2.getKey() + " value " + e2.getValue() + " e -key " + e.getKey()); + dos.writeUTF(e2.getKey()); + dos.writeInt(e2.getValue()); + + } + + } + } + + public void read(DataInputStream din) throws IOException { + + int size = din.readInt(); + for (int i = 0; i < size; i++) { + String k = din.readUTF(); + int size2 = din.readInt(); + + HashMap<String, Integer> h = new HashMap<String, Integer>(); + getFeatureSet().put(k, h); + for (int j = 0; j < size2; j++) { + h.put(din.readUTF(), din.readInt()); + } + getFeatureCounter().put(k, size2); + } + + calculateBits(); + } + + /** + * Clear the data + */ + static public void clearData() { + getFeatureSet().clear(); + m_featureBits.clear(); + getFeatureSet().clear(); + } + + @Override + public HashMap<String, Integer> getFeatureCounter() { + return m_featureCounters; + } + + static public HashMap<String, HashMap<String, Integer>> getFeatureSet() { + return m_featureSets; + } + + static public String[] reverse(HashMap<String, Integer> v) { + String[] set = new String[v.size()]; + for (Entry<String, Integer> e : v.entrySet()) { + set[e.getValue()] = e.getKey(); + } + return set; + } + +} diff --git a/dependencyParser/experimental/mate-tools/src/is2/data/Open.java b/dependencyParser/experimental/mate-tools/src/is2/data/Open.java new file mode 100755 index 0000000..d9bf0e6 --- /dev/null +++ b/dependencyParser/experimental/mate-tools/src/is2/data/Open.java @@ -0,0 +1,38 @@ +package is2.data; + +final public class Open { + + public float p; + short s, e, label; + byte dir; + + Closed left; + Closed right; + + public Open(short s, short t, short dir, short label, Closed left, Closed right, float p) { + this.s = s; + this.e = t; + this.label = label; + this.dir = (byte) dir; + this.left = left; + this.right = right; + this.p = p; + } + + void create(Parse parse) { + if (dir == 0) { + parse.heads[s] = e; + if (label != -1) + parse.labels[s] = label; + } else { + parse.heads[e] = s; + if (label != -1) + parse.labels[e] = label; + } + if (left != null) + left.create(parse); + if (right != null) + right.create(parse); + } + +} diff --git a/dependencyParser/experimental/mate-tools/src/is2/data/PSTree.java b/dependencyParser/experimental/mate-tools/src/is2/data/PSTree.java new file mode 100644 index 0000000..e916548 --- /dev/null +++ b/dependencyParser/experimental/mate-tools/src/is2/data/PSTree.java @@ -0,0 +1,745 @@ +/** + * + */ +package is2.data; + +import java.util.ArrayList; +import java.util.Collections; + +import is2.util.DB; + +/** + * @author Dr. Bernd Bohnet, 17.01.2011 + * + * + */ +public class PSTree { + + int wordCount = 0; + public String entries[]; + public String lemmas[]; + public int head[]; + public String pos[]; + public int[] ok; + public int non; + public int terminalCount; + public String[] morph; + + public int[] forms; + public int[] phrases; + public int[][] psfeats; + public int[] ppos; + + /** + * @param d + */ + public PSTree(SentenceData09 d) { + create(d.length() - 1, d.length() * 20); + for (int i = 1; i < d.length(); i++) { + entries[i - 1] = d.forms[i]; + pos[i - 1] = d.ppos[i]; + } + } + + /** + * Create an undefined phrase tree + */ + public PSTree() { + } + + /** + * @param terminals + * @param nonTerminals + */ + public void create(int terminals, int nonTerminals) { + entries = new String[terminals + nonTerminals]; + pos = new String[terminals + nonTerminals]; + head = new int[terminals + nonTerminals]; + lemmas = new String[terminals + nonTerminals]; + morph = new String[terminals + nonTerminals]; + non = terminals; + wordCount = terminals; + + for (int i = terminals + 1; i < head.length; i++) + head[i] = -1; + } + + @Override + public String toString() { + + StringBuffer s = new StringBuffer(); + + for (int i = 0; i < entries.length; i++) { + if (head[i] == -1 && entries[i] == null) + break; + + s.append(i + "\t" + pos[i] + "\t" + entries[i] + "\t" + head[i] + (ok == null ? "" : ("\t" + (ok[i] == 1))) + + " \n"); + + } + // DB.println("entries "+entries.length); + return s.toString(); + } + + /** + * @return + */ + public boolean containsNull() { + for (int k = 0; k < wordCount - 1; k++) { + if (entries[k] == null) + return true; + } + return false; + } + + public int equals(SentenceData09 s) { + + int j = 1; // starts with root + for (int i = 0; i < terminalCount - 1; i++) { + + // if (s.forms[j].equals("erschrekkend")) s.forms[j]="erschreckend"; + + if (s.forms.length < j) { + DB.println("" + s + " " + this.toString()); + return i; + + } + + if (!entries[i].equals(s.forms[j])) { + // System.out.println("ps "+entries[i]+" != ds "+s.forms[j]); + // Rolls-Royce + if (entries[i].startsWith(s.forms[j]) && s.forms.length > i + 2 && s.forms[j + 1].equals("-")) { + j += 2; + if (entries[i].contains(s.forms[j - 1]) && s.forms.length > i + 3 && s.forms[j + 1].equals("-")) { + j += 2; // && + // System.out.println("s.forms[j] "+s.forms[j]+" + // s.forms[j-1] "+s.forms[j-1]+" "+entries[i]); + if (entries[i].contains(s.forms[j - 1]) && s.forms.length > i + 3 + && s.forms[j + 1].equals("-")) { + j += 2; // && + // System.out.println("s.forms[j] "+s.forms[j]+" + // s.forms[j-1] "+s.forms[j-1]+" "+entries[i]); + } + } + // Interstate\/Johnson + } else if (entries[i].startsWith(s.forms[j]) && s.forms.length > i + 2 && s.forms[j + 1].equals("/")) { + j += 2; + if (entries[i].contains(s.forms[j - 1]) && s.forms.length > i + 3 && s.forms[j + 1].equals("/")) { + j += 2; // && + // System.out.println("s.forms[j] "+s.forms[j]+" + // s.forms[j-1] "+s.forms[j-1]+" "+entries[i]); + } + + // U.S.-Japan -> U . S . - Japan + } else if (entries[i].startsWith(s.forms[j]) && s.forms.length > i + 2 && s.forms[j + 1].equals(".")) { + j += 2; + if (entries[i].contains(s.forms[j - 1]) && s.forms.length > i + 3 && s.forms[j + 1].equals(".")) { + j += 2; // && + // System.out.println("s.forms[j] "+s.forms[j]+" + // s.forms[j-1] "+s.forms[j-1]+" "+entries[i]); + } + } else if (entries[i].startsWith(s.forms[j]) && s.forms.length > i + 1 && s.forms[j + 1].equals("'S")) { + j += 1; + + } else { + + // chech those !!! + // System.out.print("entry "+entries[i]+" form + // "+s.forms[j]+" "); + return j; + } + + } + j++; + + } + + // without root + return s.length(); + // return j; + + } + + /** + * @param dn + * @return + */ + public int getPS(int dn) { + + return this.head[dn - 1]; + } + + /** + * @param dn + * @param n + * @param commonHead + * the common head in the phrase structure + * @return + */ + public String getChain(int dn, int n, int commonHead) { + + int pdn = dn - 1; + // int phraseHead =head[pdh]; + + // System.out.println("phrase head "+phraseHead+" common head + // "+commonHead); + + int[] ch = new int[20]; + int head = this.head[pdn]; + int i = 0; + ch[i++] = head; + while (commonHead != head && head != 0) { + + head = this.head[head]; + ch[i++] = head; + } + StringBuffer chain = new StringBuffer(); + + for (int k = 0; k < i; k++) { + chain.append(entries[ch[k]]).append(" "); + } + return chain.toString(); + } + + /** + * @param dn + * @param n + * @return + */ + public int getCommonHead(int d, int dh) { + int pdh = this.getPS(dh), pd = this.getPS(d); + + ArrayList<Integer> path2root = getPath2Root(pdh); + + // System.out.println("path 2 root "+path2root+" pdh "+pdh); + + for (int n : path2root) { + int candidateHead = pd; + while (candidateHead != 0 && candidateHead != -1) { + if (n == candidateHead) + return n; + candidateHead = this.head[candidateHead]; + } + } + return -1; + } + + /** + * @param pdh + */ + private ArrayList<Integer> getPath2Root(int pdh) { + ArrayList<Integer> path = new ArrayList<Integer>(); + + // restrict the number in case its a cycle which should never be + for (int k = 0; k < 100; k++) { + if (pdh == -1) + break; + path.add(pdh); + pdh = this.head[pdh]; + if (pdh == 0) + break; + } + return path; + } + + /** + * Get operations to create root see operation in method getOperation + * + * @param pr + */ + public String getOperationRoot(int pr) { + + StringBuffer o = new StringBuffer(); + int h = pr; + int[] path = new int[10]; + // System.out.println(" start node "+pr); + int k = 0; + for (; k < 10; k++) { + h = head[h]; + if (h == -1) { + break; + } + path[k] = h; + if (h == 0) { + break; + } + + } + k -= 2; + + boolean first = true; + for (; k >= 0; k--) { + + // create phrase + if (first) { + o.append("c:").append(entries[path[k]]); + first = false; + } + + // insert and create phrase + else { + o.append(":ci:").append(entries[path[k]]); + } + } + + // insert dependent node + // if (o.length()>0) + o.append(":in:d"); + // else o.append("in:d"); // insert root into nothing + return o.toString(); + } + + /** + * Create operation to include dependency edges in phrase structure + * Operations: c - create ; i - insert ; in - insert (dependent) node ; up:X + * go the (phrase) X up ci create and insert ... + * + * @param dn + * @param n + * @param commonHead + * @return + */ + public String getOperation(int dn, int n, int commonHead) { + + StringBuffer o = new StringBuffer(); + + // from n move up to common head, if needed + int ph = n - 1, pd = dn - 1; + + int[] path = new int[20]; + int h = ph; + + boolean nth = false; + for (int k = 0; k < 10; k++) { + h = head[h]; + path[k] = h; + if (nth) + o.append(':'); + o.append("up:" + entries[h]); + nth = true; + if (h == commonHead) + break; + } + + // from common head to the node + int k = 0; + h = pd; + for (; k < 10; k++) { + h = head[h]; + path[k] = h; + if (h == commonHead) { + break; + } + + } + k -= 1; + + // boolean first=true; + for (; k >= 0; k--) { + + // create phrase + if (!nth) { + o.append("ci:").append(entries[path[k]]); + nth = true; + } + + // insert and create phrase + else { + o.append(":ci:").append(entries[path[k]]); + } + } + + // insert dependent node + o.append(":in:d"); + + return o.toString(); + } + + /** + * @param ph + * node in the phrase structure corresponding to the head in the + * dependency structure + * @param pt + * node in the prhase structure corresponding to the dependent in + * the ds. + * @param check + * @return rules was applicable + */ + public boolean exec(String r, int ph, int pt, boolean check) { + + String o[] = r.split(":"); + + int last = -1, headP = -1; + + // create root node + + // System.out.println("operation "+r+" "+ph+" "+pt); + boolean done = true; + for (int i = 0; i < o.length; i++) { + + if (o[i].equals("c")) { + if (check) + return true; + + if (ph < 0) { + last = non++; + } + + entries[non] = o[++i]; // create + head[pt] = non; + head[non] = last; // insert into root + last = non++; + } else if (o[i].equals("ci")) { + if (check) + return true; + entries[non] = o[++i]; // create + head[non] = last; // insert + last = non; + non++; + } else if (o[i].equals("in") && o[i + 1].equals("d")) { + if (check) + return true; + head[pt] = last; // insert + i++; // move forward because of 'd' + } else if (o[i].equals("up")) { + + if (ph == -1) { + // System.out.println("ph is -1 please check this "+ph+" + // there is a bug "); + return false; + } + + if (headP == -1) + headP = head[ph]; + else + headP = head[headP]; + + try { + if (headP == -1 || entries[headP] == null || !entries[headP].equals(o[i + 1])) + return false; + + } catch (Exception e) { + e.printStackTrace(); + System.out.println( + "" + entries[headP] + " o[i+1] " + o[i + 1] + " " + headP + " " + this.terminalCount); + // System.out.println(""+ this.toString()); + System.exit(0); + } + + i++; + last = headP; + } else { + done = false; + } + + } + + return done; + } + + /** + * More tolerant mapping + * + * @param ph + * node in the phrase structure corresponding to the head in the + * dependency structure + * @param pt + * node in the prhase structure corresponding to the dependent in + * the ds. + * @param check + * @return rules was applicable + */ + public boolean execT(String r, int ph, int pt, boolean check) { + + String o[] = r.split(":"); + + int last = -1, headP = -1; + + int up = 0; + + boolean done = true; + for (int i = 0; i < o.length; i++) { + + if (o[i].equals("c")) { + if (check) + return true; + + // create root node + if (ph < 0) { + last = non++; + } + + entries[non] = o[++i]; // create + head[pt] = non; + head[non] = last; // insert into root + last = non++; + } else if (o[i].equals("ci")) { + + if (check) + return true; + entries[non] = o[++i]; // create + head[non] = last; // insert + last = non; + non++; + } else if (o[i].equals("in") && o[i + 1].equals("d")) { + if (check) + return true; + + // DB.println("hallo"); + + if (last != -1) + head[pt] = last; // insert + + // i am not sure if this does much good? + + // if (last ==-1) + + // done=true; + + i++; // move forward because of 'd' + + } else if (o[i].equals("up")) { + up++; + if (ph == -1) { + return false; + } + + if (headP == -1) + headP = head[ph]; + else + headP = head[headP]; + + try { + + // tolerant mapping + if (headP == -1 || entries[headP] == null || ((!entries[headP].equals(o[i + 1])) && up > 1)) + return false; // >1 + // && entries[headP].charAt(0)!=o[i+1].charAt(0) + } catch (Exception e) { + e.printStackTrace(); + System.out.println( + "" + entries[headP] + " o[i+1] " + o[i + 1] + " " + headP + " " + this.terminalCount); + } + + i++; + last = headP; + } else { + done = false; + } + + } + + return done; + } + + public final static boolean INSERT_NEWLINE = true; + + /** + * Convert to bracket format + * + * @param newLine + * @return + */ + public String toPennBracket(boolean newLine) { + + StringBuffer b = new StringBuffer(); + ArrayList<Integer> current = null;// = new ArrayList<Integer>(); + int open = 0; + for (int i = 0; i < terminalCount; i++) { + ArrayList<Integer> path = getPathToRoot(i); + + ArrayList<Integer> diff = getDiffPath(path, current); + + boolean spaces = false; + + ArrayList<Integer> common = this.getDiffCommon(path, current); + + if (current != null && (current.size() > common.size())) { + + // close brackets + for (int bc = 0; bc < current.size() - common.size(); bc++) { + b.append(")"); + open--; + } + if (diff.size() == 0 && newLine) + b.append("\n"); + spaces = true; + } + + if (i != 0 && diff.size() > 0 && newLine) + b.append("\n").append(createSpaces(open)); + + for (int k = diff.size() - 1; k >= 0; k--) { + open++; + b.append("(" + (entries[path.get(k)] == null ? " " : entries[path.get(k)])); + if (k != 0 && path.size() - 1 != k && newLine) + b.append("\n").append(createSpaces(open)); + spaces = false; + } + if (spaces) + b.append(createSpaces(open)); + else + b.append(" "); + + String term = entries[i]; + if (term.equals("(")) + term = "-LRB-"; + if (term.equals(")")) + term = "-RRB-"; + if (term.equals("{")) + term = "-LCB-"; + if (term.equals("}")) + term = "-RCB-"; + + String ps = pos[i]; + if (ps.equals("(")) + ps = "-LRB-"; + if (ps.equals("$(")) + ps = "-LRB-"; + + if (ps.equals(")")) + ps = "-RRB-"; + if (ps.equals("{")) + ps = "-LCB-"; + if (ps.equals("}")) + ps = "-RCB-"; + + b.append("(").append(ps).append(" ").append(term).append(')'); + current = path; + // break; + } + for (; open > 0; open--) { + b.append(")"); + } + // b.append("\n"); + + return b.toString(); + } + + static int cnt = 0; + + /** + * @param path + * @param current + * @return + */ + private ArrayList<Integer> getDiffPath(ArrayList<Integer> path, ArrayList<Integer> current) { + if (current == null) + return path; + + ArrayList<Integer> common = new ArrayList<Integer>(); + + int pindex = path.size() - 1; + int cindex = current.size() - 1; + + while (cindex >= 0 && pindex >= 0) { + + if (path.get(pindex) == current.get(cindex)) { + cindex--; + pindex--; + } else + break; + } + + for (int k = 0; k <= pindex; k++) { + common.add(path.get(k)); + } + + return common; + } + + private ArrayList<Integer> getDiffCommon(ArrayList<Integer> path, ArrayList<Integer> current) { + if (current == null) + return path; + + ArrayList<Integer> common = new ArrayList<Integer>(); + + int pindex = path.size() - 1; + int cindex = current.size() - 1; + + while (cindex >= 0 && pindex >= 0) { + + if (path.get(pindex) == current.get(cindex)) { + common.add(path.get(pindex)); + cindex--; + pindex--; + } else + break; + } + + Collections.reverse(common); + // System.out.println("common "+pindex+" "+common); + + return common; + } + + /** + * @param i + * @return + */ + private StringBuffer createSpaces(int i) { + StringBuffer s = new StringBuffer(); + for (int k = 0; k < i; k++) + s.append(" "); + return s; + } + + /** + * @param i + * @return + */ + private ArrayList<Integer> getPathToRoot(int i) { + + ArrayList<Integer> path = new ArrayList<Integer>(); + + int h = i; + while (true) { + h = this.head[h]; + if (h < this.terminalCount || path.contains(h)) + break; + path.add(h); + } + + // Collections.reverse(list) + + return path; + } + + public String conll09() { + + StringBuilder s = new StringBuilder(); + for (int i = 0; i < this.terminalCount; i++) { + if (head[i] == -1 && entries[i] == null) + break; + + s.append((i + 1)).append('\t').append(entries[i]).append("\t_\t_\t").append(pos[i]) + .append("\t_\t_\t_\t_\t_\t_\t_\t_\n"); + + } + + return s.toString(); + } + + /** + * @param phead + * @return + */ + public int[] getChilds(int head) { + + int count = 0; + for (int i = 0; i < this.entries.length; i++) { + if (this.head[i] == head) + count++; + } + + int[] clds = new int[count]; + count = 0; + for (int i = 0; i < this.entries.length; i++) { + if (this.head[i] == head) + clds[count++] = i; + } + + return clds; + } + +} diff --git a/dependencyParser/experimental/mate-tools/src/is2/data/Parameter.java b/dependencyParser/experimental/mate-tools/src/is2/data/Parameter.java new file mode 100644 index 0000000..7b1f870 --- /dev/null +++ b/dependencyParser/experimental/mate-tools/src/is2/data/Parameter.java @@ -0,0 +1,13 @@ +/** + * + */ +package is2.data; + +/** + * @author Dr. Bernd Bohnet, 23.12.2010 + * + * + */ +public class Parameter { + +} diff --git a/dependencyParser/experimental/mate-tools/src/is2/data/ParametersFloat.java b/dependencyParser/experimental/mate-tools/src/is2/data/ParametersFloat.java new file mode 100755 index 0000000..17837ef --- /dev/null +++ b/dependencyParser/experimental/mate-tools/src/is2/data/ParametersFloat.java @@ -0,0 +1,181 @@ +package is2.data; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; + +import is2.util.DB; + +final public class ParametersFloat { + + public float[] parameters; + public float[] total; + + public ParametersFloat(int size) { + + parameters = new float[size]; + total = new float[size]; + for (int i = 0; i < parameters.length; i++) { + parameters[i] = 0F; + total[i] = 0F; + } + } + + /** + * @param parameters2 + */ + public ParametersFloat(float[] p) { + parameters = p; + } + + public void average(double avVal) { + for (int j = 0; j < total.length; j++) { + parameters[j] = total[j] / ((float) avVal); + } + total = null; + } + + public ParametersFloat average2(double avVal) { + float[] px = new float[this.parameters.length]; + for (int j = 0; j < total.length; j++) { + px[j] = total[j] / ((float) avVal); + } + ParametersFloat pf = new ParametersFloat(px); + return pf; + } + + public void update(FV pred, FV act, float upd, float err) { + + float lam_dist = act.getScore(parameters, false) - pred.getScore(parameters, false); + float loss = err - lam_dist; + + FV dist = act.getDistVector(pred); + + float alpha; + float A = dist.dotProduct(dist); + if (A <= 0.0000000000000001) + alpha = 0.0f; + else + alpha = loss / A; + + // alpha = Math.min(alpha, 0.00578125F); + + dist.update(parameters, total, alpha, upd, false); + + } + + public void update(FV pred, FV act, float upd, float err, float C) { + + float lam_dist = act.getScore(parameters, false) - pred.getScore(parameters, false); + float loss = err - lam_dist; + + FV dist = act.getDistVector(pred); + + float alpha; + float A = dist.dotProduct(dist); + if (A <= 0.0000000000000001) + alpha = 0.0f; + else + alpha = loss / A; + + alpha = Math.min(alpha, C); + + dist.update(parameters, total, alpha, upd, false); + + } + + public double update(FV a, double b) { + + double A = a.dotProduct(a); + if (A <= 0.0000000000000000001) + return 0.0; + return b / A; + } + + public double getScore(FV fv) { + if (fv == null) + return 0.0F; + return fv.getScore(parameters, false); + + } + + final public void write(DataOutputStream dos) throws IOException { + + dos.writeInt(parameters.length); + for (float d : parameters) + dos.writeFloat(d); + + } + + public void read(DataInputStream dis) throws IOException { + + parameters = new float[dis.readInt()]; + int notZero = 0; + for (int i = 0; i < parameters.length; i++) { + parameters[i] = dis.readFloat(); + if (parameters[i] != 0.0F) + notZero++; + } + + DB.println("read parameters " + parameters.length + " not zero " + notZero); + + } + + public int countNZ() { + + int notZero = 0; + for (float parameter : parameters) { + if (parameter != 0.0F) + notZero++; + } + return notZero; + + } + + public F2SF getFV() { + return new F2SF(parameters); + } + + public int size() { + return parameters.length; + } + + public void update(FVR act, FVR pred, Instances isd, int instc, Parse dx, double upd, double e, float lam_dist) { + + e++; + + float b = (float) e - lam_dist; + + FVR dist = act.getDistVector(pred); + + dist.update(parameters, total, hildreth(dist, b), upd, false); + } + + public void update(FVR pred, FVR act, float upd, float e) { + + e++; + float lam_dist = act.getScore(parameters, false) - pred.getScore(parameters, false); + + float b = e - lam_dist; + + FVR dist = act.getDistVector(pred); + + dist.update(parameters, total, hildreth(dist, b), upd, false); + } + + protected double hildreth(FVR a, double b) { + + double A = a.dotProduct(a); + if (A <= 0.0000000000000000001) + return 0.0; + return b / A; + } + + public float getScore(FVR fv) { // xx + if (fv == null) + return 0.0F; + return fv.getScore(parameters, false); + + } + +} diff --git a/dependencyParser/experimental/mate-tools/src/is2/data/Parse.java b/dependencyParser/experimental/mate-tools/src/is2/data/Parse.java new file mode 100755 index 0000000..aa24005 --- /dev/null +++ b/dependencyParser/experimental/mate-tools/src/is2/data/Parse.java @@ -0,0 +1,157 @@ +package is2.data; + +import java.util.BitSet; + +public class Parse implements Comparable<Parse> { + + public short[] heads; + public short[] labels; + public double f1; + + public Parse() { + } + + public Parse(int i) { + heads = new short[i]; + labels = new short[i]; + + } + + /** + * @param heads2 + * @param types2 + * @param p_new + */ + public Parse(short[] heads2, short[] types2, float p_new) { + this.heads = new short[heads2.length]; + this.labels = new short[types2.length]; + // this.heads=heads2; + // this.labels=types2; + System.arraycopy(heads2, 0, heads, 0, heads.length); + System.arraycopy(types2, 0, labels, 0, labels.length); + f1 = p_new; + + } + + /** + * @param heads2 + * @param types2 + * @param p_new + */ + public Parse(String parse, float p_new) { + + // this(parse.length()/2); + + signature2parse(parse); + + f1 = p_new; + + } + + public void signature2parse(String parse) { + int p = 0; + heads = new short[parse.length() / 2]; + labels = new short[heads.length]; + // DB.println("pl "+parse.length()); + for (int k = 0; k < heads.length; k++) { + heads[k] = (short) parse.charAt(p++); + labels[k] = (short) parse.charAt(p++); + } + } + + @Override + public Parse clone() { + Parse p = new Parse(); + p.heads = new short[heads.length]; + p.labels = new short[labels.length]; + + System.arraycopy(heads, 0, p.heads, 0, heads.length); + System.arraycopy(labels, 0, p.labels, 0, labels.length); + + p.f1 = f1; + + return p; + } + + /** + * Check if it is a tree + * + * @return + */ + public boolean checkTree() { + + BitSet set = new BitSet(heads.length); + set.set(0); + return checkTree(set, 0); + + } + + /** + * @param set + * @return + */ + private boolean checkTree(BitSet set, int h) { + // System.out.print(" h "+h); + + for (int i = 0; i < heads.length; i++) { + if (heads[i] == h) { + // System.out.print(" "+i); + if (!set.get(i)) + checkTree(set, i); + set.set(i); + + } + } + + for (int i = 0; i < heads.length; i++) { + if (!set.get(i)) + return false; + } + return true; + } + + @Override + public String toString() { + StringBuilder b = new StringBuilder(); + for (int k = 0; k < this.heads.length; k++) { + b.append(k).append(" ").append(heads[k] + " ").append(this.labels[k]).append("\n"); + } + return b.toString(); + } + + /* + * (non-Javadoc) + * + * @see java.lang.Comparable#compareTo(java.lang.Object) + */ + @Override + public int compareTo(Parse o) { + + if (f1 == o.f1) + return this.signature().compareTo(o.signature()); + return f1 < o.f1 ? 1 : f1 == o.f1 ? 0 : -1; + } + + /** + * @return the signature of a parse + */ + public String signature() { + StringBuilder b = new StringBuilder(heads.length * 2); + for (int k = 0; k < heads.length; k++) { + b.append((char) heads[k]).append((char) labels[k]); + } + return b.toString(); + } + + /** + * @return the signature of a parse + */ + public StringBuilder signatureSB() { + StringBuilder b = new StringBuilder(heads.length * 2); + for (int k = 0; k < heads.length; k++) { + b.append((char) heads[k]).append((char) labels[k]); + } + return b; + } + +} diff --git a/dependencyParser/experimental/mate-tools/src/is2/data/ParseNBest.java b/dependencyParser/experimental/mate-tools/src/is2/data/ParseNBest.java new file mode 100644 index 0000000..cb02b71 --- /dev/null +++ b/dependencyParser/experimental/mate-tools/src/is2/data/ParseNBest.java @@ -0,0 +1,103 @@ +package is2.data; + +final public class ParseNBest extends Parse { + + private String signature = null; + + // public float[] scores; + + public ParseNBest() { + } + + public ParseNBest(short[] heads2, short[] types2, float p_new) { + super(heads2, types2, p_new); + } + + public ParseNBest(int i) { + super(i); + } + + /** + * @param sig + * @param readFloat + */ + public ParseNBest(String sig, float score) { + super(sig, score); + } + + /** + * create a total order to provide replicable deterministic results + * + * @param o + * @return + */ + public int compareTo(ParseNBest o) { + if (f1 < o.f1) + return 1; + if (f1 == o.f1) { + if (signature == null) + signature = signature(); + if (o.signature == null) + o.signature = o.signature(); + return o.signature.compareTo(signature); + + } + return -1; + } + + /** + * @return the signature of a parse + */ + @Override + public String signature() { + if (signature != null) + return signature; + signature = super.signature(); + return signature; + } + + /** + * @return the signature of a parse + */ + public String signature(short[] heads, short[] labels) { + StringBuilder b = new StringBuilder(heads.length * 2); + for (int k = 0; k < heads.length; k++) { + b.append((char) heads[k]).append((char) labels[k]); + } + signature = b.toString(); + return signature; + } + + /** + * @param heads + * @param types + * @param oldP + * @param ch + * @param s + */ + public String signature(short[] heads, short[] types, short p, short ch, short l) { + StringBuilder b = new StringBuilder(heads.length * 2); + for (int k = 0; k < heads.length; k++) { + + b.append(k == ch ? (char) p : (char) heads[k]).append(k == ch ? (char) l : (char) types[k]); + } + signature = b.toString(); + return signature; + + } + + @Override + public Parse clone() { + ParseNBest p = new ParseNBest(); + p.heads = new short[heads.length]; + p.labels = new short[labels.length]; + + System.arraycopy(heads, 0, p.heads, 0, heads.length); + System.arraycopy(labels, 0, p.labels, 0, labels.length); + + p.f1 = f1; + + return p; + } + +} diff --git a/dependencyParser/experimental/mate-tools/src/is2/data/PipeGen.java b/dependencyParser/experimental/mate-tools/src/is2/data/PipeGen.java new file mode 100755 index 0000000..728666f --- /dev/null +++ b/dependencyParser/experimental/mate-tools/src/is2/data/PipeGen.java @@ -0,0 +1,83 @@ +package is2.data; + +public class PipeGen { + + public static final String SENSE = "SENSE", POS = "POS", DIST = "DIST", WORD = "WORD", PRED = "PRED", ARG = "ARG", + FEAT = "F", REL = "REL", TYPE = "TYPE", CHAR = "C", FFEATS = "FF", DIR = "DIR", LA = "LA", RA = "RA"; + + public static final String GPOS = "GPOS", MID = "MID", END = "END", STR = "STR", FM = "FM", NOFEAT = "NOFEAT"; + + public static final String _0 = "0", _4 = "4", _3 = "3", _2 = "2", _1 = "1", _5 = "5", _10 = "10"; + + static public int outValue(int num1, int del) { + String out = "" + num1; + StringBuffer delS = new StringBuffer(); + for (int k = 0; k < del; k++) + delS.append('\b'); + del = out.length(); + System.out.print(delS + out); + return del; + } + + static public int outValue(int num1, int del, long last) { + String out = "" + num1 + " (" + (System.currentTimeMillis() - last) / (num1 + 1) + " ms/instance)"; + StringBuffer delS = new StringBuffer(); + for (int k = 0; k < del; k++) + delS.append('\b'); + del = out.length(); + System.out.print(delS + out); + return del; + } + + static public int outValueErr(int num1, float err, float f1, int del, long last) { + + String out = "" + num1 + " (" + (System.currentTimeMillis() - last) / (num1 + 1) + " ms/instance " + + (err / num1) + " err/instance f1=" + f1 + ") "; + StringBuffer delS = new StringBuffer(); + for (int k = 0; k < del; k++) + delS.append('\b'); + del = out.length(); + System.out.print(delS + out); + return del; + } + + static public int outValueErr(int num1, float err, float f1, int del, long last, double upd) { + String out = "" + num1 + " (" + (System.currentTimeMillis() - last) / (num1 + 1) + " ms/instance " + + (err / num1) + " err/instance f1=" + f1 + ") upd " + upd; + StringBuffer delS = new StringBuffer(); + for (int k = 0; k < del; k++) + delS.append('\b'); + del = out.length(); + System.out.print(delS + out); + return del; + } + + static public int outValueErr(int num1, float err, float f1, int del, long last, double upd, String info) { + String out = "" + num1 + " (" + (System.currentTimeMillis() - last) / (num1 + 1) + " ms/instance " + + (err / num1) + " err/instance f1=" + f1 + ") upd " + upd + " " + info; + StringBuffer delS = new StringBuffer(); + for (int k = 0; k < del; k++) + delS.append('\b'); + del = out.length(); + System.out.print(delS + out); + return del; + } + + /** + * @param cnt + * @param l + * @return + */ + public static String getSecondsPerInstnace(int cnt, long l) { + return " " + (l / (cnt * 1000f)) + " seconds/sentnece "; + } + + /** + * @param l + * @return + */ + public static String getUsedTime(long l) { + return "Used time " + ((l) / 1000f) + " seconds "; + } + +} diff --git a/dependencyParser/experimental/mate-tools/src/is2/data/PrimeFinder.java b/dependencyParser/experimental/mate-tools/src/is2/data/PrimeFinder.java new file mode 100644 index 0000000..fab0901 --- /dev/null +++ b/dependencyParser/experimental/mate-tools/src/is2/data/PrimeFinder.java @@ -0,0 +1,51 @@ +/** + * + */ +package is2.data; + +import java.util.Arrays; + +/** + * @author Dr. Bernd Bohnet, 13.05.2010 + * + * + */ +public class PrimeFinder { + + public PrimeFinder() { + } + + public static final int nextPrime(int desiredCapacity) { + int i = Arrays.binarySearch(primeCapacities, desiredCapacity); + if (i < 0) + i = -i - 1; + return primeCapacities[i]; + } + + public static final int largestPrime = 2147483647; + private static final int primeCapacities[] = { 2147483647, 5, 11, 23, 47, 97, 197, 397, 797, 1597, 3203, 6421, + 12853, 25717, 51437, 102877, 205759, 411527, 823117, 1646237, 3292489, 6584983, 13169977, 26339969, + 52679969, 105359939, 210719881, 421439783, 842879579, 1685759167, 433, 877, 1759, 3527, 7057, 14143, 28289, + 56591, 113189, 226379, 452759, 905551, 1811107, 3622219, 7244441, 14488931, 28977863, 57955739, 115911563, + 231823147, 463646329, 927292699, 1854585413, 953, 1907, 3821, 7643, 15287, 30577, 61169, 122347, 244703, + 489407, 978821, 1957651, 3915341, 7830701, 15661423, 31322867, 62645741, 125291483, 250582987, 501165979, + 1002331963, 2004663929, 1039, 2081, 4177, 8363, 16729, 33461, 66923, 133853, 267713, 535481, 1070981, + 2141977, 4283963, 8567929, 17135863, 34271747, 68543509, 137087021, 274174111, 548348231, 1096696463, 31, + 67, 137, 277, 557, 1117, 2237, 4481, 8963, 17929, 35863, 71741, 143483, 286973, 573953, 1147921, 2295859, + 4591721, 9183457, 18366923, 36733847, 73467739, 146935499, 293871013, 587742049, 1175484103, 599, 1201, + 2411, 4831, 9677, 19373, 38747, 77509, 155027, 310081, 620171, 1240361, 2480729, 4961459, 9922933, 19845871, + 39691759, 79383533, 158767069, 317534141, 635068283, 1270136683, 311, 631, 1277, 2557, 5119, 10243, 20507, + 41017, 82037, 164089, 328213, 656429, 1312867, 2625761, 5251529, 10503061, 21006137, 42012281, 84024581, + 168049163, 336098327, 672196673, 1344393353, 3, 7, 17, 37, 79, 163, 331, 673, 1361, 2729, 5471, 10949, + 21911, 43853, 87719, 175447, 350899, 701819, 1403641, 2807303, 5614657, 11229331, 22458671, 44917381, + 89834777, 179669557, 359339171, 718678369, 1437356741, 43, 89, 179, 359, 719, 1439, 2879, 5779, 11579, + 23159, 46327, 92657, 185323, 370661, 741337, 1482707, 2965421, 5930887, 11861791, 23723597, 47447201, + 94894427, 189788857, 379577741, 759155483, 1518310967, 379, 761, 1523, 3049, 6101, 12203, 24407, 48817, + 97649, 195311, 390647, 781301, 1562611, 3125257, 6250537, 12501169, 25002389, 50004791, 100009607, + 200019221, 400038451, 800076929, 1600153859 }; + + static { + Arrays.sort(primeCapacities); + } + +} diff --git a/dependencyParser/experimental/mate-tools/src/is2/data/RandomIndex.java b/dependencyParser/experimental/mate-tools/src/is2/data/RandomIndex.java new file mode 100644 index 0000000..8ab61e9 --- /dev/null +++ b/dependencyParser/experimental/mate-tools/src/is2/data/RandomIndex.java @@ -0,0 +1,150 @@ +/** + * + */ +package is2.data; + +import is2.util.DB; + +/** + * @author Dr. Bernd Bohnet, 20.05.2011 + * + * + */ +public class RandomIndex implements Long2IntInterface { + + final int[] prims = { 52349171, 199951347, 89990, 5001, 32891, 17, 19, 23, 29, 31, 37, 47, 53, 59, 61, 67, 71 }; + // final int[] prims = {1,3,5,7,11,17,19,23,29,31,37,47,53,59,61,67,71}; + + final long hashFunctionModifiers[]; + + final int kbit, lbit; + final int hsize; // maximal size of hash + + final int bits; // available bits + final int moves; // needed moves to put a number into + + /** + * Creates the random functions. + * + * @param kbit + * The bits to be mapped + * @param lbit + * The left shift of the bits + * @param hsize + * The size of the featurs space (not included in the original + * algorithm) + * @param numberFunctions + * The number of the hash functions + */ + public RandomIndex(int kbit, int lbit, int hsize, int numberFunctions) { + + this.kbit = kbit; + this.lbit = lbit; + + if (hsize <= 0) + this.hsize = 67000001; // default value + else + this.hsize = hsize; + + bits = (int) Math.ceil(Math.log(this.hsize) / Math.log(2)); + + moves = (int) Math.ceil(64f / bits); + + DB.println("moves " + moves + " bits " + bits + " hsize " + hsize); + + hashFunctionModifiers = new long[numberFunctions]; + + for (int f = 0; f < numberFunctions; f++) + hashFunctionModifiers[f] = prims[f]; + } + + public int[] hash(long x) { + int[] hvals = new int[hashFunctionModifiers.length]; + + for (int k = 0; k < hashFunctionModifiers.length; k++) { + + // the original function: value = ((x+1) * hashFunctionModifiers[k] + // & m ) >> n; + + // the first part of the original function + long value = (x + 1) * hashFunctionModifiers[k]; + + // do the above >> n with a maximal size of the available hash + // values + // Shift all bits until they have been each xor-ed (^) in the range + // of the hash + // in order the have all information potentially represented there. + + for (int j = 1; j <= moves; j++) + value = value ^ (value >> (bits * j)); + + // Map the value to the range of the available space should be the + // same as (value & m) . + hvals[k] = Math.abs((int) value % hsize); + } + return hvals; + } + + public int[] hashU(long x) { + int[] hvals = new int[hashFunctionModifiers.length]; + + long y = Long.reverse(x); + for (int k = 0; k < hashFunctionModifiers.length; k++) { + + // the original function: value = ((x+1) * hashFunctionModifiers[k] + // & m ) >> n; + + // the first part of the original function + long value1 = (((y + 1) * hashFunctionModifiers[k]) /* % 2 pow 64 */ ) >> (kbit - lbit); + + // I get probably only the first part lets get the second part too + // long value2 = (((y+1>>20) * hashFunctionModifiers[k]) /* % 2 pow + // 64 */ ) >> (kbit-lbit); + + // the modulo (%) 2 pow 64 is done since the long number can not be + // larger than 2 pow 64. + // System.out.println("value "+value+" shift "+(lbit-kbit)); + hvals[k] = Math.abs((int) value1); + } + return hvals; + } + + /* + * (defun generate-hash-fn (&key (k-bit 32) (l-bit 8) verbosep constants + * (count 4)) + * + * (labels ((random-constant () (let ((a (+ (random (- (expt 2 k-bit) 1)) + * 1))) (logior a 1)))) ;; inclusive OR ensures odd number. (let ((pdiff (- + * (- k-bit l-bit)));; neg. sign to do a rightshift, see ash() (sub1 (- + * (expt 2 k-bit) 1)) (constants (copy-list constants))) (unless constants + * (loop ;; a = odd number a where 0 < a < u. until (= count (length + * constants)) do (pushnew (random-constant) constants))) (when verbosep + * (format t "~&generate-hash-fn(): using random constants: ~a~%" + * constants)) (values #'(lambda (x) (loop for a in constants ;;; always add + * 1 to x to avoid f(0)=0. collect (ash (logand (* (+ 1 x) a) sub1) pdiff))) + * constants)))) + * + */ + + /* + * (non-Javadoc) + * + * @see is2.data.Long2IntInterface#l2i(long) + */ + @Override + public int l2i(long l) { + // TODO Auto-generated method stub + return 0; + } + + /* + * (non-Javadoc) + * + * @see is2.data.Long2IntInterface#size() + */ + @Override + public int size() { + return hsize; + } + +} diff --git a/dependencyParser/experimental/mate-tools/src/is2/data/SentenceData09.java b/dependencyParser/experimental/mate-tools/src/is2/data/SentenceData09.java new file mode 100755 index 0000000..386fa39 --- /dev/null +++ b/dependencyParser/experimental/mate-tools/src/is2/data/SentenceData09.java @@ -0,0 +1,530 @@ +package is2.data; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; +import java.io.ObjectInputStream; +import java.io.StringWriter; +import java.util.ArrayList; + +import is2.io.CONLLWriter09; +import is2.io.IOGenerals; + +public class SentenceData09 { + + public String[] id; + public String[] forms; + + public String[] lemmas; + public String[] plemmas; + + public int[] heads; + public int[] pheads; + + public String[] labels; + public String[] plabels; + + public String[] gpos; // gold pos + public String[] ppos; + + public String feats[][]; + // public String[] split_lemma; + + public String[] sem; + public int[] semposition; + + // predicate number, argument number -> argument string + public String[][] arg; + public int[][] argposition; + + public String[] fillp; + + public String[] ofeats; + public String[] pfeats; + + public SentenceData09() { + } + + public SentenceData09(String[] forms, String[] postags, String[] labs, int[] heads) { + this.forms = forms; + gpos = postags; + labels = labs; + this.heads = heads; + } + + public SentenceData09(String[] forms, String[] lemmas, String[] postags, String[] labs, int[] heads) { + this.forms = forms; + gpos = postags; + // ppos = postags; + + labels = labs; + this.heads = heads; + this.plemmas = lemmas; + } + + public SentenceData09(String[] forms, String[] lemmas, String[] gpos, String[] ppos, String[] labs, int[] heads) { + this.forms = forms; + this.gpos = gpos; + this.ppos = ppos; + + labels = labs; + this.heads = heads; + this.plemmas = lemmas; + + } + + public SentenceData09(String[] forms, String[] lemmas, String[] gpos, String[] ppos, String[] labs, int[] heads, + String[] fillpred) { + this.forms = forms; + this.gpos = gpos; + this.ppos = ppos; + + labels = labs; + this.heads = heads; + this.plemmas = lemmas; + + fillp = fillpred; + } + + public SentenceData09(String[] forms, String[] lemmas, String[] olemmas, String[] gpos, String[] ppos, + String[] labs, int[] heads, String[] fillpred) { + this.forms = forms; + this.gpos = gpos; + this.ppos = ppos; + + labels = labs; + this.heads = heads; + this.plemmas = lemmas; + this.lemmas = olemmas; + fillp = fillpred; + } + + public SentenceData09(String[] forms, String[] olemmas, String[] lemmas, String[] gpos, String[] ppos, + String[] labs, int[] heads, String[] fillpred, String[] of, String[] pf) { + this.forms = forms; + this.gpos = gpos; + this.ppos = ppos; + + labels = labs; + this.heads = heads; + this.pheads = heads; + this.plabels = labs; + this.plemmas = lemmas; + this.lemmas = olemmas; + + this.ofeats = of; + this.pfeats = pf; + fillp = fillpred; + } + + /** + * Create an instance without root of the input instance + * + * @param instance + */ + public SentenceData09(SentenceData09 i) { + + int length = i.length() - 1; + + forms = new String[length]; + gpos = new String[length]; + ppos = new String[length]; + plemmas = new String[length]; + plabels = new String[length]; + lemmas = new String[length]; + heads = new int[length]; + pheads = new int[length]; + ofeats = new String[length]; + pfeats = new String[length]; + labels = new String[length]; + fillp = new String[length]; + id = new String[length]; + + for (int j = 0; j < length; j++) { + forms[j] = i.forms[j + 1]; + ppos[j] = i.ppos[j + 1]; + gpos[j] = i.gpos[j + 1]; + + labels[j] = i.labels[j + 1]; + heads[j] = i.heads[j + 1]; + + if (i.pheads != null) + pheads[j] = i.pheads[j + 1]; + if (i.plabels != null) + plabels[j] = i.plabels[j + 1]; + + if (i.lemmas != null) + lemmas[j] = i.lemmas[j + 1]; + + plemmas[j] = i.plemmas[j + 1]; + + if (i.ofeats != null) + ofeats[j] = i.ofeats[j + 1]; + if (i.pfeats != null) + pfeats[j] = i.pfeats[j + 1]; + + if (i.fillp != null) + fillp[j] = i.fillp[j + 1]; + if (i.id != null) + id[j] = i.id[j + 1]; + } + + } + + public void setPPos(String[] pos) { + ppos = pos; + } + + public void setLemmas(String[] lemmas) { + this.plemmas = lemmas; + } + + public void setFeats(String[] fts) { + feats = new String[fts.length][]; + for (int i = 0; i < fts.length; i++) { + feats[i] = fts[i].split("\\|"); + } + pfeats = fts; + } + + public int length() { + return forms.length; + } + + @Override + public String toString() { + // prepare the output + StringWriter sw = new StringWriter(); + CONLLWriter09 snt2str = new is2.io.CONLLWriter09(sw); + try { + snt2str.write(this, CONLLWriter09.NO_ROOT); + snt2str.finishWriting(); + return sw.toString(); + } catch (Exception e) { + e.printStackTrace(); + } + + // backup + StringBuffer sb = new StringBuffer(); + for (int k = 0; k < forms.length; k++) + sb.append(k + 1).append('\t').append(forms[k]).append('\t').append(heads[k]).append('\t').append(labels[k]) + .append('\n'); + return sw.toString(); + } + + final public void write(DataOutputStream out) throws IOException { + + out.writeInt(forms.length); + for (int k = 0; k < forms.length; k++) { + out.writeUTF(forms[k]); + out.writeUTF(ppos[k]); + out.writeUTF(gpos[k]); + out.writeInt(heads[k]); + out.writeUTF(labels[k]); + out.writeUTF(lemmas[k]); + out.writeUTF(plemmas[k]); + out.writeUTF(ofeats[k]); // needed for mtag + out.writeUTF(fillp[k]); + } + + // out.writeUTF(actParseTree); + + } + + final public void read(DataInputStream dis) throws IOException { + + int l = dis.readInt(); + + forms = new String[l]; + lemmas = new String[l]; + plemmas = new String[l]; + ppos = new String[l]; + gpos = new String[l]; + labels = new String[l]; + heads = new int[l]; + fillp = new String[l]; + ofeats = new String[l]; + + for (int k = 0; k < l; k++) { + forms[k] = dis.readUTF(); + ppos[k] = dis.readUTF(); + gpos[k] = dis.readUTF(); + heads[k] = dis.readInt(); + labels[k] = dis.readUTF(); + lemmas[k] = dis.readUTF(); + plemmas[k] = dis.readUTF(); + ofeats[k] = dis.readUTF(); + fillp[k] = dis.readUTF(); + + } + } + + private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException { + forms = (String[]) in.readObject(); + plemmas = (String[]) in.readObject(); + ppos = (String[]) in.readObject(); + heads = (int[]) in.readObject(); + labels = (String[]) in.readObject(); + } + + public void addPredicate(int i, String s) { + + int predId; + if (sem == null) { + predId = 0; + sem = new String[1]; + semposition = new int[1]; + } else { + predId = sem.length; + String p[] = new String[sem.length + 1]; + System.arraycopy(sem, 0, p, 0, sem.length); + int id[] = new int[sem.length + 1]; + System.arraycopy(semposition, 0, id, 0, semposition.length); + sem = p; + semposition = id; + } + sem[predId] = s; + semposition[predId] = i; + } + + /** + * Add an argument + * + * @param i + * the instance (the child) + * @param predId + * the id of the predicate (the head) + * @param a + * the label of the argument + */ + public void addArgument(int i, int predId, String a) { + + if (a == null || a.equals("_")) + return; + + // ensure the space for the argument in the data structure + if (arg == null) { + arg = new String[predId + 1][]; + argposition = new int[predId + 1][]; + } else if (arg.length <= predId) { + String p[][] = new String[predId + 1][]; + System.arraycopy(arg, 0, p, 0, arg.length); + arg = p; + + int id[][] = new int[predId + 1][]; + System.arraycopy(argposition, 0, id, 0, argposition.length); + argposition = id; + } + + int aId; + if (arg[predId] == null) { + aId = 0; + arg[predId] = new String[1]; + argposition[predId] = new int[1]; + } else { + aId = arg[predId].length; + String args[] = new String[arg[predId].length + 1]; + System.arraycopy(arg[predId], 0, args, 0, arg[predId].length); + arg[predId] = args; + + int argsId[] = new int[argposition[predId].length + 1]; + System.arraycopy(argposition[predId], 0, argsId, 0, argposition[predId].length); + argposition[predId] = argsId; + } + + arg[predId][aId] = a; + argposition[predId][aId] = i; + + } + + public int[] getParents() { + return heads; + } + + public String[] getLabels() { + return labels; + } + + public String printSem() { + + if (sem == null) + return ""; + StringBuilder s = new StringBuilder(); + + for (int k = 0; k < sem.length; k++) { + s.append(sem[k]).append("\n"); + + if (arg == null) { + s.append("arg == null"); + } else if (arg.length <= k) { + s.append("args.length <=k arg.length:" + arg.length + " k:" + k); + } else if (arg[k] != null) { + for (int a = 0; a < arg[k].length; a++) { + s.append(" ").append(arg[k][a]); + } + } else { + s.append("args == null "); + } + s.append('\n'); + } + return s.toString(); + } + + /** + * Initialize a instance so that a tagger, parser, etc. could be applied + * + * @param forms + */ + public void init(String[] forms) { + this.forms = forms; + heads = new int[forms.length]; + gpos = new String[forms.length]; + ppos = new String[forms.length]; + plemmas = new String[forms.length]; + feats = new String[forms.length][0]; + labels = new String[forms.length]; + } + + /** + * @param instance + * @param fillp2 + * @param i09 + */ + public void createSemantic(SentenceData09 instance) { + + this.sem = instance.sem; + this.semposition = instance.semposition; + + if (instance.semposition != null) + for (int k = 0; k < instance.semposition.length; k++) { + this.semposition[k] = instance.semposition[k] - 1; + } + + this.arg = instance.arg; + + this.argposition = instance.argposition; + + if (this.argposition != null) + for (int p = 0; p < instance.argposition.length; p++) { + if (this.argposition[p] != null) + for (int a = 0; a < instance.argposition[p].length; a++) + this.argposition[p][a] = instance.argposition[p][a] - 1; + } + + } + + /** + * + */ + public String oneLine() { + + StringBuffer o = new StringBuffer(); + for (int i = 1; i < this.length(); i++) { + + if (i != 1) + o.append(" "); + o.append(this.forms[i]); + } + return o.toString(); + } + + /** + * Get the children of this instance + * + * @param head + * @return children of the head + */ + public ArrayList<Integer> getChildren(int head) { + + ArrayList<Integer> children = new ArrayList<Integer>(); + for (int i = 0; i < length(); i++) { + if (heads[i] == head) + children.add(i); + } + return children; + } + + public void createWithRoot(SentenceData09 i) { + + int length = i.length(); + int offset = 0; + if (!i.forms[0].equals(IOGenerals.ROOT)) { + length++; + offset = -1; + } + + forms = new String[length]; + gpos = new String[length]; + ppos = new String[length]; + plemmas = new String[length]; + plabels = new String[length]; + lemmas = new String[length]; + heads = new int[length]; + pheads = new int[length]; + ofeats = new String[length]; + pfeats = new String[length]; + labels = new String[length]; + fillp = new String[length]; + id = new String[length]; + feats = new String[forms.length][]; + + for (int j = 1; j < length; j++) { + forms[j] = i.forms[j + offset]; + ppos[j] = i.ppos[j + offset]; + gpos[j] = i.gpos[j + offset]; + + labels[j] = i.labels[j + offset]; + heads[j] = i.heads[j + offset]; + + if (i.pheads != null) + pheads[j] = i.pheads[j + offset]; + if (i.plabels != null) + plabels[j] = i.plabels[j + offset]; + + if (i.lemmas != null) + lemmas[j] = i.lemmas[j + offset]; + + plemmas[j] = i.plemmas[j + offset]; + + // if (i.ofeats!=null) ofeats[j] = i.ofeats[j+offset]; + + ofeats[j] = i.ofeats[j + offset].equals(CONLLWriter09.DASH) ? "_" : i.ofeats[j + offset]; + + // if (i.pfeats!=null) pfeats[j] = i.pfeats[j+offset]; + + if (i.pfeats != null && i.pfeats[j + offset] != null) { + if (i.pfeats[j + offset].equals(CONLLWriter09.DASH)) + feats[j] = null; + else { + feats[j] = i.pfeats[j + offset].split(IOGenerals.PIPE); + + // if (info[7].equals(CONLLWriter09.DASH)) it.feats[i]=null; + // else { + // it.feats[i] =info[7].split(PIPE); + pfeats[j] = i.pfeats[j + offset]; + // } + } + } + + if (i.fillp != null) + fillp[j] = i.fillp[j + offset]; + if (i.id != null) + id[j] = i.id[j + offset]; + } + + forms[0] = IOGenerals.ROOT; + plemmas[0] = IOGenerals.ROOT_LEMMA; + fillp[0] = "N"; + lemmas[0] = IOGenerals.ROOT_LEMMA; + + gpos[0] = IOGenerals.ROOT_POS; + ppos[0] = IOGenerals.ROOT_POS; + labels[0] = IOGenerals.NO_TYPE; + heads[0] = -1; + plabels[0] = IOGenerals.NO_TYPE; + pheads[0] = -1; + ofeats[0] = IOGenerals.NO_TYPE; + id[0] = "0"; + } + +} diff --git a/dependencyParser/experimental/mate-tools/src/is2/data/Thesaurus.java b/dependencyParser/experimental/mate-tools/src/is2/data/Thesaurus.java new file mode 100644 index 0000000..bafc3b9 --- /dev/null +++ b/dependencyParser/experimental/mate-tools/src/is2/data/Thesaurus.java @@ -0,0 +1,200 @@ +/** + * + */ +package is2.data; + +import java.io.BufferedReader; +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.FileInputStream; +import java.io.IOException; +import java.io.InputStreamReader; +import java.util.ArrayList; + +import is2.util.DB; + +/** + * @author Dr. Bernd Bohnet, 28.10.2010 + * + * + */ +final public class Thesaurus { + + public static final String LPATH = "LP"; + public static final String SPATH = "SP"; + + // [word][p] p = [0:long-path | 1:short-path] + final private int[][] word2path; + + public Thesaurus() { + word2path = new int[0][]; + } + + /** + * @param clusterFile + * @param mf + * + */ + public Thesaurus(String clusterFile, IEncoderPlus mf, int ls) { + + final String REGEX = "\t"; + + // register words + try { + BufferedReader inputReader = new BufferedReader( + new InputStreamReader(new FileInputStream(clusterFile), "UTF-8"), 32768); + + int cnt = 0; + String line; + while ((line = inputReader.readLine()) != null) { + + cnt++; + try { + String[] split = line.split(REGEX); + // mf.register(LPATH, + // split[0].length()<ls?split[0]:split[0].substring(0,ls)); + mf.register(PipeGen.WORD, split[0]); + mf.register(PipeGen.WORD, split[1]); + } catch (Exception e) { + System.out.println("Error in cluster line " + cnt + " error: " + e.getMessage()); + } + } + System.out.println("read number of thesaury entries " + cnt); + inputReader.close(); + + } catch (Exception e) { + e.printStackTrace(); + } + + word2path = new int[mf.getFeatureCounter().get(PipeGen.WORD)][]; + + // insert words + try { + String line; + BufferedReader inputReader = new BufferedReader( + new InputStreamReader(new FileInputStream(clusterFile), "UTF-8"), 32768); + + int startWd = -1; + ArrayList<Integer> wrds = new ArrayList<Integer>(); + while ((line = inputReader.readLine()) != null) { + + String[] split = line.split(REGEX); + int wd = mf.getValue(PipeGen.WORD, split[0]); + // DB.println("wd "+wd+" "+startWd); + if (startWd == wd) { + int thesaurusWrd = mf.getValue(PipeGen.WORD, split[1]); + if (thesaurusWrd != wd) + wrds.add(thesaurusWrd); + } else if (startWd != -1) { + int[] ths = new int[wrds.size()]; + for (int k = 0; k < ths.length; k++) + ths[k] = wrds.get(k); + word2path[startWd] = ths; + // DB.println(""+wrds+" size "+ths.length); + wrds.clear(); + int thesaurusWrd = mf.getValue(PipeGen.WORD, split[1]); + if (thesaurusWrd != wd) + wrds.add(thesaurusWrd); + } + startWd = wd; + } + + if (wrds.size() != 0) { + // put rest of the words + int[] ths = new int[wrds.size()]; + for (int k = 0; k < ths.length; k++) + ths[k] = wrds.get(k); + word2path[startWd] = ths; + // DB.println(""+wrds+" size "+ths.length); + wrds.clear(); + + } + + inputReader.close(); + int fill = 0; + for (int[] element : word2path) { + if (element != null) + fill++; + } + /* + * for(int l = 0; l<word2path.length; l++ ){ if (word2path[l][1]!=0) + * fillL++; if (word2path[l][1]<-1) + * System.out.println("lower "+word2path[l][1]); } + */ + System.out.println("filled " + fill + " of " + word2path.length); + + } catch (Exception e) { + e.printStackTrace(); + } + } + + /** + * Read the cluster + * + * @param dos + * @throws IOException + */ + public Thesaurus(DataInputStream dis) throws IOException { + + word2path = new int[dis.readInt()][]; + for (int i = 0; i < word2path.length; i++) { + int len = dis.readInt(); + if (len > 0) { + word2path[i] = new int[len]; + for (int j = 0; j < len; j++) { + word2path[i][j] = dis.readInt(); + + } + } + + word2path[i][0] = dis.readShort(); + } + DB.println("Read cluster with " + word2path.length + " words "); + } + + /** + * Write the cluster + * + * @param dos + * @throws IOException + */ + public void write(DataOutputStream dos) throws IOException { + + dos.writeInt(word2path.length); + for (int[] i : word2path) { + dos.writeInt(i == null ? 0 : i.length); + + if (i != null) { + for (int element : i) { + + dos.writeInt(element); + + } + + } + } + + } + + /** + * @param form + * the id of a word form + * @return the short path to the word form in the cluster + * + * final public int getSP(int form) { if (word2path.length<form) + * return -1; return word2path[form][0]; } + */ + /** + * get the long path to a word form in the cluster + * + * @param form + * the id of a word form + * @return the long path to the word + */ + final public int get(int form, int k) { + if (word2path.length < form || word2path[form] == null) + return -1; + return word2path[form][k]; + } + +} diff --git a/dependencyParser/experimental/mate-tools/src/is2/io/CONLLReader04.java b/dependencyParser/experimental/mate-tools/src/is2/io/CONLLReader04.java new file mode 100644 index 0000000..695f10d --- /dev/null +++ b/dependencyParser/experimental/mate-tools/src/is2/io/CONLLReader04.java @@ -0,0 +1,264 @@ + +package is2.io; + +import java.io.BufferedReader; +import java.io.FileInputStream; +import java.io.IOException; +import java.io.InputStreamReader; +import java.util.ArrayList; + +import is2.data.Instances; +import is2.data.SentenceData09; +import is2.util.DB; + +/** + * This class reads files in the CONLL-08 and CONLL-09 format. + * + * @author Bernd Bohnet + */ +public class CONLLReader04 { + + private static final String US = "_"; + private static final String REGEX = "\t"; + public static final String STRING = "*"; + public static final String PIPE = "\\|"; + public static final String NO_TYPE = "<no-type>"; + public static final String ROOT_POS = "<root-POS>"; + public static final String ROOT_LEMMA = "<root-LEMMA>"; + public static final String ROOT = "<root>"; + public static final String EMPTY_FEAT = "<ef>"; + + private static final String NUMBER = "[0-9]+|[0-9]+\\.[0-9]+|[0-9]+[0-9,]+"; + private static final String NUM = "<num>"; + + private BufferedReader inputReader; + + public static final int TASK08 = 8; + public static final int TASK09 = 9; + + public static boolean normalizeOn = true; + + private int lineNumber = 0; + + public CONLLReader04() { + } + + public CONLLReader04(String file) { + lineNumber = 0; + try { + inputReader = new BufferedReader(new InputStreamReader(new FileInputStream(file), "UTF-8"), 32768); // ,"UTF-8" + } catch (Exception e) { + e.printStackTrace(); + } + } + + public CONLLReader04(String file, int task) { + this(file); + } + + public void startReading(String file) { + lineNumber = 0; + try { + inputReader = new BufferedReader(new InputStreamReader(new FileInputStream(file), "UTF-8"), 32768); + } catch (Exception e) { + e.printStackTrace(); + } + } + + /** + * i.forms[heads[l]-1]+" "+rel+" "+ Read a instance + * + * @return a instance + * @throws Exception + */ + public SentenceData09 getNext() throws Exception { + + try { + + ArrayList<String[]> lineList = new ArrayList<String[]>(); + + String line = inputReader.readLine(); + + while (line != null && line.length() < 2) { + line = inputReader.readLine(); + lineNumber++; + System.out.println("skip empty line at line " + lineNumber); + } + + while (line != null && line.length() != 0 && !line.startsWith(STRING) && !line.startsWith(REGEX)) { + lineList.add(line.split(REGEX)); + line = inputReader.readLine(); + lineNumber++; + } + + int length = lineList.size(); + + if (length == 0) { + inputReader.close(); + return null; + } + + SentenceData09 it = new SentenceData09(); + + // column content + // 1 id + // 2 form + // 3 lemma + // 4 cpos-tag + // 5 pos-tog + // 6 feats + // 7 head + // 8 deprel + + it.forms = new String[length + 1]; + + it.plemmas = new String[length + 1]; + it.gpos = new String[length + 1]; + it.labels = new String[length + 1]; + it.heads = new int[length + 1]; + it.pheads = new int[length + 1]; + it.plabels = new String[length + 1]; + + it.ppos = new String[length + 1]; + it.lemmas = new String[length + 1]; + it.fillp = new String[length + 1]; + it.feats = new String[length + 1][]; + it.ofeats = new String[length + 1]; + it.pfeats = new String[length + 1]; + + it.forms[0] = ROOT; + it.plemmas[0] = ROOT_LEMMA; + it.fillp[0] = "N"; + it.lemmas[0] = ROOT_LEMMA; + + it.gpos[0] = ROOT_POS; + it.ppos[0] = ROOT_POS; + it.labels[0] = NO_TYPE; + it.heads[0] = -1; + it.plabels[0] = NO_TYPE; + it.pheads[0] = -1; + it.ofeats[0] = NO_TYPE; + + // root is 0 therefore start with 1 + + for (int i = 1; i <= length; i++) { + + String[] info = lineList.get(i - 1); + + it.forms[i] = info[0]; // normalize( + + it.lemmas[i] = "_"; + it.plemmas[i] = "_"; + + // 3 cpos + + it.gpos[i] = info[1]; + it.ppos[i] = info[1]; + + it.ofeats[i] = "_"; + + it.feats[i] = null; + // it.feats[i] =info[5].split(PIPE); + it.pfeats[i] = "_"; + + if (info[2].equals(US)) + it.heads[i] = -1; + else + it.heads[i] = Integer.parseInt(info[2]);// head + + it.labels[i] = info[3]; + + } + return it; + + } catch (Exception e) { + System.out.println("\n!!! Error in input file at line : " + lineNumber + " " + e.toString()); + e.printStackTrace(); + throw new Exception(); + // return null; + } + + } + + /** + * Read a instance an store it in a compressed format + * + * @param is + * @return + * @throws IOException + */ + final public SentenceData09 getNext(Instances is) throws Exception { + + SentenceData09 it = getNext(); + + if (is != null) + insert(is, it); + + return it; + + } + + final public boolean insert(Instances is, SentenceData09 it) throws IOException { + + try { + + if (it == null) { + inputReader.close(); + return false; + } + + int i = is.createInstance09(it.length()); + + for (int p = 0; p < it.length(); p++) { + + is.setForm(i, p, normalize(it.forms[p])); + is.setGPos(i, p, it.gpos[p]); + + if (it.ppos[p] == null || it.ppos[p].equals(US)) { + is.setPPoss(i, p, it.gpos[p]); + } else + is.setPPoss(i, p, it.ppos[p]); + + if (it.plemmas[p] == null || it.plemmas[p].equals(US)) { + is.setLemma(i, p, normalize(it.forms[p])); + } else + is.setLemma(i, p, normalize(it.plemmas[p])); + + is.setFeats(i, p, it.feats[p]); + + is.setFeature(i, p, it.ofeats[p]); + + is.setRel(i, p, it.labels[p]); + if (it.plabels != null) + is.setPRel(i, p, it.plabels[p]); + is.setHead(i, p, it.heads[p]); + if (it.pheads != null) + is.setPHead(i, p, it.pheads[p]); + + if (it.fillp != null && it.fillp[p] != null && it.fillp[p].startsWith("Y")) + is.pfill[i].set(p); + else + is.pfill[i].clear(p); + } + + if (is.createSem(i, it)) { + DB.println("count " + i + " len " + it.length()); + DB.println(it.printSem()); + } + } catch (Exception e) { + DB.println("head " + it); + e.printStackTrace(); + } + return true; + + } + + public static String normalize(String s) { + if (!normalizeOn) + return s; + if (s.matches(NUMBER)) + return NUM; + return s; + } + +} diff --git a/dependencyParser/experimental/mate-tools/src/is2/io/CONLLReader06.java b/dependencyParser/experimental/mate-tools/src/is2/io/CONLLReader06.java new file mode 100755 index 0000000..10d1d2d --- /dev/null +++ b/dependencyParser/experimental/mate-tools/src/is2/io/CONLLReader06.java @@ -0,0 +1,271 @@ + +package is2.io; + +import java.io.BufferedReader; +import java.io.FileInputStream; +import java.io.IOException; +import java.io.InputStreamReader; +import java.util.ArrayList; + +import is2.data.Instances; +import is2.data.SentenceData09; +import is2.util.DB; + +/** + * This class reads files in the CONLL-08 and CONLL-09 format. + * + * @author Bernd Bohnet + */ +public class CONLLReader06 { + + private static final String US = "_"; + private static final String REGEX = "\t"; + public static final String STRING = "*"; + public static final String PIPE = "\\|"; + public static final String NO_TYPE = "<no-type>"; + public static final String ROOT_POS = "<root-POS>"; + public static final String ROOT_LEMMA = "<root-LEMMA>"; + public static final String ROOT = "<root>"; + public static final String EMPTY_FEAT = "<ef>"; + + private static final String NUMBER = "[0-9]+|[0-9]+\\.[0-9]+|[0-9]+[0-9,]+"; + private static final String NUM = "<num>"; + + private BufferedReader inputReader; + + public static final int TASK08 = 8; + public static final int TASK09 = 9; + + public static boolean normalizeOn = true; + + private int lineNumber = 0; + + public CONLLReader06() { + } + + public CONLLReader06(String file) { + lineNumber = 0; + try { + inputReader = new BufferedReader(new InputStreamReader(new FileInputStream(file), "UTF-8"), 32768); // ,"UTF-8" + } catch (Exception e) { + e.printStackTrace(); + } + } + + public CONLLReader06(String file, int task) { + this(file); + } + + public void startReading(String file) { + lineNumber = 0; + try { + inputReader = new BufferedReader(new InputStreamReader(new FileInputStream(file), "UTF-8"), 32768); + } catch (Exception e) { + e.printStackTrace(); + } + } + + /** + * i.forms[heads[l]-1]+" "+rel+" "+ Read a instance + * + * @return a instance + * @throws Exception + */ + public SentenceData09 getNext() throws Exception { + + try { + + ArrayList<String[]> lineList = new ArrayList<String[]>(); + + String line = inputReader.readLine(); + + while (line != null && line.length() == 0) { + line = inputReader.readLine(); + lineNumber++; + System.out.println("skip empty line at line " + lineNumber); + } + + while (line != null && line.length() != 0 && !line.startsWith(STRING) && !line.startsWith(REGEX)) { + lineList.add(line.split(REGEX)); + line = inputReader.readLine(); + lineNumber++; + } + + int length = lineList.size(); + + if (length == 0) { + inputReader.close(); + return null; + } + + SentenceData09 it = new SentenceData09(); + + // column content + // 1 id + // 2 form + // 3 lemma + // 4 cpos-tag + // 5 pos-tog + // 6 feats + // 7 head + // 8 deprel + + it.forms = new String[length + 1]; + + it.plemmas = new String[length + 1]; + it.gpos = new String[length + 1]; + it.labels = new String[length + 1]; + it.heads = new int[length + 1]; + it.pheads = new int[length + 1]; + it.plabels = new String[length + 1]; + + it.ppos = new String[length + 1]; + it.lemmas = new String[length + 1]; + it.fillp = new String[length + 1]; + it.feats = new String[length + 1][]; + it.ofeats = new String[length + 1]; + it.pfeats = new String[length + 1]; + + it.forms[0] = ROOT; + it.plemmas[0] = ROOT_LEMMA; + it.fillp[0] = "N"; + it.lemmas[0] = ROOT_LEMMA; + + it.gpos[0] = ROOT_POS; + it.ppos[0] = ROOT_POS; + it.labels[0] = NO_TYPE; + it.heads[0] = -1; + it.plabels[0] = NO_TYPE; + it.pheads[0] = -1; + it.ofeats[0] = NO_TYPE; + + // root is 0 therefore start with 1 + + for (int i = 1; i <= length; i++) { + + String[] info = lineList.get(i - 1); + + it.forms[i] = info[1]; // normalize( + + it.lemmas[i] = info[2]; + it.plemmas[i] = info[2]; + + // 3 cpos + + it.gpos[i] = info[3]; + it.ppos[i] = info[4]; + + it.ofeats[i] = info[5].equals(CONLLWriter09.DASH) ? "" : info[5]; + + if (info[5].equals(CONLLWriter09.DASH)) + it.feats[i] = null; + else { + it.feats[i] = info[5].split(PIPE); + it.pfeats[i] = info[5]; + } + + if (info[6].equals(US)) + it.heads[i] = -1; + else + it.heads[i] = Integer.parseInt(info[6]);// head + + // it.phead[i]=info[9].equals(US) ? it.phead[i]=-1: + // Integer.parseInt(info[9]);// head + + it.labels[i] = info[7]; + // it.pedge[i] = info[11]; + + } + return it; + + } catch (Exception e) { + System.out.println("\n!!! Error in input file at line : " + lineNumber + " " + e.toString()); + e.printStackTrace(); + throw new Exception(); + // return null; + } + + } + + /** + * Read a instance an store it in a compressed format + * + * @param is + * @return + * @throws IOException + */ + final public SentenceData09 getNext(Instances is) throws Exception { + + SentenceData09 it = getNext(); + + if (is != null) + insert(is, it); + + return it; + + } + + final public boolean insert(Instances is, SentenceData09 it) throws IOException { + + try { + + if (it == null) { + inputReader.close(); + return false; + } + + int i = is.createInstance09(it.length()); + + for (int p = 0; p < it.length(); p++) { + + is.setForm(i, p, normalize(it.forms[p])); + is.setGPos(i, p, it.gpos[p]); + + if (it.ppos[p] == null || it.ppos[p].equals(US)) { + is.setPPoss(i, p, it.gpos[p]); + } else + is.setPPoss(i, p, it.ppos[p]); + + if (it.plemmas[p] == null || it.plemmas[p].equals(US)) { + is.setLemma(i, p, normalize(it.forms[p])); + } else + is.setLemma(i, p, normalize(it.plemmas[p])); + + is.setFeats(i, p, it.feats[p]); + + is.setFeature(i, p, it.ofeats[p]); + + is.setRel(i, p, it.labels[p]); + if (it.plabels != null) + is.setPRel(i, p, it.plabels[p]); + is.setHead(i, p, it.heads[p]); + if (it.pheads != null) + is.setPHead(i, p, it.pheads[p]); + + if (it.fillp != null && it.fillp[p] != null && it.fillp[p].startsWith("Y")) + is.pfill[i].set(p); + else + is.pfill[i].clear(p); + } + + if (is.createSem(i, it)) { + DB.println("count " + i + " len " + it.length()); + DB.println(it.printSem()); + } + } catch (Exception e) { + DB.println("head " + it); + e.printStackTrace(); + } + return true; + + } + + public static String normalize(String s) { + if (!normalizeOn) + return s; + if (s.matches(NUMBER)) + return NUM; + return s; + } + +} diff --git a/dependencyParser/experimental/mate-tools/src/is2/io/CONLLReader08.java b/dependencyParser/experimental/mate-tools/src/is2/io/CONLLReader08.java new file mode 100644 index 0000000..467e853 --- /dev/null +++ b/dependencyParser/experimental/mate-tools/src/is2/io/CONLLReader08.java @@ -0,0 +1,407 @@ + +package is2.io; + +import java.io.BufferedReader; +import java.io.FileInputStream; +import java.io.IOException; +import java.io.InputStreamReader; +import java.util.ArrayList; + +import is2.data.Instances; +import is2.data.SentenceData09; +import is2.util.DB; + +/** + * This class reads files in the CONLL-09 format. + * + * @author Bernd Bohnet + */ +public class CONLLReader08 extends IOGenerals { + + private BufferedReader inputReader; + + public static final boolean NORMALIZE = true; + + public static final boolean NO_NORMALIZE = false; + + public boolean normalizeOn = true; + + private int format = 0; + + private int lineNumber = 0; + + public CONLLReader08(boolean normalize) { + + normalizeOn = normalize; + } + + public CONLLReader08(String file) { + lineNumber = 0; + try { + inputReader = new BufferedReader(new InputStreamReader(new FileInputStream(file), "UTF-8"), 32768); + } catch (Exception e) { + e.printStackTrace(); + } + } + + public CONLLReader08(String file, boolean normalize) { + this(file); + normalizeOn = normalize; + } + + /** + * Sets the input format: + * + * CONLL09 is standard, ONE_LINE + * + * @param format + * the fomrat (see the constants starting with F_). + */ + public void setInputFormat(int format) { + this.format = format; + } + + /** + * + */ + public CONLLReader08() { + } + + /** + * @param testfile + * @param formatTask + */ + public CONLLReader08(String testfile, int formatTask) { + this(testfile); + } + + public void startReading(String file) { + lineNumber = 0; + try { + inputReader = new BufferedReader(new InputStreamReader(new FileInputStream(file), "UTF-8"), 32768); + } catch (Exception e) { + e.printStackTrace(); + } + } + + public SentenceData09 getNext() { + + if (F_ONE_LINE == format) + return getNextOneLine(); + else + return getNextCoNLL09(); + } + + /** + * @return + */ + private SentenceData09 getNextOneLine() { + + String line = null; + int i = 0; + try { + + line = inputReader.readLine(); + lineNumber++; + + if (line == null) { + inputReader.close(); + return null; + } + + String[] tokens = line.split(" "); + int length = tokens.length; + if (line.isEmpty()) + length = 0; + + SentenceData09 it = new SentenceData09(); + + it.forms = new String[length + 1]; + + it.plemmas = new String[length + 1]; + // it.ppos = new String[length+1]; + it.gpos = new String[length + 1]; + it.labels = new String[length + 1]; + it.heads = new int[length + 1]; + it.pheads = new int[length + 1]; + it.plabels = new String[length + 1]; + + it.ppos = new String[length + 1]; + it.lemmas = new String[length + 1]; + it.fillp = new String[length + 1]; + it.feats = new String[length + 1][]; + it.ofeats = new String[length + 1]; + it.pfeats = new String[length + 1]; + it.id = new String[length + 1]; + + it.forms[0] = ROOT; + it.plemmas[0] = ROOT_LEMMA; + it.fillp[0] = "N"; + it.lemmas[0] = ROOT_LEMMA; + + it.gpos[0] = ROOT_POS; + it.ppos[0] = ROOT_POS; + it.labels[0] = NO_TYPE; + it.heads[0] = -1; + it.plabels[0] = NO_TYPE; + it.pheads[0] = -1; + it.ofeats[0] = NO_TYPE; + it.id[0] = "0"; + + // root is 0 therefore start with 1 + + for (i = 1; i <= length; i++) { + + it.id[i] = "" + i; + + it.forms[i] = this.normalizeOn ? normalize(tokens[i - 1]) : tokens[i - 1]; // normalize( + + } + + return it; + + } catch (Exception e) { + System.out.println("\n!!! Error in input file sentence before line: " + lineNumber + " (in sentence line " + + i + " ) " + e.toString()); + e.printStackTrace(); + System.exit(0); + + // throw new Exception(); + return null; + } + + } + + /** + * i.forms[heads[l]-1]+" "+rel+" "+ Read a instance + * + * @return a instance + * @throws Exception + */ + + public SentenceData09 getNextCoNLL09() { + + String line = null; + int i = 0; + try { + + ArrayList<String[]> lineList = new ArrayList<String[]>(); + + line = inputReader.readLine(); + lineNumber++; + + while (line != null && line.length() == 0) { + line = inputReader.readLine(); + lineNumber++; + System.out.println("skip empty line at line " + lineNumber); + } + + while (line != null && line.length() != 0 && !line.startsWith(STRING) && !line.startsWith(REGEX)) { + lineList.add(line.split(REGEX)); + line = inputReader.readLine(); + lineNumber++; + } + + int length = lineList.size(); + + if (length == 0) { + inputReader.close(); + return null; + } + + SentenceData09 it = new SentenceData09(); + + it.forms = new String[length + 1]; + + it.plemmas = new String[length + 1]; + // it.ppos = new String[length+1]; + it.gpos = new String[length + 1]; + it.labels = new String[length + 1]; + it.heads = new int[length + 1]; + it.pheads = new int[length + 1]; + it.plabels = new String[length + 1]; + + it.ppos = new String[length + 1]; + it.lemmas = new String[length + 1]; + it.fillp = new String[length + 1]; + it.feats = new String[length + 1][]; + it.ofeats = new String[length + 1]; + it.pfeats = new String[length + 1]; + it.id = new String[length + 1]; + + it.forms[0] = ROOT; + it.plemmas[0] = ROOT_LEMMA; + it.fillp[0] = "N"; + it.lemmas[0] = ROOT_LEMMA; + + it.gpos[0] = ROOT_POS; + it.ppos[0] = ROOT_POS; + it.labels[0] = NO_TYPE; + it.heads[0] = -1; + it.plabels[0] = NO_TYPE; + it.pheads[0] = -1; + it.ofeats[0] = NO_TYPE; + it.id[0] = "0"; + + // root is 0 therefore start with 1 + + for (i = 1; i <= length; i++) { + + String[] info = lineList.get(i - 1); + + it.id[i] = info[0]; + it.forms[i] = info[5]; // normalize( + if (info.length < 3) + continue; + + // it.lemmas[i] = info[2]; + it.plemmas[i] = info[6]; + it.gpos[i] = info[3]; + + if (info.length < 5) + continue; + it.ppos[i] = info[7];// .split("\\|")[0]; + + // feat 6 + // pfeat 7 + + // this causes trouble in the perl eval09 scirpt + // it.ofeats[i]=info[6].equals(CONLLWriter09.DASH)? "" : + // info[6]; + + // now we try underscore + it.ofeats[i] = "_"; + + // it.feats[i] ="_"; + it.pfeats[i] = "_"; + + if (info[8].equals(US)) + it.heads[i] = -1; + else + it.heads[i] = Integer.parseInt(info[8]);// head + + it.pheads[i] = -1;// head + + it.labels[i] = info[9]; + it.plabels[i] = "_"; + + it.fillp[i] = info[10]; + + if (info.length > 11) { + if (!info[10].equals(US)) + it.addPredicate(i, info[10]); + for (int k = 11; k < info.length; k++) + it.addArgument(i, k - 11, info[k]); + } + + } + return it; + + } catch (Exception e) { + System.out.println("\n!!! Error in input file sentence before line: " + lineNumber + " (in sentence line " + + i + " ) " + e.toString()); + e.printStackTrace(); + System.exit(0); + + // throw new Exception(); + return null; + } + + } + + /** + * Read a instance an store it in a compressed format + * + * @param is + * @return + * @throws IOException + */ + final public SentenceData09 getNext(Instances is) { + + SentenceData09 it = getNext(); + + if (is != null) + insert(is, it); + + return it; + + } + + final public boolean insert(Instances is, SentenceData09 it) { + + try { + + if (it == null) { + inputReader.close(); + return false; + } + + int i = is.createInstance09(it.length()); + + for (int p = 0; p < it.length(); p++) { + + is.setForm(i, p, normalize(it.forms[p])); + is.setGPos(i, p, it.gpos[p]); + + // System.out.println(""+is.gpos[i][p]); + + if (it.ppos[p] == null || it.ppos[p].equals(US)) { + + is.setPPoss(i, p, it.gpos[p]); + } else + is.setPPoss(i, p, it.ppos[p]); + + if (it.plemmas[p] == null || it.plemmas[p].equals(US)) { + is.setLemma(i, p, normalize(it.forms[p])); + } else + is.setLemma(i, p, normalize(it.plemmas[p])); + + if (it.lemmas != null) + if (it.lemmas[p] == null) { // ||it.org_lemmas[p].equals(US) + // that harms a lot the + // lemmatizer + is.setGLemma(i, p, it.plemmas[p]); + } else + is.setGLemma(i, p, it.lemmas[p]); + + if (it.feats != null && it.feats[p] != null) + is.setFeats(i, p, it.feats[p]); + + if (it.ofeats != null) + is.setFeature(i, p, it.ofeats[p]); + + is.setRel(i, p, it.labels[p]); + if (it.plabels != null) + is.setPRel(i, p, it.plabels[p]); + + is.setHead(i, p, it.heads[p]); + if (it.pheads != null) + is.setPHead(i, p, it.pheads[p]); + + if (it.fillp != null && it.fillp[p] != null && it.fillp[p].startsWith("Y")) + is.pfill[i].set(p); + else + is.pfill[i].clear(p); + } + + if (is.createSem(i, it)) { + DB.println("count " + i + " len " + it.length()); + DB.println(it.printSem()); + } + } catch (Exception e) { + DB.println("head " + it); + e.printStackTrace(); + } + return true; + + } + + public String normalize(String s) { + if (!normalizeOn) + return s; + if (s.matches(NUMBER)) + return NUM; + return s; + } + +} diff --git a/dependencyParser/experimental/mate-tools/src/is2/io/CONLLReader09.java b/dependencyParser/experimental/mate-tools/src/is2/io/CONLLReader09.java new file mode 100755 index 0000000..cee897a --- /dev/null +++ b/dependencyParser/experimental/mate-tools/src/is2/io/CONLLReader09.java @@ -0,0 +1,409 @@ + +package is2.io; + +import java.io.BufferedReader; +import java.io.FileInputStream; +import java.io.IOException; +import java.io.InputStreamReader; +import java.util.ArrayList; + +import is2.data.Instances; +import is2.data.SentenceData09; +import is2.util.DB; + +/** + * This class reads files in the CONLL-09 format. + * + * @author Bernd Bohnet + */ +public class CONLLReader09 extends IOGenerals { + + private BufferedReader inputReader; + + public static final boolean NORMALIZE = true; + + public static final boolean NO_NORMALIZE = false; + + public boolean normalizeOn = true; + + static public String joint = ""; + + private int format = 0; + + private int lineNumber = 0; + + public CONLLReader09(boolean normalize) { + + normalizeOn = normalize; + } + + public CONLLReader09(String file) { + lineNumber = 0; + try { + inputReader = new BufferedReader(new InputStreamReader(new FileInputStream(file), "UTF-8"), 32768); + } catch (Exception e) { + e.printStackTrace(); + } + } + + public CONLLReader09(String file, boolean normalize) { + this(file); + normalizeOn = normalize; + } + + /** + * Sets the input format: + * + * CONLL09 is standard, ONE_LINE + * + * @param format + * the fomrat (see the constants starting with F_). + */ + public void setInputFormat(int format) { + this.format = format; + } + + /** + * + */ + public CONLLReader09() { + } + + /** + * @param testfile + * @param formatTask + */ + public CONLLReader09(String testfile, int formatTask) { + this(testfile); + } + + public void startReading(String file) { + lineNumber = 0; + try { + inputReader = new BufferedReader(new InputStreamReader(new FileInputStream(file), "UTF-8"), 32768); + } catch (Exception e) { + e.printStackTrace(); + } + } + + public SentenceData09 getNext() { + + if (F_ONE_LINE == format) + return getNextOneLine(); + else + return getNextCoNLL09(); + } + + /** + * @return + */ + private SentenceData09 getNextOneLine() { + + String line = null; + int i = 0; + try { + + line = inputReader.readLine(); + lineNumber++; + + if (line == null) { + inputReader.close(); + return null; + } + + String[] tokens = line.split(" "); + int length = tokens.length; + if (line.isEmpty()) + length = 0; + + SentenceData09 it = new SentenceData09(); + + it.forms = new String[length + 1]; + + it.plemmas = new String[length + 1]; + // it.ppos = new String[length+1]; + it.gpos = new String[length + 1]; + it.labels = new String[length + 1]; + it.heads = new int[length + 1]; + it.pheads = new int[length + 1]; + it.plabels = new String[length + 1]; + + it.ppos = new String[length + 1]; + it.lemmas = new String[length + 1]; + it.fillp = new String[length + 1]; + it.feats = new String[length + 1][]; + it.ofeats = new String[length + 1]; + it.pfeats = new String[length + 1]; + it.id = new String[length + 1]; + + it.forms[0] = ROOT; + it.plemmas[0] = ROOT_LEMMA; + it.fillp[0] = "N"; + it.lemmas[0] = ROOT_LEMMA; + + it.gpos[0] = ROOT_POS; + it.ppos[0] = ROOT_POS; + it.labels[0] = NO_TYPE; + it.heads[0] = -1; + it.plabels[0] = NO_TYPE; + it.pheads[0] = -1; + it.ofeats[0] = NO_TYPE; + it.id[0] = "0"; + + // root is 0 therefore start with 1 + + for (i = 1; i <= length; i++) { + + it.id[i] = "" + i; + + it.forms[i] = this.normalizeOn ? normalize(tokens[i - 1]) : tokens[i - 1]; // normalize( + + } + + return it; + + } catch (Exception e) { + System.out.println("\n!!! Error in input file sentence before line: " + lineNumber + " (in sentence line " + + i + " ) " + e.toString()); + e.printStackTrace(); + + // throw new Exception(); + return null; + } + + } + + /** + * i.forms[heads[l]-1]+" "+rel+" "+ Read a instance + * + * @return a instance + * @throws Exception + */ + + public SentenceData09 getNextCoNLL09() { + + String line = null; + int i = 0; + try { + + ArrayList<String[]> lineList = new ArrayList<String[]>(); + + line = inputReader.readLine(); + lineNumber++; + + while (line != null && line.length() == 0) { + line = inputReader.readLine(); + lineNumber++; + System.out.println("skip empty line at line " + lineNumber); + } + + while (line != null && line.length() != 0 && !line.startsWith(STRING) && !line.startsWith(REGEX)) { + lineList.add(line.split(REGEX)); + line = inputReader.readLine(); + lineNumber++; + } + + int length = lineList.size(); + + if (length == 0) { + inputReader.close(); + return null; + } + + SentenceData09 it = new SentenceData09(); + + it.forms = new String[length + 1]; + + it.plemmas = new String[length + 1]; + // it.ppos = new String[length+1]; + it.gpos = new String[length + 1]; + it.labels = new String[length + 1]; + it.heads = new int[length + 1]; + it.pheads = new int[length + 1]; + it.plabels = new String[length + 1]; + + it.ppos = new String[length + 1]; + it.lemmas = new String[length + 1]; + it.fillp = new String[length + 1]; + it.feats = new String[length + 1][]; + it.ofeats = new String[length + 1]; + it.pfeats = new String[length + 1]; + it.id = new String[length + 1]; + + it.forms[0] = ROOT; + it.plemmas[0] = ROOT_LEMMA; + it.fillp[0] = "N"; + it.lemmas[0] = ROOT_LEMMA; + + it.gpos[0] = ROOT_POS; + it.ppos[0] = ROOT_POS; + it.labels[0] = NO_TYPE; + it.heads[0] = -1; + it.plabels[0] = NO_TYPE; + it.pheads[0] = -1; + it.ofeats[0] = NO_TYPE; + it.id[0] = "0"; + + // root is 0 therefore start with 1 + + for (i = 1; i <= length; i++) { + + String[] info = lineList.get(i - 1); + + it.id[i] = info[0]; + it.forms[i] = info[1]; // normalize( + if (info.length < 3) + continue; + + it.lemmas[i] = info[2]; + it.plemmas[i] = info[3]; + it.gpos[i] = info[4]; + + if (info.length < 5) + continue; + it.ppos[i] = info[5];// .split("\\|")[0]; + // feat 6 + + // now we try underscore + it.ofeats[i] = info[6].equals(CONLLWriter09.DASH) ? "_" : info[6]; + + if (info[7].equals(CONLLWriter09.DASH)) + it.feats[i] = null; + else { + it.feats[i] = info[7].split(PIPE); + it.pfeats[i] = info[7]; + } + + if (info[8].equals(US)) + it.heads[i] = -1; + else + it.heads[i] = Integer.parseInt(info[8]);// head + + it.pheads[i] = info[9].equals(US) ? it.pheads[i] = -1 : Integer.parseInt(info[9]);// head + + it.labels[i] = info[10]; + it.plabels[i] = info[11]; + it.fillp[i] = info[12]; + + if (info.length > 13) { + if (!info[13].equals(US)) + it.addPredicate(i, info[13]); + for (int k = 14; k < info.length; k++) + it.addArgument(i, k - 14, info[k]); + + } + + } + return it; + + } catch (Exception e) { + System.out.println("\n!!! Error in input file sentence before line: " + lineNumber + " (in sentence line " + + i + " ) " + e.toString()); + e.printStackTrace(); + System.exit(0); + + // throw new Exception(); + return null; + } + + } + + /** + * Read a instance an store it in a compressed format + * + * @param is + * @return + * @throws IOException + */ + final public SentenceData09 getNext(Instances is) { + + SentenceData09 it = getNext(); + + if (is != null) + insert(is, it); + + return it; + + } + + final public boolean insert(Instances is, SentenceData09 it) { + + try { + + if (it == null) { + inputReader.close(); + return false; + } + + int i = is.createInstance09(it.length()); + + for (int p = 0; p < it.length(); p++) { + + is.setForm(i, p, normalize(it.forms[p])); + // is.setFormOrg(i, p, it.forms[p]); + is.setGPos(i, p, it.gpos[p]); + + // System.out.println(""+is.gpos[i][p]); + + if (it.ppos[p] == null || it.ppos[p].equals(US)) { + + is.setPPoss(i, p, it.gpos[p]); + } else + is.setPPoss(i, p, it.ppos[p]); + + if (it.plemmas[p] == null || it.plemmas[p].equals(US)) { + is.setLemma(i, p, normalize(it.forms[p])); + } else + is.setLemma(i, p, normalize(it.plemmas[p])); + + if (it.lemmas != null) + if (it.lemmas[p] == null) { // ||it.org_lemmas[p].equals(US) + // that harms a lot the + // lemmatizer + is.setGLemma(i, p, it.plemmas[p]); + } else + is.setGLemma(i, p, it.lemmas[p]); + + if (it.feats != null && it.feats[p] != null) + is.setFeats(i, p, it.feats[p]); + + if (it.ofeats != null) + is.setFeature(i, p, it.ofeats[p]); + if (it.pfeats != null) + is.setPFeature(i, p, it.pfeats[p]); + + is.setRel(i, p, it.labels[p]); + if (it.plabels != null) + is.setPRel(i, p, it.plabels[p]); + + is.setHead(i, p, it.heads[p]); + if (it.pheads != null) + is.setPHead(i, p, it.pheads[p]); + + if (it.fillp != null && it.fillp[p] != null && it.fillp[p].startsWith("Y")) + is.pfill[i].set(p); + else + is.pfill[i].clear(p); + } + + if (is.createSem(i, it)) { + DB.println("count " + i + " len " + it.length()); + DB.println(it.printSem()); + } + } catch (Exception e) { + DB.println("head " + it); + e.printStackTrace(); + } + return true; + + } + + public String normalize(String s) { + if (!normalizeOn) + return s; + if (s.matches(NUMBER)) + return NUM; + return s; + } + +} diff --git a/dependencyParser/experimental/mate-tools/src/is2/io/CONLLWriter06.java b/dependencyParser/experimental/mate-tools/src/is2/io/CONLLWriter06.java new file mode 100755 index 0000000..24446b5 --- /dev/null +++ b/dependencyParser/experimental/mate-tools/src/is2/io/CONLLWriter06.java @@ -0,0 +1,199 @@ +package is2.io; + +import java.io.BufferedReader; +import java.io.BufferedWriter; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStreamReader; +import java.io.OutputStreamWriter; +import java.util.StringTokenizer; + +import is2.data.SentenceData09; +import is2.util.DB; + +public class CONLLWriter06 { + + public static final String DASH = "_"; + + protected BufferedWriter writer; + + public CONLLWriter06() { + } + + public static void main(String args[]) throws IOException { + + if (args.length == 2) { + File f = new File(args[0]); + File f2 = new File(args[1]); + // BufferedReader bf = new BufferedReader(new FileInputStream(new + // File(args[0]),"UTF-8"),32768); + BufferedReader ir = new BufferedReader(new InputStreamReader(new FileInputStream(f), "ISO-8859"), 32768); + BufferedWriter br = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(f2), "UTF-8")); + ; + boolean found = false; + boolean tab = false; + while (true) { + String l = ir.readLine(); + if (l == null) + break; + String x = l.trim(); + if (x.endsWith("\t")) + tab = true; + br.write(x); + br.newLine(); + if (!l.equals(x)) + found = true; + + } + ir.close(); + br.flush(); + br.close(); + + if (found) + DB.println("found diff. found tab? " + tab); + } else if (args.length == 3) { + File f1 = new File(args[1]); + File f2 = new File(args[2]); + + BufferedReader ir1 = new BufferedReader(new InputStreamReader(new FileInputStream(f1), "ISO-8859"), 32768); + BufferedReader ir2 = new BufferedReader(new InputStreamReader(new FileInputStream(f2), "UTF-8"), 32768); + + int line = 0, alltabs1 = 0, alltabs2 = 0; + while (true) { + String l1 = ir1.readLine(); + String l2 = ir2.readLine(); + + if (l1 == null && l2 != null) + DB.println("files do not end at the same line "); + if (l1 != null && l2 == null) + DB.println("files do not end at the same line "); + if (l1 == null) + break; + StringTokenizer t1 = new StringTokenizer(l1, "\t"); + StringTokenizer t2 = new StringTokenizer(l2, "\t"); + int tabs1 = 0; + while (t1.hasMoreTokens()) { + + t1.nextElement(); + tabs1++; + alltabs1++; + } + + int tabs2 = 0; + while (t2.hasMoreTokens()) { + + t2.nextElement(); + tabs2++; + alltabs2++; + } + line++; + if (tabs1 != tabs2) { + DB.println("number of tabs different in line " + line + " file1-tabs " + tabs1 + " file2-tabs " + + tabs2); + System.exit(0); + } + + } + ir1.close(); + ir2.close(); + DB.println("checked lines " + line + " with tabs in file 1 " + alltabs1 + " in file2 " + alltabs2); + + } else { + File f = new File(args[0]); + String[] dir = f.list(); + for (String fx : dir) { + BufferedReader ir = new BufferedReader( + new InputStreamReader(new FileInputStream(args[0] + File.separatorChar + fx), "UTF-8"), 32768); + System.out.println("check file " + fx); + while (true) { + String l = ir.readLine(); + if (l == null) + break; + if (l.endsWith("\t")) { + DB.println("found tab in file " + fx); + break; + } + } + ir.close(); + } + } + + } + + // public int version = CONLLReader09.TASK08; + + public CONLLWriter06(String file) { + + try { + writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file), "UTF-8")); + } catch (Exception e) { + e.printStackTrace(); + } + } + + public CONLLWriter06(String outfile, int formatTask) { + this(outfile); + // version = formatTask; + } + + public void write(SentenceData09 inst) throws IOException { + + for (int i = 0; i < inst.length(); i++) { + + writer.write(Integer.toString(i + 1)); + writer.write('\t'); // id + writer.write(inst.forms[i]); + writer.write('\t'); // form + + if (inst.lemmas != null && inst.lemmas[i] != null) { + writer.write(inst.lemmas[i]); + } else + writer.write(DASH); // lemma + writer.write('\t'); + + // writer.write(DASH); // cpos + // writer.write('\t'); + + writer.write(inst.gpos[i]); // cpos has to be included + writer.write('\t'); + + writer.write(inst.gpos[i]); // gpos + writer.write('\t'); + + if (inst.ofeats[i].isEmpty() || inst.ofeats[i].equals(" ")) + writer.write(DASH); + else + writer.write(inst.ofeats[i]); + writer.write('\t'); + + // writer.write(DASH); writer.write('\t'); // pfeat + + writer.write(Integer.toString(inst.heads[i])); + writer.write('\t'); // head + + if (inst.labels[i] != null) + writer.write(inst.labels[i]); // rel + else + writer.write(DASH); + writer.write('\t'); + + writer.write(DASH); + writer.write('\t'); + + writer.write(DASH); + writer.write('\t'); + + writer.newLine(); + } + writer.newLine(); + + } + + public void finishWriting() throws IOException { + writer.flush(); + writer.close(); + } + +} diff --git a/dependencyParser/experimental/mate-tools/src/is2/io/CONLLWriter09.java b/dependencyParser/experimental/mate-tools/src/is2/io/CONLLWriter09.java new file mode 100755 index 0000000..c28ab24 --- /dev/null +++ b/dependencyParser/experimental/mate-tools/src/is2/io/CONLLWriter09.java @@ -0,0 +1,334 @@ +package is2.io; + +import java.io.BufferedReader; +import java.io.BufferedWriter; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStreamReader; +import java.io.OutputStreamWriter; +import java.io.Writer; +import java.util.StringTokenizer; + +import is2.data.SentenceData09; +import is2.util.DB; + +public class CONLLWriter09 extends IOGenerals { + + int format = 0; + + public static final String DASH = "_"; + + public static final boolean NO_ROOT = true, ROOT = false; + + protected BufferedWriter writer; + + public CONLLWriter09() { + } + + public static void main(String args[]) throws IOException { + + if (args.length == 2) { + File f = new File(args[0]); + File f2 = new File(args[1]); + BufferedReader ir = new BufferedReader(new InputStreamReader(new FileInputStream(f), "UTF-8"), 32768); + BufferedWriter br = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(f2), "UTF8")); + ; + boolean found = false; + boolean tab = false; + while (true) { + String l = ir.readLine(); + if (l == null) + break; + String x = l.trim(); + if (x.endsWith("\t")) + tab = true; + br.write(x); + br.newLine(); + if (!l.equals(x)) + found = true; + + } + ir.close(); + br.flush(); + br.close(); + + if (found) + DB.println("found diff. found tab? " + tab); + } else if (args.length == 3) { + File f1 = new File(args[1]); + File f2 = new File(args[2]); + + BufferedReader ir1 = new BufferedReader(new InputStreamReader(new FileInputStream(f1), "UTF-8"), 32768); + BufferedReader ir2 = new BufferedReader(new InputStreamReader(new FileInputStream(f2), "UTF-8"), 32768); + + int line = 0, alltabs1 = 0, alltabs2 = 0; + while (true) { + String l1 = ir1.readLine(); + String l2 = ir2.readLine(); + + if (l1 == null && l2 != null) + DB.println("files do not end at the same line "); + if (l1 != null && l2 == null) + DB.println("files do not end at the same line "); + if (l1 == null) + break; + StringTokenizer t1 = new StringTokenizer(l1, "\t"); + StringTokenizer t2 = new StringTokenizer(l2, "\t"); + int tabs1 = 0; + while (t1.hasMoreTokens()) { + + t1.nextElement(); + tabs1++; + alltabs1++; + } + + int tabs2 = 0; + while (t2.hasMoreTokens()) { + + t2.nextElement(); + tabs2++; + alltabs2++; + } + line++; + if (tabs1 != tabs2) { + DB.println("number of tabs different in line " + line + " file1-tabs " + tabs1 + " file2-tabs " + + tabs2); + System.exit(0); + } + + } + ir1.close(); + ir2.close(); + DB.println("checked lines " + line + " with tabs in file 1 " + alltabs1 + " in file2 " + alltabs2); + + } else { + File f = new File(args[0]); + String[] dir = f.list(); + for (String fx : dir) { + BufferedReader ir = new BufferedReader( + new InputStreamReader(new FileInputStream(args[0] + File.separatorChar + fx), "UTF-8"), 32768); + System.out.println("check file " + fx); + while (true) { + String l = ir.readLine(); + if (l == null) + break; + if (l.endsWith("\t")) { + DB.println("found tab in file " + fx); + break; + } + } + ir.close(); + } + } + + } + + public CONLLWriter09(String file) { + + try { + writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file), "UTF8")); + } catch (Exception e) { + e.printStackTrace(); + } + } + + public CONLLWriter09(Writer writer) { + this.writer = new BufferedWriter(writer); + } + + public CONLLWriter09(String outfile, int formatTask) { + this(outfile); + } + + public void write(SentenceData09 inst) throws IOException { + write(inst, NO_ROOT); + } + + /** + * + * @param inst + * @param root + * true: remove root node + * @throws IOException + */ + public void write(SentenceData09 inst, boolean root) throws IOException { + + int i, mod; + if (root && (inst.forms[0].startsWith("<root") + || (inst.lemmas[0] != null && inst.lemmas[0].startsWith("<root")))) { + i = 1; + mod = 0; + } else { + i = 0; + mod = 1; + } + // =()?1:0; + + if (format == IOGenerals.F_ONE_LINE) { + boolean first = true; + for (; i < inst.length(); i++) { + if (first) { + first = false; + } else + writer.write(" "); + writer.write(inst.plemmas[i]); + } + writer.newLine(); + + return; + } + + for (; i < inst.length(); i++) { + + if (inst.id == null || inst.id[i] == null) { + writer.write(Integer.toString(i + mod)); + writer.write('\t'); + } // id + else { + writer.write(inst.id[i]); + writer.write('\t'); + } + + writer.write(inst.forms[i]); + writer.write('\t'); // form + + if (inst.lemmas != null && inst.lemmas[i] != null) { + writer.write(inst.lemmas[i]); + } else + writer.write(DASH); // lemma + writer.write('\t'); + + if (inst.plemmas != null && inst.plemmas[i] != null) + writer.write(inst.plemmas[i]); + else + writer.write(DASH); // plemma + writer.write('\t'); + + if (inst.gpos[i] != null) + writer.write(inst.gpos[i]); // gpos + else + writer.write(DASH); + writer.write('\t'); + + if (inst.ppos != null && inst.ppos[i] != null) + writer.write(inst.ppos[i]); + else + writer.write(DASH); // ppos + writer.write('\t'); + + if (inst.ofeats != null && inst.ofeats[i] != null) + writer.write(inst.ofeats[i]); + else + writer.write(DASH); + writer.write('\t'); + + // writer.write(DASH); writer.write('\t'); // feat + if (inst.pfeats != null && inst.pfeats[i] != null) { + // System.out.println(""+inst.pfeats[i]); + writer.write(inst.pfeats[i]); + } else + writer.write(DASH); + writer.write('\t'); + + writer.write(Integer.toString(inst.heads[i])); + writer.write('\t'); // head + + if (inst.pheads != null) + writer.write(Integer.toString(inst.pheads[i])); + else + writer.write(DASH); + writer.write('\t'); // phead + + if (inst.labels[i] != null) + writer.write(inst.labels[i]); // rel + else + writer.write(DASH); + writer.write('\t'); + + if (inst.plabels != null && inst.plabels[i] != null) + writer.write(inst.plabels[i]); // rel + else + writer.write(DASH); + writer.write('\t'); + + if (inst.fillp != null && inst.fillp[i] != null) + writer.write(inst.fillp[i]); // fill p + else { + writer.write(DASH); + } + + // writer.write('\t'); + + if (inst.sem == null) { + writer.write('\t'); + writer.write(DASH); + + } else { + + boolean foundPred = false; + // print the predicate + for (int p = 0; p < inst.sem.length; p++) { + if (inst.semposition[p] == i) { + foundPred = true; + // System.out.println("write pred "+inst.sem[p] ); + writer.write('\t'); + writer.write(inst.sem[p]); + + // if (inst.sem[p].startsWith(".")) DB.println("error + // "+inst.sem[p]); + } + } + + if (!foundPred) { + writer.write('\t'); + writer.write(DASH); + // writer.write('\t'); + // writer.write(DASH); + } + + // print the arguments + for (int p = 0; p < inst.sem.length; p++) { + + boolean found = false; + if (inst.arg != null && inst.arg.length > p && inst.arg[p] != null) + for (int a = 0; a < inst.arg[p].length; a++) { + + if (i == inst.argposition[p][a]) { + writer.write('\t'); + writer.write(inst.arg[p][a]); + found = true; + break; + } + + } + if (!found) { + writer.write('\t'); + writer.write(DASH); + } + + } + + } + writer.newLine(); + } + writer.newLine(); + } + + public void finishWriting() throws IOException { + writer.flush(); + writer.close(); + } + + /** + * Sets the output format such as CoNLL or one line for the lemmata of the + * sentence (see F_xxxx constants). + * + * @param formatTask + */ + public void setOutputFormat(int formatTask) { + format = formatTask; + } + +} diff --git a/dependencyParser/experimental/mate-tools/src/is2/io/IOGenerals.java b/dependencyParser/experimental/mate-tools/src/is2/io/IOGenerals.java new file mode 100644 index 0000000..030bedd --- /dev/null +++ b/dependencyParser/experimental/mate-tools/src/is2/io/IOGenerals.java @@ -0,0 +1,32 @@ +/** + * + */ +package is2.io; + +/** + * @author Dr. Bernd Bohnet, 18.08.2011 + * + * + */ +public class IOGenerals { + + // some constants + public static final String US = "_"; + public static final String REGEX = "\t"; + public static final String STRING = "*"; + public static final String PIPE = "\\|"; + public static final String NO_TYPE = "<no-type>"; + public static final String ROOT_POS = "<root-POS>"; + public static final String ROOT_LEMMA = "<root-LEMMA>"; + public static final String ROOT = "<root>"; + public static final String EMPTY_FEAT = "<ef>"; + + // the different readers + public static final int F_CONLL09 = 0; + public static final int F_ONE_LINE = 1; + + // normalization of the input + public static final String NUMBER = "[0-9]+|[0-9]+\\.[0-9]+|[0-9]+[0-9,]+"; + public static final String NUM = "<num>"; + +} diff --git a/dependencyParser/experimental/mate-tools/src/is2/io/PSReader.java b/dependencyParser/experimental/mate-tools/src/is2/io/PSReader.java new file mode 100644 index 0000000..5e8b1ad --- /dev/null +++ b/dependencyParser/experimental/mate-tools/src/is2/io/PSReader.java @@ -0,0 +1,23 @@ +/** + * + */ +package is2.io; + +import is2.data.PSTree; + +/** + * @author Dr. Bernd Bohnet, 07.02.2011 + * + * + */ +public interface PSReader { + + public PSTree getNext(); + + /** + * @param ps + * @param filter + */ + public void startReading(String ps, String[] filter); + +} diff --git a/dependencyParser/experimental/mate-tools/src/is2/io/TigerReader.java b/dependencyParser/experimental/mate-tools/src/is2/io/TigerReader.java new file mode 100644 index 0000000..10fa0ea --- /dev/null +++ b/dependencyParser/experimental/mate-tools/src/is2/io/TigerReader.java @@ -0,0 +1,208 @@ +/** + * + */ +package is2.io; + +import java.io.BufferedReader; +import java.io.File; +import java.io.FileInputStream; +import java.io.InputStreamReader; +import java.util.ArrayList; +import java.util.StringTokenizer; + +import is2.data.PSTree; + +/** + * @author Dr. Bernd Bohnet, 17.01.2011 + * + * Reads a sentences in Penn Tree Bank bracket style and return + * sentences. + */ +public class TigerReader implements PSReader { + + BufferedReader inputReader; + ArrayList<File> psFiles = new ArrayList<File>(); + ArrayList<PSTree> psCache = new ArrayList<PSTree>(); + + String filter[] = null; + int startFilter = -1; + int endFilter = -1; + + public TigerReader() { + } + + public TigerReader(String file) { + + try { + inputReader = new BufferedReader(new InputStreamReader(new FileInputStream(file), "ISO-8859-1"), 32768); + } catch (Exception e) { + e.printStackTrace(); + } + } + + /** + * @param ps + */ + @Override + public void startReading(String file, String[] filter) { + + try { + this.filter = filter; + startFilter = filter == null ? -1 : 1; + endFilter = filter == null ? -1 : 1; + + inputReader = new BufferedReader(new InputStreamReader(new FileInputStream(file), "ISO-8859-1"), 32768); + } catch (Exception e) { + e.printStackTrace(); + } + + } + + public static class Line { + String form; + String lemma; + String morph; + String pos; + int parent; + String edge; + + } + + static int stop = 0; + + /** + * @return + */ + @Override + public PSTree getNext() { + + PSTree ps = null; + String l = null; + ArrayList<Line> lines = new ArrayList<Line>(); + try { + int state = 1, terminals = 0, nonterminals = 0; + while ((l = inputReader.readLine()) != null) { + + if (startFilter == 1 && l.startsWith("#BOS " + filter[0])) { + System.out.println("found start " + l); + startFilter = 2; + } + if (endFilter == 1 && l.startsWith("#EOS " + filter[1])) { + System.out.println("found end " + l); + + endFilter = 2; + } + + if (startFilter == 1 || endFilter == 2) + continue; + + if (l.startsWith("#BOS")) { + + state = 2; + continue; + } + if (l.startsWith("#500")) + state = 3; + if (l.startsWith("#EOS")) + state = 4; + if (state < 2) + continue; + + if (state == 4) { + + ps = new PSTree(); + ps.create(terminals, nonterminals); + // System.out.println("terminals "+terminals); + // build ps tree + + int cnt = 0; + // ps.entries[0] =CONLLReader09.ROOT; + // ps.head[0]=-1; + int root = -1; + for (Line line : lines) { + + /* + * if (cnt==terminals) { // insert root root =cnt; + * cnt++; } + */ + ps.entries[cnt] = line.form; + if (cnt < terminals) + ps.pos[cnt] = line.pos; + else + ps.entries[cnt] = line.pos; + ps.lemmas[cnt] = line.lemma; + ps.head[cnt] = line.parent == 0 ? lines.size() - 1 + : line.parent >= 500 ? line.parent - 500 + terminals : line.parent; + // ps.head[cnt] = + // line.parent==0?lines.size()-1:line.parent>=500?line.parent-500+terminals:line.parent; + ps.morph[cnt] = line.morph; + cnt++; + + } + + if (root == -1) + root = terminals; + ps.head[cnt - 1] = 0; // root + ps.terminalCount = terminals; + lines.clear(); + state = 1; + + /* + * for(int k=0;k<ps.head.length;k++) { if + * (ps.head[k]<terminals && k!=root) { ps.head[k]=root; // + * DB.println("error "+k+" "+ps.head[k]); } } + */ + // System.out.println(""+ps.toString()); + // if (stop++ == 4)System.exit(0); + return ps; + } + + StringTokenizer t = new StringTokenizer(l, "\t"); + int tc = 0; + Line line = new Line(); + lines.add(line); + while (t.hasMoreTokens()) { + String token = t.nextToken(); + if (token.equals("\t")) + continue; + if (tc == 0) { + if (token.startsWith("#5") || token.startsWith("#6")) { + nonterminals++; + + } else { + terminals++; + + // change it back to the wrong format since the + // conll stuff was derived from this. + // if (token.equals("durchblicken")) + // token="durchblikken"; + line.form = token; + } + + } else if (tc == 1) { + line.lemma = token; + } else if (tc == 2) { + line.pos = token; + } else if (tc == 3) { + line.morph = token; + } else if (tc == 4) { + line.edge = token; + } else if (tc == 5) { + line.parent = Integer.parseInt(token); + } + + if (token.length() > 0) + tc++; + } + + // read till #EOS + + } + } catch (Exception e) { + e.printStackTrace(); + } + return ps; + + } + +} diff --git a/dependencyParser/experimental/mate-tools/src/is2/lemmatizer/Evaluator.java b/dependencyParser/experimental/mate-tools/src/is2/lemmatizer/Evaluator.java new file mode 100755 index 0000000..cc1b423 --- /dev/null +++ b/dependencyParser/experimental/mate-tools/src/is2/lemmatizer/Evaluator.java @@ -0,0 +1,108 @@ +package is2.lemmatizer; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.Comparator; +import java.util.Hashtable; +import java.util.Map.Entry; + +import is2.data.SentenceData09; +import is2.io.CONLLReader09; + +public class Evaluator { + + public static void evaluate(String act_file, String pred_file, String format) throws Exception { + + CONLLReader09 goldReader = new CONLLReader09(act_file, CONLLReader09.NO_NORMALIZE); + CONLLReader09 predictedReader = new CONLLReader09(pred_file, CONLLReader09.NO_NORMALIZE); + // predictedReader.startReading(pred_file); + + Hashtable<String, Integer> errors = new Hashtable<String, Integer>(); + + int total = 0, corrL = 0, corrT = 0; + int numsent = 0; + SentenceData09 goldInstance = goldReader.getNext(); + SentenceData09 predInstance = predictedReader.getNext(); + + while (goldInstance != null) { + + int instanceLength = goldInstance.length(); + + if (instanceLength != predInstance.length()) + System.out.println("Lengths do not match on sentence " + numsent); + + String gold[] = goldInstance.lemmas; + String pred[] = predInstance.plemmas; + + boolean whole = true; + boolean wholeL = true; + + // NOTE: the first item is the root info added during + // nextInstance(), so we skip it. + + for (int i = 1; i < instanceLength; i++) { + if (gold[i].toLowerCase().equals(pred[i].toLowerCase())) + corrT++; + + if (gold[i].equals(pred[i])) + corrL++; + else { + + // System.out.println("error gold:"+goldPos[i]+" + // pred:"+predPos[i]+" "+goldInstance.forms[i]+" snt + // "+numsent+" i:"+i); + String key = "gold: '" + gold[i] + "' pred: '" + pred[i] + "'"; + Integer cnt = errors.get(key); + if (cnt == null) { + errors.put(key, 1); + } else { + errors.put(key, cnt + 1); + } + } + + } + total += instanceLength - 1; // Subtract one to not score fake root + // token + + if (whole) { + } + if (wholeL) { + } + numsent++; + + goldInstance = goldReader.getNext(); + predInstance = predictedReader.getNext(); + } + ArrayList<Entry<String, Integer>> opsl = new ArrayList<Entry<String, Integer>>(); + for (Entry<String, Integer> e : errors.entrySet()) { + opsl.add(e); + } + + Collections.sort(opsl, new Comparator<Entry<String, Integer>>() { + + @Override + public int compare(Entry<String, Integer> o1, Entry<String, Integer> o2) { + + return o1.getValue() == o2.getValue() ? 0 : o1.getValue() > o2.getValue() ? 1 : -1; + } + + }); + + /* + * for(Entry<String, Integer> e : opsl) { + * System.out.println(e.getKey()+" "+e.getValue()); } + */ + + System.out.println("Tokens: " + total + " Correct: " + corrT + " " + (float) corrT / total + + " correct uppercase " + (float) corrL / total); + } + + public static void main(String[] args) throws Exception { + String format = "CONLL"; + if (args.length > 2) + format = args[2]; + + evaluate(args[0], args[1], format); + } + +} diff --git a/dependencyParser/experimental/mate-tools/src/is2/lemmatizer/Lemmatizer.java b/dependencyParser/experimental/mate-tools/src/is2/lemmatizer/Lemmatizer.java new file mode 100755 index 0000000..b15aaa7 --- /dev/null +++ b/dependencyParser/experimental/mate-tools/src/is2/lemmatizer/Lemmatizer.java @@ -0,0 +1,543 @@ +package is2.lemmatizer; + +import java.io.BufferedInputStream; +import java.io.BufferedOutputStream; +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.FileOutputStream; +import java.io.IOException; +import java.util.ArrayList; +import java.util.Collections; +import java.util.Comparator; +import java.util.HashMap; +import java.util.Map.Entry; +import java.util.zip.ZipEntry; +import java.util.zip.ZipInputStream; +import java.util.zip.ZipOutputStream; + +import is2.data.Cluster; +import is2.data.F2SF; +import is2.data.FV; +import is2.data.Instances; +import is2.data.InstancesTagger; +import is2.data.Long2Int; +import is2.data.ParametersFloat; +import is2.data.PipeGen; +import is2.data.SentenceData09; +import is2.io.CONLLReader09; +import is2.io.CONLLWriter09; +import is2.tools.IPipe; +import is2.tools.Tool; +import is2.tools.Train; +import is2.util.DB; +import is2.util.OptionsSuper; + +public class Lemmatizer implements Tool, Train { + + public Pipe pipe; + public ParametersFloat params; + private Long2Int li; + + private boolean doUppercase = false; + + private long[] vs = new long[40]; + + /** + * Creates a lemmatizer due to the model stored in modelFileName + * + * @param modelFileName + * the path and file name to a lemmatizer model + */ + public Lemmatizer(String modelFileName) { + + // tell the lemmatizer the location of the model + try { + Options m_options = new Options(new String[] { "-model", modelFileName }); + li = new Long2Int(m_options.hsize); + + // initialize the lemmatizer + readModel(m_options); + + } catch (IOException e) { + e.printStackTrace(); + } + } + + public Lemmatizer(boolean doUppercase) { + this.doUppercase = doUppercase; + } + + public static void main(String[] args) throws FileNotFoundException, Exception { + + Options options = new Options(args); + Lemmatizer lemmatizer = new Lemmatizer(options.upper); + + long start = System.currentTimeMillis(); + + if (options.train) { + + lemmatizer.li = new Long2Int(options.hsize); + lemmatizer.pipe = new Pipe(options, lemmatizer.li); + + InstancesTagger is = lemmatizer.pipe.createInstances(options.trainfile); + + DB.println("Features: " + lemmatizer.pipe.mf.size() + " Operations " + + lemmatizer.pipe.mf.getFeatureCounter().get(Pipe.OPERATION)); + + ParametersFloat params = new ParametersFloat(lemmatizer.li.size()); + + lemmatizer.train(options, lemmatizer.pipe, params, is); + + lemmatizer.writeModel(options, lemmatizer.pipe, params); + } + + if (options.test) { + + lemmatizer.readModel(options); + + lemmatizer.out(options, lemmatizer.pipe, lemmatizer.params); + } + + System.out.println(); + + if (options.eval) { + System.out.println("\nEVALUATION PERFORMANCE:"); + Evaluator.evaluate(options.goldfile, options.outfile, options.format); + } + long end = System.currentTimeMillis(); + System.out.println("used time " + ((float) ((end - start) / 100) / 10)); + } + + /* + * (non-Javadoc) + * + * @see is2.tools.Train#writeModel(is2.util.OptionsSuper, is2.tools.IPipe, + * is2.data.ParametersFloat) + */ + @Override + public void writeModel(OptionsSuper options, IPipe pipe, ParametersFloat params) { + try { + // store the model + ZipOutputStream zos = new ZipOutputStream( + new BufferedOutputStream(new FileOutputStream(options.modelName))); + zos.putNextEntry(new ZipEntry("data")); + DataOutputStream dos = new DataOutputStream(new BufferedOutputStream(zos)); + + MFO.writeData(dos); + + dos.flush(); + params.write(dos); + + pipe.write(dos); + + dos.writeBoolean(this.doUppercase); + + dos.flush(); + dos.close(); + } catch (Exception e) { + e.printStackTrace(); + } + } + + @Override + public void readModel(OptionsSuper options) { + + try { + + // load the model + ZipInputStream zis = new ZipInputStream(new BufferedInputStream(new FileInputStream(options.modelName))); + zis.getNextEntry(); + DataInputStream dis = new DataInputStream(new BufferedInputStream(zis)); + + MFO mf = new MFO(); + mf.read(dis); + params = new ParametersFloat(0); + params.read(dis); + li = new Long2Int(params.size()); + pipe = new Pipe(options, li); + pipe.mf = mf; + + pipe.initFeatures(); + pipe.initValues(); + + pipe.readMap(dis); + + for (Entry<String, Integer> e : MFO.getFeatureSet().get(Pipe.OPERATION).entrySet()) { + this.pipe.types[e.getValue()] = e.getKey(); + // System.out.println("set pos "+e.getKey()); + } + + pipe.cl = new Cluster(dis); + + if (dis.available() > 0) + this.doUppercase = dis.readBoolean(); + + dis.close(); + DB.println("Loading data finished. "); + + DB.println("number of params " + params.parameters.length); + DB.println("number of classes " + pipe.types.length); + + } catch (Exception e) { + e.printStackTrace(); + } + + } + + /** + * Do the training + * + * @param instanceLengths + * @param options + * @param pipe + * @param params + * @param li + * @throws IOException + * @throws InterruptedException + * @throws ClassNotFoundException + */ + @Override + public void train(OptionsSuper options, IPipe p, ParametersFloat params, Instances ist) { + + InstancesTagger is = (InstancesTagger) ist; + + int i = 0, del = 0; + FV g = new FV(), f = new FV(); + + int LC = this.pipe.types.length + 1, UC = LC + 1; + + String wds[] = MFO.reverse(MFO.getFeatureSet().get(PipeGen.WORD)); + + F2SF fs = params.getFV(); + double upd = 0; + + for (i = 0; i < options.numIters; i++) { + + System.out.print("Iteration " + i + ": "); + + long start = System.currentTimeMillis(); + int numInstances = is.size(); + int correct = 0, count = 0; + + long last = System.currentTimeMillis(); + int wrongOp = 0, correctOp = 0, correctUC = 0, wrongUC = 0; + + HashMap<String, Integer> map = new HashMap<String, Integer>(); + + for (int n = 0; n < numInstances; n++) { + + if ((n + 1) % 500 == 0) + del = PipeGen.outValueErr(n + 1, count - correct, (float) correct / (float) count, del, last, upd); + + upd = options.numIters * numInstances - (numInstances * i + (n + 1)) + 1; + + for (int k = 0; k < is.length(n); k++) { + + double best = -1000; + String bestOp = ""; + + count++; + pipe.addCoreFeatures(is, n, k, 0, wds[is.forms[n][k]], vs); + + String lemma = pipe.opse.get(wds[is.forms[n][k]].toLowerCase()); + + // predict + if (lemma == null) + for (int t = 0; t < pipe.types.length; t++) { + + fs.clear(); + for (int l = vs.length - 1; l >= 0; l--) + if (vs[l] > 0) + fs.add(li.l2i(vs[l] + (t * Pipe.s_type))); + + float score = (float) fs.getScore(); + if (score > best) { + bestOp = pipe.types[t]; + best = score; + } + } + + if (doUppercase) { + fs.clear(); + for (int l = vs.length - 1; l >= 0; l--) + if (vs[l] > 0) + fs.add(li.l2i(vs[l] + (LC * Pipe.s_type))); + + int correctOP = -1, selectedOP = -1; + if (wds[is.glemmas[n][k]].length() > 0 && Character.isUpperCase(wds[is.glemmas[n][k]].charAt(0)) + && fs.score > 0) { + + correctOP = UC; + selectedOP = LC; + } else if (wds[is.glemmas[n][k]].length() > 0 + && Character.isLowerCase(wds[is.glemmas[n][k]].charAt(0)) && fs.score <= 0) { + + correctOP = LC; + selectedOP = UC; + } + + if (correctOP != -1 && wds[is.glemmas[n][k]].length() > 0) { + + wrongUC++; + f.clear(); + for (int l = vs.length - 1; l >= 0; l--) + if (vs[l] > 0) + f.add(li.l2i(vs[l] + (selectedOP * Pipe.s_type))); + + g.clear(); + for (int l = vs.length - 1; l >= 0; l--) + if (vs[l] > 0) + g.add(li.l2i(vs[l] + (correctOP * Pipe.s_type))); + + double lam_dist = params.getScore(g) - params.getScore(f);// f + double loss = 1 - lam_dist; + + FV dist = g.getDistVector(f); + dist.update(params.parameters, params.total, params.update(dist, loss), upd, false); + + } else { + correctUC++; + } + } + if (lemma != null) { + correct++; + correctOp++; + continue; + } + + String op = Pipe.getOperation(is, n, k, wds); + if (op.equals(bestOp)) { + correct++; + correctOp++; + continue; + } + wrongOp++; + + f.clear(); + int bop = pipe.mf.getValue(Pipe.OPERATION, bestOp); + for (int r = vs.length - 1; r >= 0; r--) + if (vs[r] > 0) + f.add(li.l2i(vs[r] + (bop * Pipe.s_type))); + + g.clear(); + int gop = pipe.mf.getValue(Pipe.OPERATION, op); + for (int r = vs.length - 1; r >= 0; r--) + if (vs[r] > 0) + g.add(li.l2i(vs[r] + (gop * Pipe.s_type))); + double lam_dist = params.getScore(g) - params.getScore(f);// f + + double loss = 1 - lam_dist; + + FV dist = g.getDistVector(f); + + dist.update(params.parameters, params.total, params.update(dist, loss), upd, false); // 0.05 + + } + + } + ArrayList<Entry<String, Integer>> opsl = new ArrayList<Entry<String, Integer>>(); + for (Entry<String, Integer> e : map.entrySet()) { + if (e.getValue() > 1) { + opsl.add(e); + } + } + + Collections.sort(opsl, new Comparator<Entry<String, Integer>>() { + @Override + public int compare(Entry<String, Integer> o1, Entry<String, Integer> o2) { + + return o1.getValue() == o2.getValue() ? 0 : o1.getValue() > o2.getValue() ? 1 : -1; + } + }); + + if (opsl.size() > 0) + System.out.println(); + for (Entry<String, Integer> e : opsl) { + System.out.println(e.getKey() + " " + e.getValue()); + } + map.clear(); + + del = PipeGen.outValueErr(numInstances, count - correct, (float) correct / (float) count, del, last, upd, + "time " + (System.currentTimeMillis() - start) + " corr/wrong " + correctOp + " " + wrongOp + + " uppercase corr/wrong " + correctUC + " " + wrongUC); + del = 0; + System.out.println(); + } + + params.average(i * is.size()); + + } + + /** + * Do the work + * + * @param options + * @param pipe + * @param params + * @throws IOException + */ + @Override + public void out(OptionsSuper options, IPipe pipe, ParametersFloat params) { + + long start = System.currentTimeMillis(); + + CONLLReader09 depReader = new CONLLReader09(options.testfile, CONLLReader09.NO_NORMALIZE); + depReader.setInputFormat(options.formatTask); + CONLLWriter09 depWriter = new CONLLWriter09(options.outfile); + depWriter.setOutputFormat(options.formatTask); + + System.out.print("Processing Sentence: "); + + int cnt = 0; + int del = 0; + + try { + + while (true) { + + InstancesTagger is = new InstancesTagger(); + + is.init(1, new MFO()); + SentenceData09 instance = depReader.getNext(is);// pipe.nextInstance(null, + // depReader); + + if (instance == null) + break; + is.fillChars(instance, 0, Pipe._CEND); + cnt++; + SentenceData09 i09 = lemmatize(is, instance, this.li); + + if (options.normalize) + for (int k = 0; k < i09.length(); k++) { + boolean save = depReader.normalizeOn; + depReader.normalizeOn = true; + i09.plemmas[k] = depReader.normalize(i09.plemmas[k]); + depReader.normalizeOn = save; + } + + if (options.overwritegold) + i09.lemmas = i09.plemmas; + + depWriter.write(i09); + + if (cnt % 100 == 0) + del = PipeGen.outValue(cnt, del); + + } + depWriter.finishWriting(); + del = PipeGen.outValue(cnt, del); + long end = System.currentTimeMillis(); + + System.out.println(PipeGen.getSecondsPerInstnace(cnt, (end - start))); + System.out.println(PipeGen.getUsedTime(end - start)); + } catch (Exception e) { + e.printStackTrace(); + } + } + + private SentenceData09 lemmatize(InstancesTagger is, SentenceData09 instance, Long2Int li) { + + int LC = pipe.types.length + 1; + + is.feats[0] = new short[instance.length()][11]; + + is.fillChars(instance, 0, Pipe._CEND); + + int length = instance.length(); + + F2SF fs = new F2SF(params.parameters); + + for (int w1 = 0; w1 < length; w1++) { + instance.plemmas[w1] = "_"; + pipe.addCoreFeatures(is, 0, w1, 0, instance.forms[w1], vs); + + String f = null; + if (is.forms[0][w1] != -1) { + f = pipe.opse.get(instance.forms[w1].toLowerCase()); + if (f != null) { + instance.plemmas[w1] = f; + } + } + double best = -1000.0; + int bestOp = 0; + + for (int t = 0; t < pipe.types.length; t++) { + + fs.clear(); + for (int l = vs.length - 1; l >= 0; l--) + if (vs[l] > 0) + fs.add(li.l2i(vs[l] + (t * Pipe.s_type))); + + if (fs.score >= best) { + best = fs.score; + bestOp = t; + } + } + // instance.ppos[w1]=""+bestOp; + if (f == null) + instance.plemmas[w1] = StringEdit.change( + (doUppercase ? instance.forms[w1] : instance.forms[w1].toLowerCase()), pipe.types[bestOp]); + + // check for empty string + if (instance.plemmas[w1].length() == 0) + instance.plemmas[w1] = "_"; + + if (doUppercase) { + fs.clear(); + for (int l = vs.length - 1; l >= 0; l--) + if (vs[l] > 0) + fs.add(li.l2i(vs[l] + (LC * Pipe.s_type))); + + try { + + if (fs.score <= 0 && instance.plemmas[w1].length() > 1) { + instance.plemmas[w1] = Character.toUpperCase(instance.plemmas[w1].charAt(0)) + + instance.plemmas[w1].substring(1); + } else if (fs.score <= 0 && instance.plemmas[w1].length() > 0) { + instance.plemmas[w1] = String.valueOf(Character.toUpperCase(instance.plemmas[w1].charAt(0))); + } else if (fs.score > 0) { + instance.plemmas[w1] = instance.plemmas[w1].toLowerCase(); + } + + } catch (Exception e) { + e.printStackTrace(); + // System.out.println("error "+pipe.types[bestOp]+" + // "+instance.forms[w1]); + } + } + } + + SentenceData09 i09 = new SentenceData09(instance); + i09.createSemantic(instance); + return i09; + } + + /* + * (non-Javadoc) + * + * @see is2.tools.Tool#apply(is2.data.SentenceData09) + */ + @Override + public SentenceData09 apply(SentenceData09 snt) { + InstancesTagger is = new InstancesTagger(); + + // be robust + if (snt.length() == 0) + return snt; + + SentenceData09 it = new SentenceData09(); + it.createWithRoot(snt); + + is.init(1, new MFO()); + is.createInstance09(it.length()); + is.fillChars(it, 0, Pipe._CEND); + + for (int j = 0; j < it.length(); j++) + is.setForm(0, j, it.forms[j]); + + return lemmatize(is, it, li); + } + +} diff --git a/dependencyParser/experimental/mate-tools/src/is2/lemmatizer/MFO.java b/dependencyParser/experimental/mate-tools/src/is2/lemmatizer/MFO.java new file mode 100755 index 0000000..305e827 --- /dev/null +++ b/dependencyParser/experimental/mate-tools/src/is2/lemmatizer/MFO.java @@ -0,0 +1,246 @@ +package is2.lemmatizer; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; +import java.util.HashMap; +import java.util.Map.Entry; + +import is2.data.IEncoderPlus; +import is2.util.DB; + +/** + * Map Features, do not map long to integer + * + * @author Bernd Bohnet, 20.09.2009 + */ + +final public class MFO implements IEncoderPlus { + + /** The features and its values */ + static private final HashMap<String, HashMap<String, Integer>> m_featureSets = new HashMap<String, HashMap<String, Integer>>(); + + /** The feature class and the number of values */ + static private final HashMap<String, Integer> m_featureCounters = new HashMap<String, Integer>(); + + /** The number of bits needed to encode a feature */ + static final HashMap<String, Integer> m_featureBits = new HashMap<String, Integer>(); + + /** Integer counter for long2int */ + static private int count = 0; + + /** Stop growing */ + public boolean stop = false; + + final public static String NONE = "<None>"; + + public MFO() { + } + + public int size() { + return count; + } + + /** + * Register an attribute class, if it not exists and add a possible value + * + * @param type + * @param type2 + */ + @Override + final public int register(String a, String v) { + + HashMap<String, Integer> fs = getFeatureSet().get(a); + if (fs == null) { + fs = new HashMap<String, Integer>(); + getFeatureSet().put(a, fs); + fs.put(NONE, 0); + getFeatureCounter().put(a, 1); + } + Integer c = getFeatureCounter().get(a); + + Integer i = fs.get(v); + if (i == null) { + fs.put(v, c); + c++; + getFeatureCounter().put(a, c); + return c - 1; + } else + return i; + } + + /** + * Calculates the number of bits needed to encode a feature + */ + public void calculateBits() { + + for (Entry<String, Integer> e : getFeatureCounter().entrySet()) { + int bits = (int) Math.ceil((Math.log(e.getValue() + 1) / Math.log(2))); + m_featureBits.put(e.getKey(), bits); + } + + // System.out.println("total number of needed bits "+total); + } + + @Override + public String toString() { + + StringBuffer content = new StringBuffer(); + for (Entry<String, Integer> e : getFeatureCounter().entrySet()) { + content.append(e.getKey() + " " + e.getValue()); + content.append(':'); + // HashMap<String,Integer> vs = getFeatureSet().get(e.getKey()); + content.append(getFeatureBits(e.getKey())); + + /* + * if (vs.size()<120) for(Entry<String,Integer> e2 : vs.entrySet()) + * { content.append(e2.getKey()+" ("+e2.getValue()+") "); } + */ + content.append('\n'); + + } + return content.toString(); + } + + static final public short getFeatureBits(String a) { + if (m_featureBits.get(a) == null) + return 0; + return (short) m_featureBits.get(a).intValue(); + } + + /** + * Get the integer place holder of the string value v of the type a + * + * @param t + * the type + * @param v + * the value + * @return the integer place holder of v + */ + @Override + final public int getValue(String t, String v) { + + if (m_featureSets.get(t) == null) + return -1; + Integer vi = m_featureSets.get(t).get(v); + if (vi == null) + return -1; // stop && + return vi.intValue(); + } + + /** + * Static version of getValue + * + * @see getValue + */ + static final public int getValueS(String a, String v) { + + if (m_featureSets.get(a) == null) + return -1; + Integer vi = m_featureSets.get(a).get(v); + if (vi == null) + return -1; // stop && + return vi.intValue(); + } + + public int hasValue(String a, String v) { + + Integer vi = m_featureSets.get(a).get(v); + if (vi == null) + return -1; + return vi.intValue(); + } + + public static String printBits(int k) { + StringBuffer s = new StringBuffer(); + for (int i = 0; i < 31; i++) { + s.append((k & 0x00000001) == 1 ? '1' : '0'); + k = k >> 1; + + } + s.reverse(); + return s.toString(); + } + + /** + * Maps a long to a integer value. This is very useful to save memory for + * sparse data long values + * + * @param l + * @return the integer + */ + static public int misses = 0; + static public int good = 0; + + /** + * Write the data + * + * @param dos + * @throws IOException + */ + static public void writeData(DataOutputStream dos) throws IOException { + dos.writeInt(getFeatureSet().size()); + // DB.println("write"+getFeatureSet().size()); + for (Entry<String, HashMap<String, Integer>> e : getFeatureSet().entrySet()) { + dos.writeUTF(e.getKey()); + dos.writeInt(e.getValue().size()); + + for (Entry<String, Integer> e2 : e.getValue().entrySet()) { + + if (e2.getKey() == null) + DB.println("key " + e2.getKey() + " value " + e2.getValue() + " e -key " + e.getKey()); + dos.writeUTF(e2.getKey()); + dos.writeInt(e2.getValue()); + + } + + } + } + + public void read(DataInputStream din) throws IOException { + + int size = din.readInt(); + for (int i = 0; i < size; i++) { + String k = din.readUTF(); + int size2 = din.readInt(); + + HashMap<String, Integer> h = new HashMap<String, Integer>(); + getFeatureSet().put(k, h); + for (int j = 0; j < size2; j++) { + h.put(din.readUTF(), din.readInt()); + } + getFeatureCounter().put(k, size2); + } + + count = size; + // stop(); + calculateBits(); + } + + /** + * Clear the data + */ + static public void clearData() { + getFeatureSet().clear(); + m_featureBits.clear(); + getFeatureSet().clear(); + } + + @Override + public HashMap<String, Integer> getFeatureCounter() { + return m_featureCounters; + } + + static public HashMap<String, HashMap<String, Integer>> getFeatureSet() { + return m_featureSets; + } + + static public String[] reverse(HashMap<String, Integer> v) { + String[] set = new String[v.size()]; + for (Entry<String, Integer> e : v.entrySet()) { + set[e.getValue()] = e.getKey(); + } + return set; + } + +} diff --git a/dependencyParser/experimental/mate-tools/src/is2/lemmatizer/Options.java b/dependencyParser/experimental/mate-tools/src/is2/lemmatizer/Options.java new file mode 100755 index 0000000..30c2567 --- /dev/null +++ b/dependencyParser/experimental/mate-tools/src/is2/lemmatizer/Options.java @@ -0,0 +1,72 @@ +package is2.lemmatizer; + +import java.io.File; +import java.io.IOException; + +import is2.util.OptionsSuper; + +public final class Options extends OptionsSuper { + + public Options(String[] args) throws IOException { + + for (int i = 0; i < args.length; i++) { + + if (args[i].equals("--help")) + explain(); + + if (args[i].equals("-normalize")) { + normalize = Boolean.parseBoolean(args[++i]); + } else if (args[i].equals("-features")) { + features = args[i + 1]; + i++; + } else if (args[i].equals("-hsize")) { + hsize = Integer.parseInt(args[i + 1]); + i++; + } else if (args[i].equals("-len")) { + maxLen = Integer.parseInt(args[i + 1]); + i++; + } else if (args[i].equals("-tmp")) { + tmp = args[i + 1]; + i++; + } else if (args[i].equals("-uc")) { + upper = true; + System.out.println("set uppercase " + upper); + + } else + super.addOption(args, i); + + } + + if (trainfile != null) { + + if (tmp != null) + trainforest = File.createTempFile("train", ".tmp", new File(tmp)); + else + trainforest = File.createTempFile("train", ".tmp"); // ,new + // File("F:\\") + trainforest.deleteOnExit(); + } + + } + + private void explain() { + System.out.println("Usage: "); + System.out.println("java -class mate.jar is2.lemmatizer.Lemmatizer [Options]"); + System.out.println(); + System.out.println("Options:"); + System.out.println(""); + System.out.println(" -train <file> the corpus a model is trained on; default " + this.trainfile); + System.out.println(" -test <file> the input corpus for testing; default " + this.testfile); + System.out.println(" -out <file> the output corpus (result) of a test run; default " + this.outfile); + System.out.println(" -model <file> the parsing model for traing the model is stored in the files"); + System.out.println( + " and for parsing the model is load from this file; default " + this.modelName); + System.out.println( + " -i <number> the number of training iterations; good numbers are 10 for smaller corpora and 6 for bigger; default " + + this.numIters); + System.out.println(" -count <number> the n first sentences of the corpus are take for the training default " + + this.count); + + System.exit(0); + } +} diff --git a/dependencyParser/experimental/mate-tools/src/is2/lemmatizer/Pipe.java b/dependencyParser/experimental/mate-tools/src/is2/lemmatizer/Pipe.java new file mode 100755 index 0000000..c8b4bba --- /dev/null +++ b/dependencyParser/experimental/mate-tools/src/is2/lemmatizer/Pipe.java @@ -0,0 +1,671 @@ +package is2.lemmatizer; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +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.Map.Entry; + +import is2.data.Cluster; +import is2.data.D4; +import is2.data.Instances; +import is2.data.InstancesTagger; +import is2.data.Long2Int; +import is2.data.PipeGen; +import is2.data.SentenceData09; +import is2.io.CONLLReader09; +import is2.tools.IPipe; +import is2.util.DB; +import is2.util.OptionsSuper; + +final public class Pipe extends PipeGen implements IPipe { + + private static final int _MIN_WORDS_MAPPED_BY_SCRIPT = 1; + private static final int _MIN_OCCURENT_FOR_SCRIPT_USE = 4; + + private static final String _F0 = "F0"; + private static final String _F1 = "F1", _F2 = "F2", _F3 = "F3", _F4 = "F4", _F5 = "F5", _F6 = "F6", _F7 = "F7", + _F8 = "F8", _F9 = "F9", _F10 = "F10"; + private static final String _F11 = "F11", _F12 = "F12", _F13 = "F13", _F14 = "F14", _F15 = "F15", _F16 = "F16", + _F17 = "F17", _F18 = "F18", _F19 = "F19", _F20 = "F20"; + private static final String _F21 = "F21", _F22 = "F22", _F23 = "F23", _F24 = "F24", _F25 = "F25", _F26 = "F26", + _F27 = "F27", _F28 = "F28", _F29 = "F29", _F30 = "F30"; + private static final String _F31 = "F31", _F32 = "F32", _F33 = "F33", _F34 = "F34", _F35 = "F35", _F36 = "F36", + _F37 = "F37", _F38 = "F38"; + private static int _f0, _f1, _f4, _f5, _f6, _f7, _f8, _f9, _f10, _f11, _f12, _f13, _f14, _f15, _f16, _f17, _f18, + _f19; + private static int _f21, _f27, _f28, _f31, _f32, _f33; + public static int _CEND, _swrd, _ewrd; + + public static final String MID = "MID", END = "END", STR = "STR", OPERATION = "OP"; + + private CONLLReader09 depReader; + + public HashMap<String, String> opse = new HashMap<String, String>(); + + public String[] types; + + public MFO mf = new MFO(); + private D4 z, x; + + Cluster cl; + OptionsSuper options; + Long2Int li; + + public Pipe(OptionsSuper options2, Long2Int l) { + + options = options2; + li = l; + } + + @Override + public InstancesTagger createInstances(String file) { + + InstancesTagger is = new InstancesTagger(); + + depReader = new CONLLReader09(CONLLReader09.NO_NORMALIZE); + + depReader.startReading(file); + mf.register(REL, "<root-type>"); + mf.register(POS, "<root-POS>"); + + System.out.print("Registering feature parts "); + HashMap<String, Integer> ops = new HashMap<String, Integer>(); + HashMap<String, HashSet<String>> op2form = new HashMap<String, HashSet<String>>(); + int ic = 0; + int del = 0; + HashSet<String> rm = new HashSet<String>(); + + while (true) { + SentenceData09 instance1 = depReader.getNext(); + if (instance1 == null) + break; + ic++; + if (ic % 100 == 0) { + del = outValue(ic, del); + } + + String[] labs1 = instance1.labels; + for (String element : labs1) { + // typeAlphabet.lookupIndex(labs1[i1]); + mf.register(REL, element); + } + + String[] w = instance1.forms; + for (int i1 = 0; i1 < w.length; i1++) { + // saw the first time? + if (mf.getValue(WORD, w[i1].toLowerCase()) == -1) + opse.put(instance1.forms[i1].toLowerCase(), instance1.lemmas[i1]); + + mf.register(WORD, w[i1].toLowerCase()); + } + for (String element : w) + mf.register(WORD, element); + + w = instance1.lemmas; + for (String element : w) + mf.register(WORD, element); + for (String element : w) + mf.register(WORD, element.toLowerCase()); + + w = instance1.plemmas; + for (String element : w) + mf.register(WORD, element); + for (String element : w) + mf.register(WORD, element.toLowerCase()); + + for (String element : w) + registerChars(CHAR, element); + + w = instance1.ppos; + for (String element : w) + mf.register(POS, element); + + w = instance1.gpos; + for (String element : w) + mf.register(POS, element); + + for (int i1 = 1; i1 < w.length; i1++) { + String op = getOperation(instance1, i1); + if (ops.get(op) == null) + ops.put(op, 1); + else { + ops.put(op, (ops.get(op) + 1)); + if (ops.get(op) > 4) + rm.add(instance1.forms[i1].toLowerCase()); + } + + HashSet<String> forms = op2form.get(op); + if (forms == null) { + forms = new HashSet<String>(); + op2form.put(op, forms); + } + forms.add(instance1.forms[i1].toLowerCase()); + + } + + } + + int countFreqSingleMappings = 0; + + int sc = 0; + ArrayList<Entry<String, Integer>> opsl = new ArrayList<Entry<String, Integer>>(); + for (Entry<String, Integer> e : ops.entrySet()) { + + // do not use scripts for infrequent cases or frequent single + // mappings (der -> die) + if (e.getValue() > _MIN_OCCURENT_FOR_SCRIPT_USE + && op2form.get(e.getKey()).size() > _MIN_WORDS_MAPPED_BY_SCRIPT) { + mf.register(OPERATION, e.getKey()); + sc++; + opsl.add(e); + } else { + // do not remove the infrequent cases + rm.removeAll(op2form.get(e.getKey())); + + if (op2form.get(e.getKey()).size() <= 1) + countFreqSingleMappings += op2form.get(e.getKey()).size(); + } + } + for (String k : rm) { + opse.remove(k); + } + + Collections.sort(opsl, new Comparator<Entry<String, Integer>>() { + + @Override + public int compare(Entry<String, Integer> o1, Entry<String, Integer> o2) { + + return o1.getValue() == o2.getValue() ? 0 : o1.getValue() > o2.getValue() ? 1 : -1; + } + }); + + /* + * for(Entry<String, Integer> e : opsl) { + * System.out.println(e.getKey()+" "+e.getValue()); } + */ + + if (options.clusterFile == null) + cl = new Cluster(); + else + cl = new Cluster(options.clusterFile, mf, 6); + + System.out.println("\nfound scripts " + ops.size() + " used scripts " + sc); + System.out.println("found mappings of single words " + countFreqSingleMappings); + System.out.println("use word maps instead of scripts " + this.opse.size()); + // System.out.println(" "+opse); + System.out.println("" + mf.toString()); + + initFeatures(); + + mf.calculateBits(); + initValues(); + + depReader.startReading(options.trainfile); + + int i = 0; + long start1 = System.currentTimeMillis(); + + System.out.print("Creating Features: "); + is.init(ic, mf); + del = 0; + while (true) { + try { + if (i % 100 == 0) { + del = outValue(i, del); + } + SentenceData09 instance1 = depReader.getNext(is); + if (instance1 == null) + break; + + is.fillChars(instance1, i, _CEND); + + if (i > options.count) + break; + + i++; + } catch (Exception e) { + DB.println("error in sentnence " + i); + e.printStackTrace(); + } + } + long end1 = System.currentTimeMillis(); + System.gc(); + long mem2 = Runtime.getRuntime().totalMemory() - Runtime.getRuntime().freeMemory(); + System.out.print(" time " + (end1 - start1) + " mem " + (mem2 / 1024) + " kb"); + + types = new String[mf.getFeatureCounter().get(OPERATION)]; + + for (Entry<String, Integer> e : MFO.getFeatureSet().get(OPERATION).entrySet()) { + types[e.getValue()] = e.getKey(); + // System.out.println("set pos "+e.getKey()); + } + + System.out.println("Num Features: " + mf.size()); + + return is; + + } + + /** + * @param is + * @param n + * @param k + * @param wds + * @return + */ + public static String getOperation(Instances is, int n, int k, String[] wds) { + + String form = wds[is.forms[n][k]]; + String olemma = wds[is.glemmas[n][k]]; + + String s = new StringBuffer(form.toLowerCase()).reverse().toString(); + String t = new StringBuffer(olemma.toLowerCase()).reverse().toString(); + + return getOperation2(s, t); + } + + public static String getOperation(SentenceData09 instance1, int i1) { + String s = new StringBuffer(instance1.forms[i1].toLowerCase()).reverse().toString(); + String t = new StringBuffer(instance1.lemmas[i1].toLowerCase()).reverse().toString(); + + return getOperation2(s, t); + } + + public static String getOperation(String si, String ti) { + String s = new StringBuffer(si.toLowerCase()).reverse().toString(); + String t = new StringBuffer(ti.toLowerCase()).reverse().toString(); + + return getOperation2(s, t); + } + + private static String getOperation2(String s, String t) { + StringBuffer po = new StringBuffer(); + String op; + if (!s.equals(t)) { + + int[][] d = StringEdit.LD(s, t); + StringEdit.searchPath(s, t, d, po, false); + op = po.toString(); + + } else + op = "0"; // do nothing + return op; + } + + private void registerChars(String type, String word) { + for (int i = 0; i < word.length(); i++) + mf.register(type, Character.toString(word.charAt(i))); + } + + @Override + public void initValues() { + + z = new D4(li); + + x = new D4(li); + x.a0 = s_type; + + s_pos = mf.getFeatureCounter().get(POS).intValue();// mf.getFeatureBits(POS); + s_word = mf.getFeatureCounter().get(WORD); + s_type = mf.getFeatureCounter().get(TYPE).intValue();// mf.getFeatureBits(TYPE); + s_char = mf.getFeatureCounter().get(CHAR).intValue();// mf.getFeatureBits(CHAR); + s_oper = mf.getFeatureCounter().get(OPERATION).intValue();// mf.getFeatureBits(OPERATION); + + types = new String[mf.getFeatureCounter().get(Pipe.OPERATION)]; + for (Entry<String, Integer> e : MFO.getFeatureSet().get(Pipe.OPERATION).entrySet()) + types[e.getValue()] = e.getKey(); + + // wds = new String[mf.getFeatureCounter().get(Pipe.WORD)]; + // for(Entry<String,Integer> e : + // mf.getFeatureSet().get(Pipe.WORD).entrySet()) wds[e.getValue()] = + // e.getKey(); + + z.a0 = s_type; + z.a1 = s_oper; + z.a2 = s_char; + z.a3 = s_char; + z.a4 = s_char; + z.a5 = s_char; + z.a6 = s_char; + z.a7 = s_char; + x.a0 = s_type; + x.a1 = s_oper; + x.a2 = s_word; + x.a3 = s_word; + x.a4 = s_word; + x.a5 = s_char; + x.a6 = s_char; + x.a7 = s_char; + + } + + public static int s_pos, s_word, s_type, s_dir, s_dist, s_char, s_oper; + + /** + * Initialize the features. + * + * @param maxFeatures + */ + @Override + public void initFeatures() { + + for (int k = 0; k < 50; k++) { + mf.register(TYPE, "F" + k); + } + + _f0 = mf.register(TYPE, _F0); + _f1 = mf.register(TYPE, _F1); + mf.register(TYPE, _F2); + mf.register(TYPE, _F3); + _f4 = mf.register(TYPE, _F4); + _f5 = mf.register(TYPE, _F5); + _f6 = mf.register(TYPE, _F6); + _f7 = mf.register(TYPE, _F7); + _f8 = mf.register(TYPE, _F8); + _f9 = mf.register(TYPE, _F9); + _f10 = mf.register(TYPE, _F10); + _f11 = mf.register(TYPE, _F11); + _f12 = mf.register(TYPE, _F12); + _f13 = mf.register(TYPE, _F13); + _f14 = mf.register(TYPE, _F14); + _f15 = mf.register(TYPE, _F15); + _f16 = mf.register(TYPE, _F16); + _f17 = mf.register(TYPE, _F17); + _f18 = mf.register(TYPE, _F18); + _f19 = mf.register(TYPE, _F19); + mf.register(TYPE, _F20); + _f21 = mf.register(TYPE, _F21); + mf.register(TYPE, _F22); + mf.register(TYPE, _F23); + mf.register(TYPE, _F24); + mf.register(TYPE, _F25); + mf.register(TYPE, _F26); + _f27 = mf.register(TYPE, _F27); + _f28 = mf.register(TYPE, _F28); + mf.register(TYPE, _F29); + mf.register(TYPE, _F30); + + _f31 = mf.register(TYPE, _F31); + _f32 = mf.register(TYPE, _F32); + _f33 = mf.register(TYPE, _F33); + mf.register(TYPE, _F34); + + mf.register(TYPE, _F35); + mf.register(TYPE, _F36); + mf.register(TYPE, _F37); + mf.register(TYPE, _F38); + + mf.register(POS, MID); + mf.register(POS, STR); + mf.register(POS, END); + mf.register(TYPE, CHAR); + + _swrd = mf.register(WORD, STR); + _ewrd = mf.register(WORD, END); + + _CEND = mf.register(CHAR, END); + + } + + final public void addCoreFeatures(InstancesTagger is, int ic, int i, int oper, String form, long[] f) { + + for (int l = f.length - 1; l >= 0; l--) + f[l] = 0; + + int formi = is.forms[ic][i]; + int wl = is.chars[ic][i][11];// .forms[i].length(); + + int position = 1 + (i < 3 ? i : 3); + + int c0 = is.chars[ic][i][0], c1 = is.chars[ic][i][1], c2 = is.chars[ic][i][2], c3 = is.chars[ic][i][3], + c4 = is.chars[ic][i][4]; + int e0 = is.chars[ic][i][6], e1 = is.chars[ic][i][7], e2 = is.chars[ic][i][8], e3 = is.chars[ic][i][9], + e4 = is.chars[ic][i][10]; + + int len = is.length(ic); + + x.v1 = oper; + x.v0 = _f0; + x.v2 = formi; + x.cz3(); + f[0] = x.getVal(); + f[1] = x.csa(3, position); + x.v0 = _f1; + x.v2 = formi; + x.v3 = i + 1 >= len ? x.v3 = _ewrd : is.forms[ic][i + 1]; + x.cz4(); + f[2] = x.getVal(); + + // contains upper case include again!!! + + short upper = 0; + short number = 1; + for (int k1 = 0; k1 < wl; k1++) { + char c = form.charAt(k1); + if (Character.isUpperCase(c)) { + if (k1 == 0) + upper = 1; + else { + // first char + another + if (upper == 1) + upper = 3; + // another uppercase in the word + else if (upper == 0) + upper = 2; + } + } + + if (Character.isDigit(c) && k1 == 0) + number = 2; + else if (Character.isDigit(c) && number == 1) + number = 3; + + } + + // contains a number + z.v0 = _f21; + z.v2 = number; + z.cz3(); + f[3] = z.getVal(); + + z.v0 = _f4; + z.v1 = oper; + z.v2 = c0; + z.cz3(); + f[4] = z.getVal(); + z.v0 = _f5; + z.v2 = e0; + z.cz3(); + f[5] = z.getVal(); + + z.v2 = c0; + z.v3 = c1; + z.v4 = c2; + z.v5 = c3; + z.v6 = c4; + z.v0 = _f6; + z.cz4(); + f[6] = z.getVal(); + z.v0 = _f7; + z.cz5(); + f[7] = z.getVal(); + z.v0 = _f8; + z.cz6(); + f[8] = z.getVal(); + z.v0 = _f9; + z.cz7(); + f[9] = z.getVal(); + + int c = 10; + z.v2 = e0; + z.v3 = e1; + z.v4 = e2; + z.v5 = e3; + z.v6 = e4; + z.v0 = _f10; + z.cz4(); + f[c++] = z.getVal(); + f[c++] = z.csa(3, upper); + z.v0 = _f11; + z.cz5(); + f[c++] = z.getVal(); + f[c++] = z.csa(3, upper); + z.v0 = _f12; + z.cz6(); + f[c++] = z.getVal(); + f[c++] = z.csa(3, upper); + z.v0 = _f13; + z.cz7(); + f[c++] = z.getVal(); + f[c++] = z.csa(3, upper); + + if (len > i + 1) { + + z.v0 = _f14; + z.v2 = is.chars[ic][i + 1][0]; + z.cz3(); + f[c++] = z.getVal(); + + z.v0 = _f15; + z.v2 = is.chars[ic][i + 1][5]; + z.cz3(); + f[c++] = z.getVal(); + + if (is.chars[ic][i + 1][11] > 1) { + z.v0 = _f16; + z.v2 = is.chars[ic][i + 1][0]; + z.v3 = is.chars[ic][i + 1][2]; + z.cz4(); + f[c++] = z.getVal(); + + z.v0 = _f17; + z.v2 = is.chars[ic][i + 1][1]; + z.v3 = is.chars[ic][i + 1][6]; + z.cz4(); + f[c++] = z.getVal();// fv.add(li.l2i(mf.calc4(b))); + } + + x.v0 = _f18; + x.v2 = is.forms[ic][i + 1]; + x.cz3(); + f[c++] = x.getVal(); + + if (len > i + 2) { + x.v0 = _f32; + x.v2 = is.forms[ic][i + 2]; + x.v3 = is.forms[ic][i + 1]; + x.cz4(); + f[c++] = x.getVal(); + x.cz3(); + f[c++] = x.getVal();// fv.add(li.l2i(mf.calc3(b))); + + } + + if (len > i + 3) { + x.v0 = _f33; + x.v2 = is.forms[ic][i + 3]; + x.v3 = is.forms[ic][i + 2]; + x.cz4(); + f[c++] = x.getVal();// fv.add(li.l2i(mf.calc4(b))); + x.cz3(); + f[27] = x.getVal();// fv.add(li.l2i(mf.calc3(b))); + } + } + + // length + + z.v0 = _f19; + z.v1 = oper; + z.v2 = wl; + z.cz3(); + f[c++] = z.getVal();// fv.add(li.l2i(mf.calc3(dl1))); + + if (i < 1) + return; + + x.v0 = _f27; + x.v1 = oper; + x.v2 = is.forms[ic][i - 1]; + x.cz3(); + f[c++] = x.getVal();// fv.add(li.l2i(mf.calc3(b))); + + if (i < 2) + return; + + // added this before it was 99.46 + x.v0 = _f28; + x.v2 = is.forms[ic][i - 2]; + x.cz3(); + f[c++] = x.getVal();// fv.add(li.l2i(mf.calc3(b))); + + // result 99.484 + if (i < 3) + return; + + x.v0 = _f31; + x.v1 = oper; + x.v2 = is.forms[ic][i - 3]; + x.v3 = is.forms[ic][i - 2]; + x.cz4(); + f[c++] = x.getVal();// fv.add(li.l2i(mf.calc4(b))); + + } + + // public String[] wds; + + /** + * Write the lemma that are not mapped by operations + * + * @param dos + */ + private void writeMap(DataOutputStream dos) { + + try { + dos.writeInt(opse.size()); + for (Entry<String, String> e : opse.entrySet()) { + dos.writeUTF(e.getKey()); + dos.writeUTF(e.getValue()); + } + } catch (IOException e1) { + e1.printStackTrace(); + } + } + + /** + * Read the form-lemma mapping not read by operations + * + * @param dis + */ + public void readMap(DataInputStream dis) { + try { + int size = dis.readInt(); + for (int i = 0; i < size; i++) { + opse.put(dis.readUTF(), dis.readUTF()); + } + } catch (IOException e1) { + e1.printStackTrace(); + } + } + + /* + * (non-Javadoc) + * + * @see is2.tools.IPipe#write(java.io.DataOutputStream) + */ + @Override + public void write(DataOutputStream dos) { + this.writeMap(dos); + try { + cl.write(dos); + } catch (IOException e) { + e.printStackTrace(); + } + + } + +} diff --git a/dependencyParser/experimental/mate-tools/src/is2/lemmatizer/StringEdit.java b/dependencyParser/experimental/mate-tools/src/is2/lemmatizer/StringEdit.java new file mode 100755 index 0000000..69fd872 --- /dev/null +++ b/dependencyParser/experimental/mate-tools/src/is2/lemmatizer/StringEdit.java @@ -0,0 +1,303 @@ +package is2.lemmatizer; + +import java.util.ArrayList; + +public class StringEdit { + + public static void main(String args[]) { + + String s = new StringBuffer(args[0]).reverse().toString(); + String t = new StringBuffer(args[1]).reverse().toString(); + + int d[][] = LD(s, t); + + StringBuffer opersations = new StringBuffer(); + searchPath(s, t, d, opersations, false); + System.out.println("resuylt " + " " + opersations); + + } + + // **************************** + // Get minimum of three values + // **************************** + + static private int Minimum(int a, int b, int c) { + int mi; + + mi = a; + if (b < mi) + mi = b; + if (c < mi) + mi = c; + + return mi; + + } + + // ***************************** + // Compute Levenshtein distance + // ***************************** + + static public int[][] LD(String s, String t) { + + int n = s.length(); + int m = t.length(); + ; // length of t + // char s_i; // ith character of s + // char t_j; // jth character of t + int cost; // cost + + // Step 1 + + int[][] d = new int[n + 1][m + 1]; + + if (n == 0) + return d; + if (m == 0) + return d; + + // Step 2 + + for (int i = 0; i <= n; i++) + d[i][0] = i; + for (int j = 0; j <= m; j++) + d[0][j] = j; + + // Step 3 + + for (int i = 1; i <= n; i++) { + + int s_i = s.charAt(i - 1); + + // Step 4 + + for (int j = 1; j <= m; j++) { + + // t_j = t.charAt (j - 1); + + // Step 5 + + if (s_i == t.charAt(j - 1)) + cost = 0; + else + cost = 1; + + // Step 6 + + d[i][j] = Minimum(d[i - 1][j] + 1, d[i][j - 1] + 1, d[i - 1][j - 1] + cost); + + } + + } + + // Step 7 + + return d; + + } + + static String searchPath(String s, String t, int[][] d, StringBuffer operations, boolean debug) { + + StringBuffer result = new StringBuffer(s); + + int n = d.length; + int m = d[0].length; + + int x = n - 1; + int y = m - 1; + boolean changed = false; + while (true) { + if (debug && changed) + System.out.println("result " + new StringBuffer(result).reverse()); + + if (d[x][y] == 0) + break; + if (y > 0 && x > 0 && d[x - 1][y - 1] < d[x][y]) { + if (debug) + System.out.println("min d[x-1][y-1] " + d[x - 1][y - 1] + " d[x][y] " + d[x][y] + " rep " + + s.charAt(x - 1) + " with " + t.charAt(y - 1) + " at " + (x - 1)); + + operations.append('R').append(Character.toString((char) (x - 1))).append(s.charAt(x - 1)) + .append(t.charAt(y - 1)); + if (debug) + result.setCharAt(x - 1, t.charAt(y - 1)); + y--; + x--; + changed = true; + continue; + } + if (y > 0 && d[x][y - 1] < d[x][y]) { + if (debug) + System.out.println("min d[x][y-1] " + d[x][y - 1] + " d[x][y] " + d[x][y] + " ins " + + t.charAt(y - 1) + " at " + (x)); + operations.append('I').append(Character.toString((char) (x))).append(t.charAt(y - 1)); + if (debug) + result.insert(x, t.charAt(y - 1)); + y--; + changed = true; + continue; + } + if (x > 0 && d[x - 1][y] < d[x][y]) { + if (debug) + System.out.println("min d[x-1][y] " + d[x - 1][y] + " d[x][y] " + d[x][y] + " del " + + s.charAt(x - 1) + " at " + (x - 1)); + operations.append('D').append(Character.toString((char) (x - 1))).append(s.charAt(x - 1)); + if (debug) + result.deleteCharAt(x - 1); + x--; + changed = true; + continue; + } + changed = false; + if (x > 0 && y > 0 && d[x - 1][y - 1] == d[x][y]) { + x--; + y--; + continue; + } + if (x > 0 && d[x - 1][y] == d[x][y]) { + x--; + continue; + } + if (y > 0 && d[x][y - 1] == d[x][y]) { + y--; + continue; + } + + } + if (debug) + return result.reverse().toString(); + else + return null; + } + + public static String change(String s, String operations) { + + StringBuffer result = new StringBuffer(s).reverse(); + + int pc = 0; + while (true) { + if (operations.length() <= pc) + break; + char nextOperation = operations.charAt(pc); + pc++; + if (nextOperation == 'R') { + // pc++; + int xm1 = operations.charAt(pc); + pc++; + char replace = operations.charAt(pc); + pc++; + char with = operations.charAt(pc); + // operations.append('R').append((char)x-1).append(s.charAt(x-1)).append(t.charAt(y-1)); + // System.out.println(""+result+" xm1 "+xm1+" op "+operations); + + if (result.length() <= xm1) + return s; + + if (result.charAt(xm1) == replace) + result.setCharAt(xm1, with); + // if (debug) result.setCharAt(x-1, t.charAt(y-1)); + pc++; + + } else if (nextOperation == 'I') { + // if (debug) System.out.println("min d[x][y-1] "+d[x][y-1]+" + // d[x][y] "+d[x][y]+" ins "+t.charAt(y-1)+" at "+(x)); + // operations.append('I').append((char)x).append(t.charAt(y-1)); + + // if (debug)result.insert(x, t.charAt(y-1)); + // y--; + // changed =true; + // pc++; + int x = operations.charAt(pc); + pc++; + char in = operations.charAt(pc); + + if (result.length() < x) + return s; + + result.insert(x, in); + pc++; + } else if (nextOperation == 'D') { + // pc++; + int xm1 = operations.charAt(pc); + + if (result.length() <= xm1) + return s; + + result.deleteCharAt(xm1); + pc++; + // delete with + pc++; + // operations.append('D').append((char)x-1).append(s.charAt(x-1)); + // if (debug)result.deleteCharAt(x-1); + } + + } + return result.reverse().toString(); + // else return null; + } + + /** + * @param opers + * @param postion + * @return + */ + public static String get(ArrayList<String> opers, int position) { + for (String s : opers) { + int p = s.charAt(1); + if (p == position) { + return s; + } + } + return "0"; + } + + /** + * @param form + * @param string + * @param c + * @return + */ + public static String changeSimple(String form, String operation, int c) { + + if (operation.equals("0")) + return form; + + if (operation.charAt(0) == 'I') { + StringBuffer f = new StringBuffer(form); + if (f.length() <= c) { + // DB.println("fail insert "); + return form; + } + f.insert(c + 1, operation.charAt(1)); + return f.toString(); + } + if (operation.charAt(0) == 'R') { + StringBuffer f = new StringBuffer(form); + // if (f.length()<=c) f.append(' '); + if (f.length() <= c) { + // DB.println("fail replace "); + return form; + } + f.setCharAt(c, operation.charAt(2)); + return f.toString(); + } + + if (operation.charAt(0) == 'D') { + StringBuffer f = new StringBuffer(form); + f.delete(c, c + 1);// .append(' '); + return f.toString(); + } + return form; + } + + /** + * @param string + * @return + */ + public static String simple(String o) { + StringBuffer s = new StringBuffer(o); + s.delete(1, 2); + return s.toString(); + } + +} diff --git a/dependencyParser/experimental/mate-tools/src/is2/mtag/Convert.java b/dependencyParser/experimental/mate-tools/src/is2/mtag/Convert.java new file mode 100755 index 0000000..05b0741 --- /dev/null +++ b/dependencyParser/experimental/mate-tools/src/is2/mtag/Convert.java @@ -0,0 +1,99 @@ +/** + * + */ +package is2.mtag; + +import java.io.BufferedReader; +import java.io.BufferedWriter; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStreamReader; +import java.io.OutputStreamWriter; +import java.util.ArrayList; + +/** + * @author Dr. Bernd Bohnet, 20.01.2010 + * + * + */ +public class Convert { + + public static void main(String[] args) throws IOException { + + Options options = new Options(args); + + split(options.trainfile); + + } + + /** + * @param trainfile + * @throws IOException + */ + private static void split(String trainfile) throws IOException { + + String dir = "split"; + boolean success = (new File("split")).mkdir(); + if (success) + System.out.println("Directory: " + dir + " created"); + + ArrayList<String> corpus = new ArrayList<String>(); + + BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(trainfile), "UTF-8"), + 32768); + String l = null; + int sentences = 0; + try { + while ((l = reader.readLine()) != null) { + + corpus.add(l); + if (l.length() < 8) + sentences++; + + } + } catch (IOException e) { + e.printStackTrace(); + } + System.out.println("Corpus has " + sentences + " sentences."); + + int partSize = sentences / 20; + System.out.println("Prepare corpus for cross annotations with 20 parts with part size " + partSize + + " number of lines " + corpus.size()); + + for (int k = 0; k < 20; k++) { + BufferedWriter br = new BufferedWriter( + new OutputStreamWriter(new FileOutputStream("split/p-" + k), "UTF-8")); + BufferedWriter rest = new BufferedWriter( + new OutputStreamWriter(new FileOutputStream("split/r-" + k), "UTF-8")); + int skip = k * partSize; + + int countSentences = 0; + int countSentencesWrote = 0; + System.out.println("skip from " + skip + " to " + (skip + partSize - 1)); + for (String x : corpus) { + if (countSentences >= skip && (countSentences < (skip + partSize) || k == 19)) { + rest.write(x); + rest.newLine(); + if (x.length() < 8) + countSentencesWrote++; + } else { + br.write(x); + br.newLine(); + } + + if (x.length() < 8) + countSentences++; + } + System.out.println("wrote for this part " + countSentencesWrote); + br.flush(); + br.close(); + rest.flush(); + rest.close(); + + } + + } + +} diff --git a/dependencyParser/experimental/mate-tools/src/is2/mtag/Evaluator.java b/dependencyParser/experimental/mate-tools/src/is2/mtag/Evaluator.java new file mode 100755 index 0000000..16c7bba --- /dev/null +++ b/dependencyParser/experimental/mate-tools/src/is2/mtag/Evaluator.java @@ -0,0 +1,149 @@ +package is2.mtag; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.Comparator; +import java.util.Hashtable; +import java.util.Map.Entry; + +import is2.data.SentenceData09; +import is2.io.CONLLReader09; + +public class Evaluator { + + public static void evaluate(String act_file, String pred_file, String format) throws Exception { + + CONLLReader09 goldReader = new CONLLReader09(act_file);// DependencyReader.createDependencyReader(); + // boolean labeled = goldReader.startReading(act_file); + + CONLLReader09 predictedReader = new CONLLReader09(); + predictedReader.startReading(pred_file); + + // if (labeled != predLabeled) + // System.out.println("Gold file and predicted file appear to differ on + // whether or not they are labeled. Expect problems!!!"); + + int total = 0, totalP = 0, corrT = 0; + int totalD = 0, corrD = 0, err = 0; + int numsent = 0; + SentenceData09 goldInstance = goldReader.getNext(); + SentenceData09 predInstance = predictedReader.getNext(); + + Hashtable<String, Integer> errors = new Hashtable<String, Integer>(); + Hashtable<String, StringBuffer> words = new Hashtable<String, StringBuffer>(); + + while (goldInstance != null) { + + int instanceLength = goldInstance.length(); + + if (instanceLength != predInstance.length()) + System.out.println("Lengths do not match on sentence " + numsent); + + String gold[] = goldInstance.ofeats; + String pred[] = predInstance.pfeats; + + boolean whole = true; + boolean wholeL = true; + + // NOTE: the first item is the root info added during + // nextInstance(), so we skip it. + + for (int i = 1; i < instanceLength; i++) { + if (gold[i].equals(pred[i]) || (gold[i].equals("_") && pred[i] == null)) + corrT++; + else { + // System.out.println("gold:"+goldFeats[i]+" + // pred:"+predFeats[i]+" "+goldInstance.forms[i]+" snt + // "+numsent+" i:"+i); + // for (int k = 1; k < instanceLength; k++) { + + // System.out.print(goldInstance.forms[k]+":"+goldInstance.gpos[k]); + // if (k==i) System.out.print(":"+predInstance.gpos[k]); + // System.out.print(" "); + + // } + // System.out.println(); + String key = "gold: '" + gold[i] + "' pred: '" + pred[i] + "'"; + Integer cnt = errors.get(key); + StringBuffer errWrd = words.get(key); + if (cnt == null) { + errors.put(key, 1); + words.put(key, new StringBuffer().append(goldInstance.forms[i])); + } else { + errors.put(key, cnt + 1); + errWrd.append(" " + goldInstance.forms[i]); + } + err++; + + } + String[] gf = gold[i].split("|"); + int eq = 0; + + if (pred[i] != null) { + String[] pf = pred[i].split("|"); + totalP += pf.length; + + if (pf.length > gf.length) { + } else { + } + + for (String g : gf) { + for (String p : pf) { + if (g.equals(p)) { + eq++; + break; + } + } + } + } else { + } + totalD += gf.length; + corrD += eq; + } + total += instanceLength - 1; // Subtract one to not score fake root + // token + + if (whole) { + } + if (wholeL) { + } + numsent++; + + goldInstance = goldReader.getNext(); + predInstance = predictedReader.getNext(); + } + + ArrayList<Entry<String, Integer>> opsl = new ArrayList<Entry<String, Integer>>(); + for (Entry<String, Integer> e : errors.entrySet()) { + opsl.add(e); + } + + Collections.sort(opsl, new Comparator<Entry<String, Integer>>() { + + @Override + public int compare(Entry<String, Integer> o1, Entry<String, Integer> o2) { + + return o1.getValue() == o2.getValue() ? 0 : o1.getValue() > o2.getValue() ? -1 : 1; + } + + }); + + System.out.println("10 top most errors:"); + + System.out.println("Tokens: " + total + " Correct: " + corrT + " " + (float) corrT / total + " R " + + ((float) corrD / totalD) + " tP " + totalP + " tG " + totalD + " P " + (float) corrD / totalP); + System.out.println("err: " + err + " total " + total + " corr " + corrT); + // System.out.println("Unlabeled Complete Correct: " + + // ((double)corrsent/numsent)); + + } + + public static void main(String[] args) throws Exception { + String format = "CONLL"; + if (args.length > 2) + format = args[2]; + + evaluate(args[0], args[1], format); + } + +} diff --git a/dependencyParser/experimental/mate-tools/src/is2/mtag/ExtractorM.java b/dependencyParser/experimental/mate-tools/src/is2/mtag/ExtractorM.java new file mode 100644 index 0000000..e84f859 --- /dev/null +++ b/dependencyParser/experimental/mate-tools/src/is2/mtag/ExtractorM.java @@ -0,0 +1,683 @@ +package is2.mtag; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Map.Entry; + +import is2.data.Cluster; +import is2.data.F2SF; +import is2.data.Instances; +import is2.data.InstancesTagger; +import is2.data.Long2Int; +import is2.data.Long2IntInterface; +import is2.data.ParametersFloat; +import is2.data.PipeGen; +import is2.data.SentenceData09; +import is2.io.CONLLReader09; +import is2.io.IOGenerals; +import is2.tools.IPipe; +import is2.util.OptionsSuper; + +final public class ExtractorM extends PipeGen implements IPipe { + + public static int _CEND; + + private static final String STWRD = "STWRD", STPOS = "STPOS", END = "END", STR = "STR"; + + public String[] types; + + Cluster cl; + + final public MFO mf = new MFO(); + public Long2IntInterface li; + + final MFO.Data4 d1 = new MFO.Data4(), d2 = new MFO.Data4(), d3 = new MFO.Data4(), dw = new MFO.Data4(); + final MFO.Data4 dwp = new MFO.Data4(), dp = new MFO.Data4(); + + private OptionsSuper options; + private int _ewrd; + static private int _strp; + + public ExtractorM(Options options, Long2Int long2Int) throws IOException { + this.options = options; + + li = long2Int; + } + + public ExtractorM(OptionsSuper options) { + this.options = options; + } + + public HashMap<Integer, Integer> form2morph = new HashMap<Integer, Integer>(); + + @Override + public Instances createInstances(String file) { + + CONLLReader09 depReader = new CONLLReader09(CONLLReader09.NO_NORMALIZE); + + depReader.startReading(file); + mf.register(POS, "<root-POS>"); + + mf.register(FFEATS, IOGenerals.NO_TYPE); + mf.register(FFEATS, ""); + + InstancesTagger is = new InstancesTagger(); + + System.out.println("Registering feature parts "); + + HashMap<String, HashSet<String>> op2form = new HashMap<String, HashSet<String>>(); + HashMap<String, Integer> freq = new HashMap<String, Integer>(); + + int ic = 0; + while (true) { + SentenceData09 instance1 = depReader.getNext(); + if (instance1 == null) + break; + ic++; + + String[] w = instance1.forms; + for (String element : w) + mf.register(WORD, element); + for (String element : w) + registerChars(CHAR, element); + + for (int i1 = 0; i1 < w.length; i1++) { + mf.register(WORD, w[i1].toLowerCase()); + Integer f = freq.get(w[i1].toLowerCase()); + + if (f == null) + freq.put(w[i1].toLowerCase(), 1); + else + freq.put(w[i1].toLowerCase(), f + 1); + + HashSet<String> forms = op2form.get(w[i1].toLowerCase()); + if (forms == null) { + forms = new HashSet<String>(); + op2form.put(w[i1].toLowerCase(), forms); + } + forms.add(instance1.ofeats[i1] == null ? "_" : instance1.ofeats[i1]); + } + for (String element : w) + registerChars(CHAR, element.toLowerCase()); + + w = instance1.plemmas; + for (String element : w) + mf.register(WORD, element); + for (String element : w) + registerChars(CHAR, element); + + w = instance1.ppos; + for (String element : w) + mf.register(POS, element); + + w = instance1.gpos; + for (String element : w) + mf.register(POS, element); + + w = instance1.ofeats; + for (String element : w) + if (element != null) + mf.register(FEAT, element); + for (String element : w) + if (element != null) + mf.register(FFEATS, element); + + // w = instance1.pfeats; + // for(int i1 = 0; i1 < w.length; i1++) if (w[i1]!=null) + // mf.register(FEAT, w[i1]); + } + + for (Entry<String, HashSet<String>> e : op2form.entrySet()) { + if (e.getValue().size() == 1 && freq.get(e.getKey()) > 10) { + // System.out.println("found map "+e.getKey()+" "+e.getValue()+" + // "+freq.get(e.getKey())); + form2morph.put(mf.getValue(PipeGen.WORD, e.getKey()), + mf.getValue(FFEATS, (String) e.getValue().toArray()[0])); + } + } + + initFeatures(); + + mf.calculateBits(); + initValues(); + + System.out.println("" + mf.toString()); + + depReader.startReading(file); + + int num1 = 0; + long start1 = System.currentTimeMillis(); + + System.out.print("Creating Features: "); + is.init(ic, mf); + int del = 0; + + while (true) { + if (num1 % 100 == 0) { + del = outValue(num1, del); + } + SentenceData09 instance1 = depReader.getNext(is); + if (instance1 == null) + break; + + if (num1 > options.count) + break; + + num1++; + } + long end1 = System.currentTimeMillis(); + System.gc(); + long mem2 = Runtime.getRuntime().totalMemory() - Runtime.getRuntime().freeMemory(); + System.out.print(" time " + (end1 - start1) + " mem " + (mem2 / 1024) + " kb"); + + types = new String[mf.getFeatureCounter().get(FFEATS)]; + + for (Entry<String, Integer> e : MFO.getFeatureSet().get(FFEATS).entrySet()) { + types[e.getValue()] = e.getKey(); + } + + if (options.clusterFile == null) + cl = new Cluster(); + else + cl = new Cluster(options.clusterFile, mf, 6); + + System.out.println("Num Features: " + types.length); + + depReader.startReading(file); + + int num11 = 0; + + while (true) { + + SentenceData09 instance = depReader.getNext(); + if (instance == null) + break; + + is.fillChars(instance, num11, _CEND); + + if (num11 > options.count) + break; + + num11++; + } + + return is;// .toNativeArray(); + + } + + private void registerChars(String type, String word) { + for (int i = 0; i < word.length(); i++) + mf.register(type, Character.toString(word.charAt(i))); + } + + @Override + public void initValues() { + s_feat = MFO.getFeatureBits(FFEATS); + s_word = MFO.getFeatureBits(WORD); + s_type = MFO.getFeatureBits(TYPE); + s_char = MFO.getFeatureBits(CHAR); + s_pos = MFO.getFeatureBits(POS); + // dl1.a[0] = s_type; dl1.a[1] = s_pos; + // for (int k = 2; k < 7; k++) dl1.a[k] = s_pos; + + d1.a0 = s_type; + d1.a1 = s_feat; + d1.a2 = s_word; + d2.a0 = s_type; + d2.a1 = s_feat; + d2.a2 = s_feat; + d2.a3 = s_feat; + d2.a4 = s_feat; + d2.a5 = s_feat; + d2.a6 = s_feat; + d3.a0 = s_type; + d3.a1 = s_feat; + d3.a2 = s_char; + d3.a3 = s_char; + d3.a4 = s_char; + d3.a5 = s_char; + d3.a6 = s_char; + d3.a7 = s_char; + dp.a0 = s_type; + dp.a1 = s_feat; + dp.a2 = s_pos; + dp.a3 = s_pos; + dp.a4 = s_feat;// dp.a5= s_char; dp.a6= s_char; dp.a7= s_char; + dw.a0 = s_type; + dw.a1 = s_feat; + dw.a2 = s_word; + dw.a3 = s_word; + dw.a4 = s_word; + dw.a5 = s_word; + dw.a6 = s_word; + dw.a7 = s_word; + dwp.a0 = s_type; + dwp.a1 = s_feat; + dwp.a2 = s_word; + dwp.a3 = s_feat; + dwp.a4 = s_word; + + } + + public static short s_feat, s_word, s_type, s_dir, s_dist, s_char, s_pos; + + /** + * Initialize the features types. + */ + @Override + public void initFeatures() { + + for (int t = 0; t < 62; t++) { + mf.register(TYPE, "F" + t); + } + + // _mid = mf.register(POS, MID); + _strp = mf.register(POS, STR); + mf.register(POS, END); + + mf.register(WORD, STR); + _ewrd = mf.register(WORD, END); + + _CEND = mf.register(CHAR, END); + + // optional features + mf.register(WORD, STWRD); + mf.register(POS, STPOS); + + } + + final public void addCF(InstancesTagger is, int ic, String fs, int i, short pfeat[], short ppos[], int[] forms, + int[] lemmas, long[] vs) { + + int c0 = is.chars[ic][i][0], c1 = is.chars[ic][i][1], c2 = is.chars[ic][i][2], c3 = is.chars[ic][i][3], + c4 = is.chars[ic][i][4], c5 = is.chars[ic][i][5]; + int e0 = is.chars[ic][i][6], e1 = is.chars[ic][i][7], e2 = is.chars[ic][i][8], e3 = is.chars[ic][i][9], + e4 = is.chars[ic][i][10]; + + int f = 1, n = 0; + short upper = 0, number = 1; + for (int k1 = 0; k1 < fs.length(); k1++) { + char c = fs.charAt(k1); + if (Character.isUpperCase(c)) { + if (k1 == 0) + upper = 1; + else { + // first char + another + if (upper == 1) + upper = 3; + // another uppercase in the word + else if (upper == 0) + upper = 2; + } + } + + if (Character.isDigit(c) && k1 == 0) + number = 2; + else if (Character.isDigit(c) && number == 1) + number = 3; + } + + int form = forms[i]; + + int len = forms.length; + long l; + d1.v0 = f++; + d1.v2 = form; + l = mf.calc3(d1); + vs[n++] = mf.calc3(d1); + + d1.v0 = f++; + d1.v2 = is.formlc[ic][i]; + vs[n++] = mf.calc3(d1); + + d3.v2 = c0; + d3.v3 = c1; + d3.v4 = c2; + d3.v5 = c3; + d3.v6 = c4; + d3.v0 = f++; + vs[n++] = mf.calc3(d3); + d3.v0 = f++; + vs[n++] = mf.calc4(d3); + d3.v0 = f++; + vs[n++] = mf.calc5(d3); + d3.v0 = f++; + vs[n++] = mf.calc6(d3); + d3.v0 = f++; + vs[n++] = mf.calc7(d3); + + if (form != -1) { + d3.v2 = c2; + d3.v3 = c3; + d3.v4 = c4; + d3.v5 = c5; + d3.v6 = cl.getLP(form); + d3.v0 = f; + vs[n++] = mf.calc6(d3); + d3.v0 = f + 1; + vs[n++] = mf.calc7(d3); + } + f += 2; + + if (form > 0) { + d3.v0 = f; + d3.v5 = cl.getLP(form); + vs[n++] = mf.calc6(d3); + d3.v0 = f + 1; + d3.v4 = cl.getLP(form); + vs[n++] = mf.calc5(d3); + d3.v0 = f + 2; + d3.v3 = cl.getLP(form); + vs[n++] = mf.calc4(d3); + } + f += 3; + + d3.v2 = e0; + d3.v3 = e1; + d3.v4 = e2; + d3.v5 = e3; + d3.v6 = e4; + d3.v0 = f++; + vs[n++] = mf.calc3(d3); + d3.v0 = f++; + vs[n++] = l = mf.calc4(d3); + vs[n++] = d3.calcs(3, upper, l); + d3.v0 = f++; + vs[n++] = l = mf.calc5(d3); + vs[n++] = d3.calcs(3, upper, l); + d3.v0 = f++; + vs[n++] = l = mf.calc6(d3); + vs[n++] = d3.calcs(3, upper, l); + d3.v0 = f++; + vs[n++] = l = mf.calc7(d3); + vs[n++] = d3.calcs(3, upper, l); + + if (form > 0) { + d3.v0 = f; + d3.v5 = cl.getLP(form); + vs[n++] = mf.calc6(d3); + d3.v0 = f + 1; + d3.v4 = cl.getLP(form); + vs[n++] = mf.calc5(d3); + d3.v0 = f + 2; + d3.v3 = cl.getLP(form); + vs[n++] = mf.calc4(d3); + } + f += 3; + + dw.v0 = f++; + dw.v2 = i + 1 < len ? forms[i + 1] : _ewrd; + dw.v3 = forms[i]; + vs[n++] = mf.calc4(dw); + + if (len > i + 1) { + + dw.v0 = f; + dw.v2 = forms[i + 1]; + vs[n++] = mf.calc3(dw); + d3.v0 = f + 1; + d3.v2 = is.chars[ic][i + 1][0]; + vs[n++] = mf.calc3(d3); + d3.v0 = f + 2; + d3.v2 = is.chars[ic][i + 1][6]; + vs[n++] = mf.calc3(d3); + + d3.v2 = e0; + d3.v3 = e1; + + d3.v0 = f + 3; + d3.v4 = is.chars[ic][i + 1][0]; + vs[n++] = mf.calc5(d3); + d3.v0 = f + 4; + d3.v4 = is.chars[ic][i + 1][6]; + vs[n++] = mf.calc5(d3); + + if (is.chars[ic][i + 1][11] > 1) { // instance.forms[i+1].length() + + d3.v0 = f + 5; + d3.v2 = is.chars[ic][i + 1][0]; + d3.v3 = is.chars[ic][i + 1][1]; + vs[n++] = mf.calc4(d3); + d3.v0 = f + 6; + d3.v2 = is.chars[ic][i + 1][6]; + d3.v3 = is.chars[ic][i + 1][7]; + vs[n++] = mf.calc4(d3); + + d3.v2 = e0; + d3.v3 = e1; + + d3.v0 = f + 7; + d3.v4 = is.chars[ic][i + 1][0]; + d3.v5 = is.chars[ic][i + 1][1]; + vs[n++] = mf.calc6(d3); + d3.v0 = f + 8; + d3.v4 = is.chars[ic][i + 1][6]; + d3.v5 = is.chars[ic][i + 1][7]; + vs[n++] = mf.calc6(d3); + + if (forms[i + 1] > 0) { + d3.v0 = f + 9; + d3.v2 = is.chars[ic][i + 1][0]; + d3.v3 = is.chars[ic][i + 1][1]; + d3.v4 = cl.getLP(forms[i + 1]); + vs[n++] = mf.calc5(d3); + d3.v0 = f + 10; + d3.v2 = is.chars[ic][i + 1][6]; + d3.v3 = is.chars[ic][i + 1][7]; + d3.v4 = cl.getLP(forms[i + 1]); + vs[n++] = mf.calc5(d3); + } + } + + if (forms[i + 1] > 0) { + dw.v0 = f + 11; + dw.v2 = cl.getLP(forms[i + 1]); + dw.v3 = forms[i]; + vs[n++] = mf.calc4(dw); + } + + if (len > i + 2) { + dw.v0 = f + 12; + dw.v2 = forms[i + 2]; + dw.v3 = forms[i + 1]; + vs[n++] = mf.calc4(dw); + vs[n++] = mf.calc3(dw); + // d2.v0=f+13; d2.v2=pfeat[i+1]; d2.v3= pfeat[i+2]; + // vs[n++]=mf.calc4(d2); + // dp.v0= f+14; dp.v2=ppos[i+1]; dp.v3=ppos[i+2]; + // vs[n++]=mf.calc4(dp); + + } + + if (len > i + 3) { + dw.v0 = f + 14; + dw.v2 = forms[i + 3]; + dw.v3 = forms[i + 2]; + vs[n++] = mf.calc4(dw); + vs[n++] = mf.calc3(dw); + + } + } + f += 16; + + // length + d2.v0 = f++; + d2.v2 = is.chars[ic][i][11]; + vs[n++] = mf.calc3(d2); + + // contains a number + d2.v0 = f++; + d2.v2 = number; + vs[n++] = mf.calc3(d2); + d1.v0 = f++; + d1.v2 = lemmas[i]; + vs[n++] = mf.calc3(d1); + + if (i != 0 && len > i + 1) { + dw.v0 = f; + dw.v2 = lemmas[i - 1]; + dw.v3 = lemmas[i + 1]; + vs[n++] = mf.calc4(dw); + d2.v0 = f + 1; + d2.v2 = pfeat[i - 1]; + d2.v3 = pfeat[i + 1]; + vs[n++] = mf.calc4(d2); + } + f += 2; + + d2.v0 = f++; + d2.v2 = i >= 1 ? pfeat[i - 1] : _strp; + vs[n++] = mf.calc3(d2); + dp.v0 = f++; + dp.v2 = ppos[i]; + vs[n++] = mf.calc3(dp); + + if (i > 0) { + dw.v0 = f++; + dw.v2 = i >= 1 ? forms[i - 1] : _strp; + vs[n++] = mf.calc3(dw); + dw.v0 = f++; + dw.v2 = i >= 1 ? lemmas[i - 1] : _strp; + vs[n++] = mf.calc3(dw); + + if (len > i + 1) { + // d2.v0=f; d2.v2= pfeat[i-1];d2.v3= pfeat[i+1]; + // vs[n++]=mf.calc4(d2); + // dp.v0= f+1; dp.v2=ppos[i-1]; dp.v3=ppos[i+1]; + // vs[n++]=mf.calc4(dp); + + } + f++; + dp.v0 = f++; + dp.v2 = ppos[i]; + dp.v3 = ppos[i - 1]; + vs[n++] = mf.calc4(dp); + + if (i > 1) { + d2.v0 = f++; + d2.v2 = i < 2 ? _strp : pfeat[i - 2]; + vs[n++] = mf.calc3(d2); + d2.v0 = f++; + d2.v2 = pfeat[i - 1]; + d2.v3 = pfeat[i - 2]; + vs[n++] = mf.calc4(d2); + + dw.v0 = f++; + dw.v2 = forms[i - 2]; + vs[n++] = mf.calc3(dw); + dwp.v0 = f++; + dwp.v2 = forms[i - 1]; + dwp.v3 = pfeat[i - 2]; + vs[n++] = mf.calc4(dwp); + dwp.v0 = f++; + dwp.v2 = forms[i - 2]; + dwp.v3 = pfeat[i - 1]; + vs[n++] = mf.calc4(dwp); + + if (i > 2) { + d2.v0 = f++; + d2.v2 = pfeat[i - 3]; + vs[n++] = mf.calc3(d2); + d2.v0 = f++; + d2.v2 = pfeat[i - 2]; + d2.v3 = pfeat[i - 3]; + vs[n++] = mf.calc4(d2); + dw.v0 = f++; + dw.v2 = forms[i - 3]; + dw.v3 = forms[i - 2]; + vs[n++] = mf.calc4(dw); + // dp.v0= f++; dp.v2=ppos[i-3]; dp.v3=ppos[i-2]; + // vs[n++]=mf.calc4(dp); + } + } + } + vs[n] = Integer.MIN_VALUE; + } + + public int fillFeatureVectorsOne(ParametersFloat params, int w1, String form, Instances is, int n, short[] features, + long[] vs) { + double best = -1; + int bestType = -1; + + F2SF f = new F2SF(params.parameters); + // is.gfeats[n] + addCF((InstancesTagger) is, n, form, w1, features, is.pposs[n], is.forms[n], is.plemmas[n], vs); + + for (int t = 0; t < types.length; t++) { + + f.clear(); + int p = t << ExtractorM.s_type; + for (long element : vs) { + if (element == Integer.MIN_VALUE) + break; + if (element >= 0) + f.add(li.l2i(element + p)); + } + if (f.score > best) { + bestType = t; + best = f.score; + } + + } + return bestType; + + } + + // static ArrayList<T> todo = new ArrayList<T>(); + static SentenceData09 instance; + + public static int _FC = 200; + + /** + * Write the lemma that are not mapped by operations + * + * @param dos + */ + public void writeMap(DataOutputStream dos) { + + try { + dos.writeInt(this.form2morph.size()); + for (Entry<Integer, Integer> e : form2morph.entrySet()) { + dos.writeInt(e.getKey()); + dos.writeInt(e.getValue()); + } + } catch (IOException e1) { + e1.printStackTrace(); + } + } + + /** + * Read the form-lemma mapping not read by operations + * + * @param dis + */ + public void readMap(DataInputStream dis) { + try { + int size = dis.readInt(); + for (int i = 0; i < size; i++) { + form2morph.put(dis.readInt(), dis.readInt()); + } + } catch (IOException e1) { + e1.printStackTrace(); + } + } + + /* + * (non-Javadoc) + * + * @see is2.tools.IPipe#write(java.io.DataOutputStream) + */ + @Override + public void write(DataOutputStream dos) { + try { + cl.write(dos); + writeMap(dos); + } catch (IOException e) { + e.printStackTrace(); + } + } + +} diff --git a/dependencyParser/experimental/mate-tools/src/is2/mtag/MFO.java b/dependencyParser/experimental/mate-tools/src/is2/mtag/MFO.java new file mode 100755 index 0000000..e315ba4 --- /dev/null +++ b/dependencyParser/experimental/mate-tools/src/is2/mtag/MFO.java @@ -0,0 +1,532 @@ +package is2.mtag; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; +import java.util.HashMap; +import java.util.Map.Entry; + +import is2.data.IEncoderPlus; +import is2.util.DB; + +/** + * Map Features, do not map long to integer + * + * @author Bernd Bohnet, 20.09.2009 + */ + +final public class MFO implements IEncoderPlus { + + /** The features and its values */ + static private final HashMap<String, HashMap<String, Integer>> m_featureSets = new HashMap<String, HashMap<String, Integer>>(); + + /** The feature class and the number of values */ + static private final HashMap<String, Integer> m_featureCounters = new HashMap<String, Integer>(); + + /** The number of bits needed to encode a feature */ + static final HashMap<String, Integer> m_featureBits = new HashMap<String, Integer>(); + + /** Integer counter for long2int */ + // private int count=0; + + /** Stop growing */ + public boolean stop = false; + + final public static String NONE = "<None>"; + + public static class Data { + public final String[] a = new String[8]; + public final String[] v = new String[8]; + final short[] s = new short[9]; + + public void clear(int i) { + v[i] = null; + } + } + + final public static class Data4 { + public int shift; + public short a0, a1, a2, a3, a4, a5, a6, a7, a8, a9; + public int v0, v1, v2, v3, v4, v5, v6, v7, v8, v9; + + final public long calcs(int b, long v, long l) { + if (l < 0) + return l; + l |= v << shift; + shift += b; + return l; + } + + final public long calc2() { + + if (v0 < 0 || v1 < 0) + return -1; + + long l = v0; + shift = a0; + l |= (long) v1 << shift; + shift += a1; + + return l; + } + + final public long calc3() { + + if (v0 < 0 || v1 < 0 || v2 < 0) + return -1; + // if (v1<0||v2<0) return -1; + + long l = v0; + shift = a0; + l |= (long) v1 << shift; + shift += a1; + l |= (long) v2 << shift; + shift = (short) (shift + a2); + + // shift=; + return l; + } + + final public long calc4() { + if (v0 < 0 || v1 < 0 || v2 < 0 || v3 < 0) + return -1; + + long l = v0; + shift = a0; + l |= (long) v1 << shift; + shift += a1; + l |= (long) v2 << shift; + shift += a2; + l |= (long) v3 << shift; + shift = shift + a3; + + return l; + } + + final public long calc5() { + + if (v0 < 0 || v1 < 0 || v2 < 0 || v3 < 0 || v4 < 0) + return -1; + + long l = v0; + shift = a0; + l |= (long) v1 << shift; + shift += a1; + l |= (long) v2 << shift; + shift += a2; + l |= (long) v3 << shift; + shift += a3; + l |= (long) v4 << shift; + shift = shift + a4; + + return l; + } + + final public long calc6() { + + if (v0 < 0 || v1 < 0 || v2 < 0 || v3 < 0 || v4 < 0 || v5 < 0) + return -1; + + long l = v0; + shift = a0; + l |= (long) v1 << shift; + shift += a1; + l |= (long) v2 << shift; + shift += a2; + l |= (long) v3 << shift; + shift += a3; + l |= (long) v4 << shift; + shift += a4; + l |= (long) v5 << shift; + shift = shift + a5; + + return l; + } + + final public long calc7() { + + if (v0 < 0 || v1 < 0 || v2 < 0 || v3 < 0 || v4 < 0 || v5 < 0 || v6 < 0) + return -1; + + long l = v0; + shift = a0; + l |= (long) v1 << shift; + shift += a1; + l |= (long) v2 << shift; + shift += a2; + l |= (long) v3 << shift; + shift += a3; + l |= (long) v4 << shift; + shift += a4; + l |= (long) v5 << shift; + shift += a5; + l |= (long) v6 << shift; + shift = shift + a6; + + return l; + } + + final public long calc8() { + + if (v0 < 0 || v1 < 0 || v2 < 0 || v3 < 0 || v4 < 0 || v5 < 0 || v6 < 0 || v7 < 0) + return -1; + + long l = v0; + shift = a0; + l |= (long) v1 << shift; + shift += a1; + l |= (long) v2 << shift; + shift += a2; + l |= (long) v3 << shift; + shift += a3; + l |= (long) v4 << shift; + shift += a4; + l |= (long) v5 << shift; + shift += a5; + l |= (long) v6 << shift; + shift += a6; + l |= (long) v7 << shift; + shift = shift + a7; + + return l; + } + + } + + public MFO() { + } + + // public int size() {return count;} + + /** + * Register an attribute class, if it not exists and add a possible value + * + * @param type + * @param type2 + */ + @Override + final public int register(String a, String v) { + + HashMap<String, Integer> fs = getFeatureSet().get(a); + if (fs == null) { + fs = new HashMap<String, Integer>(); + getFeatureSet().put(a, fs); + fs.put(NONE, 0); + getFeatureCounter().put(a, 1); + } + Integer c = getFeatureCounter().get(a); + + Integer i = fs.get(v); + if (i == null) { + fs.put(v, c); + c++; + getFeatureCounter().put(a, c); + return c - 1; + } else + return i; + } + + /** + * Calculates the number of bits needed to encode a feature + */ + public void calculateBits() { + + for (Entry<String, Integer> e : getFeatureCounter().entrySet()) { + int bits = (int) Math.ceil((Math.log(e.getValue() + 1) / Math.log(2))); + m_featureBits.put(e.getKey(), bits); + } + + // System.out.println("total number of needed bits "+total); + } + + @Override + public String toString() { + + StringBuffer content = new StringBuffer(); + for (Entry<String, Integer> e : getFeatureCounter().entrySet()) { + content.append(e.getKey() + " " + e.getValue()); + content.append(':'); + // HashMap<String,Integer> vs = getFeatureSet().get(e.getKey()); + content.append(getFeatureBits(e.getKey())); + + /* + * if (vs.size()<120) for(Entry<String,Integer> e2 : vs.entrySet()) + * { content.append(e2.getKey()+" ("+e2.getValue()+") "); } + */ + content.append('\n'); + + } + return content.toString(); + } + + static final public long calcs(Data4 d, int b, long v, long l) { + if (l < 0) + return l; + l |= v << d.shift; + d.shift += b; + return l; + } + + static final public short getFeatureBits(String a) { + return (short) m_featureBits.get(a).intValue(); + } + + /** + * Get the integer place holder of the string value v of the type a + * + * @param t + * the type + * @param v + * the value + * @return the integer place holder of v + */ + @Override + final public int getValue(String t, String v) { + + if (m_featureSets.get(t) == null) + return -1; + Integer vi = m_featureSets.get(t).get(v); + if (vi == null) + return -1; // stop && + return vi.intValue(); + } + + /** + * Static version of getValue + * + * @see getValue + */ + static final public int getValueS(String a, String v) { + + if (m_featureSets.get(a) == null) + return -1; + Integer vi = m_featureSets.get(a).get(v); + if (vi == null) + return -1; // stop && + return vi.intValue(); + } + + public int hasValue(String a, String v) { + + Integer vi = m_featureSets.get(a).get(v); + if (vi == null) + return -1; + return vi.intValue(); + } + + final public long calc2(Data4 d) { + + if (d.v0 < 0 || d.v1 < 0) + return -1; + // if (d.v1<0||d.v2<0) return -1; + + long l = d.v0; + short shift = d.a0; + l |= (long) d.v1 << shift; + shift += d.a1; + // l |= (long)d.v2<<shift; + d.shift = shift; + + // d.shift=; + return l; + } + + final public long calc3(Data4 d) { + + if (d.v0 < 0 || d.v1 < 0 || d.v2 < 0) + return -1; + // if (d.v1<0||d.v2<0) return -1; + + long l = d.v0; + short shift = d.a0; + l |= (long) d.v1 << shift; + shift += d.a1; + l |= (long) d.v2 << shift; + d.shift = shift + d.a2; + + // d.shift=; + return l; + } + + final public long calc4(Data4 d) { + if (d.v0 < 0 || d.v1 < 0 || d.v2 < 0 || d.v3 < 0) + return -1; + + long l = d.v0; + int shift = d.a0; + l |= (long) d.v1 << shift; + shift += d.a1; + l |= (long) d.v2 << shift; + shift += d.a2; + l |= (long) d.v3 << shift; + d.shift = shift + d.a3; + + return l; + } + + final public long calc5(Data4 d) { + + if (d.v0 < 0 || d.v1 < 0 || d.v2 < 0 || d.v3 < 0 || d.v4 < 0) + return -1; + + long l = d.v0; + int shift = d.a0; + l |= (long) d.v1 << shift; + shift += d.a1; + l |= (long) d.v2 << shift; + shift += d.a2; + l |= (long) d.v3 << shift; + shift += d.a3; + l |= (long) d.v4 << shift; + d.shift = shift + d.a4; + + return l; + } + + final public long calc6(Data4 d) { + + if (d.v0 < 0 || d.v1 < 0 || d.v2 < 0 || d.v3 < 0 || d.v4 < 0 || d.v5 < 0) + return -1; + + long l = d.v0; + int shift = d.a0; + l |= (long) d.v1 << shift; + shift += d.a1; + l |= (long) d.v2 << shift; + shift += d.a2; + l |= (long) d.v3 << shift; + shift += d.a3; + l |= (long) d.v4 << shift; + shift += d.a4; + l |= (long) d.v5 << shift; + d.shift = shift + d.a5; + + return l; + } + + final public long calc7(Data4 d) { + + if (d.v0 < 0 || d.v1 < 0 || d.v2 < 0 || d.v3 < 0 || d.v4 < 0 || d.v5 < 0 || d.v6 < 0) + return -1; + + long l = d.v0; + int shift = d.a0; + l |= (long) d.v1 << shift; + shift += d.a1; + l |= (long) d.v2 << shift; + shift += d.a2; + l |= (long) d.v3 << shift; + shift += d.a3; + l |= (long) d.v4 << shift; + shift += d.a4; + l |= (long) d.v5 << shift; + shift += d.a5; + l |= (long) d.v6 << shift; + d.shift = shift + d.a6; + + return l; + } + + final public long calc8(Data4 d) { + + if (d.v0 < 0 || d.v1 < 0 || d.v2 < 0 || d.v3 < 0 || d.v4 < 0 || d.v5 < 0 || d.v6 < 0 || d.v7 < 0) + return -1; + + long l = d.v0; + int shift = d.a0; + l |= (long) d.v1 << shift; + shift += d.a1; + l |= (long) d.v2 << shift; + shift += d.a2; + l |= (long) d.v3 << shift; + shift += d.a3; + l |= (long) d.v4 << shift; + shift += d.a4; + l |= (long) d.v5 << shift; + shift += d.a5; + l |= (long) d.v6 << shift; + shift += d.a6; + l |= (long) d.v7 << shift; + d.shift = shift + d.a7; + + return l; + } + + /** + * Maps a long to a integer value. This is very useful to save memory for + * sparse data long values + * + * @param node + * @return the integer + */ + static public int misses = 0; + static public int good = 0; + + /** + * Write the data + * + * @param dos + * @throws IOException + */ + static public void writeData(DataOutputStream dos) throws IOException { + + dos.writeInt(getFeatureSet().size()); + for (Entry<String, HashMap<String, Integer>> e : getFeatureSet().entrySet()) { + dos.writeUTF(e.getKey()); + dos.writeInt(e.getValue().size()); + + for (Entry<String, Integer> e2 : e.getValue().entrySet()) { + + if (e2.getKey() == null) + DB.println("key " + e2.getKey() + " value " + e2.getValue() + " e -key " + e.getKey()); + dos.writeUTF(e2.getKey()); + dos.writeInt(e2.getValue()); + } + } + } + + public void read(DataInputStream din) throws IOException { + + int size = din.readInt(); + for (int i = 0; i < size; i++) { + String k = din.readUTF(); + int size2 = din.readInt(); + + HashMap<String, Integer> h = new HashMap<String, Integer>(); + getFeatureSet().put(k, h); + for (int j = 0; j < size2; j++) { + h.put(din.readUTF(), din.readInt()); + } + getFeatureCounter().put(k, size2); + } + + calculateBits(); + } + + /** + * Clear the data + */ + static public void clearData() { + getFeatureSet().clear(); + m_featureBits.clear(); + getFeatureSet().clear(); + } + + @Override + public HashMap<String, Integer> getFeatureCounter() { + return m_featureCounters; + } + + static public HashMap<String, HashMap<String, Integer>> getFeatureSet() { + return m_featureSets; + } + + static public String[] reverse(HashMap<String, Integer> v) { + String[] set = new String[v.size()]; + for (Entry<String, Integer> e : v.entrySet()) { + set[e.getValue()] = e.getKey(); + } + return set; + } + +} diff --git a/dependencyParser/experimental/mate-tools/src/is2/mtag/Options.java b/dependencyParser/experimental/mate-tools/src/is2/mtag/Options.java new file mode 100755 index 0000000..20969ff --- /dev/null +++ b/dependencyParser/experimental/mate-tools/src/is2/mtag/Options.java @@ -0,0 +1,54 @@ +package is2.mtag; + +import is2.util.OptionsSuper; + +public final class Options extends OptionsSuper { + + public Options(String[] args) { + + for (int i = 0; i < args.length; i++) { + + if (args[i].equals("--help")) + explain(); + + if (args[i].equals("-nonormalize")) { + normalize = false; + } else if (args[i].equals("-features")) { + features = args[i + 1]; + i++; + } else if (args[i].equals("-hsize")) { + hsize = Integer.parseInt(args[i + 1]); + i++; + } else if (args[i].equals("-len")) { + maxLen = Integer.parseInt(args[i + 1]); + i++; + } else + super.addOption(args, i); + } + } + + private void explain() { + System.out.println("Usage: "); + System.out.println("java -cp anna.jar is2.mtag.Tagger [Options]"); + System.out.println(); + System.out.println("Example: "); + System.out.println( + " java -cp mate.jar is2.mtag.Tagger -model eps3.model -train corpora/conll08st/train/train.closed -test corpora/conll08st/devel/devel.closed -out b3.test -eval corpora/conll08st/devel/devel.closed -count 2000 -i 6"); + System.out.println(""); + System.out.println("Options:"); + System.out.println(""); + System.out.println(" -train <file> the corpus a model is trained on; default " + this.trainfile); + System.out.println(" -test <file> the input corpus for testing; default " + this.testfile); + System.out.println(" -out <file> the output corpus (result) of a test run; default " + this.outfile); + System.out.println(" -model <file> the parsing model for traing the model is stored in the files"); + System.out.println( + " and for parsing the model is load from this file; default " + this.modelName); + System.out.println( + " -i <number> the number of training iterations; good numbers are 10 for smaller corpora and 6 for bigger; default " + + this.numIters); + System.out.println(" -count <number> the n first sentences of the corpus are take for the training default " + + this.count); + + System.exit(0); + } +} diff --git a/dependencyParser/experimental/mate-tools/src/is2/mtag/Pipe.java b/dependencyParser/experimental/mate-tools/src/is2/mtag/Pipe.java new file mode 100755 index 0000000..75fb3fe --- /dev/null +++ b/dependencyParser/experimental/mate-tools/src/is2/mtag/Pipe.java @@ -0,0 +1,675 @@ +package is2.mtag; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Map.Entry; + +import is2.data.Cluster; +import is2.data.F2SF; +import is2.data.Instances; +import is2.data.InstancesTagger; +import is2.data.Long2Int; +import is2.data.Long2IntInterface; +import is2.data.ParametersFloat; +import is2.data.PipeGen; +import is2.data.SentenceData09; +import is2.io.CONLLReader09; +import is2.io.IOGenerals; +import is2.tools.IPipe; +import is2.util.OptionsSuper; + +final public class Pipe extends PipeGen implements IPipe { + + public static int _CEND; + + private static final String STWRD = "STWRD", STPOS = "STPOS", END = "END", STR = "STR"; + + public String[] types; + + Cluster cl; + + final public MFO mf = new MFO(); + public Long2IntInterface li; + + final MFO.Data4 d1 = new MFO.Data4(), d2 = new MFO.Data4(), d3 = new MFO.Data4(), dw = new MFO.Data4(); + final MFO.Data4 dwp = new MFO.Data4(), dp = new MFO.Data4(); + + private OptionsSuper options; + private int _ewrd; + static private int _strp; + + public Pipe(Options options, Long2Int long2Int) throws IOException { + this.options = options; + + li = long2Int; + } + + public Pipe(OptionsSuper options) { + this.options = options; + } + + public HashMap<Integer, Integer> form2morph = new HashMap<Integer, Integer>(); + + @Override + public Instances createInstances(String file) { + + CONLLReader09 depReader = new CONLLReader09(CONLLReader09.NO_NORMALIZE); + + depReader.startReading(file); + mf.register(POS, "<root-POS>"); + + mf.register(FEAT, IOGenerals.NO_TYPE); + mf.register(FEAT, ""); + + InstancesTagger is = new InstancesTagger(); + + System.out.println("Registering feature parts "); + + HashMap<String, HashSet<String>> op2form = new HashMap<String, HashSet<String>>(); + HashMap<String, Integer> freq = new HashMap<String, Integer>(); + + int ic = 0; + while (true) { + SentenceData09 instance1 = depReader.getNext(); + if (instance1 == null) + break; + ic++; + + String[] w = instance1.forms; + for (String element : w) + mf.register(WORD, element); + for (String element : w) + registerChars(CHAR, element); + for (int i1 = 0; i1 < w.length; i1++) { + mf.register(WORD, w[i1].toLowerCase()); + Integer f = freq.get(w[i1].toLowerCase()); + if (f == null) + freq.put(w[i1].toLowerCase(), 1); + else + freq.put(w[i1].toLowerCase(), f + 1); + + HashSet<String> forms = op2form.get(w[i1].toLowerCase()); + if (forms == null) { + forms = new HashSet<String>(); + op2form.put(w[i1].toLowerCase(), forms); + } + forms.add(instance1.ofeats[i1] == null ? "_" : instance1.ofeats[i1]); + } + for (String element : w) + registerChars(CHAR, element.toLowerCase()); + + w = instance1.plemmas; + for (String element : w) + mf.register(WORD, element); + for (String element : w) + registerChars(CHAR, element); + + w = instance1.ppos; + for (String element : w) + mf.register(POS, element); + + w = instance1.gpos; + for (String element : w) + mf.register(POS, element); + + w = instance1.ofeats; + for (String element : w) + if (element != null) + mf.register(FEAT, element); + + // w = instance1.pfeats; + // for(int i1 = 0; i1 < w.length; i1++) if (w[i1]!=null) + // mf.register(FEAT, w[i1]); + } + + for (Entry<String, HashSet<String>> e : op2form.entrySet()) { + if (e.getValue().size() == 1 && freq.get(e.getKey()) > 10) { + // System.out.println("found map "+e.getKey()+" "+e.getValue()+" + // "+freq.get(e.getKey())); + form2morph.put(mf.getValue(PipeGen.WORD, e.getKey()), + mf.getValue(FEAT, (String) e.getValue().toArray()[0])); + } + } + + initFeatures(); + + mf.calculateBits(); + initValues(); + + System.out.println("" + mf.toString()); + + depReader.startReading(file); + + int num1 = 0; + long start1 = System.currentTimeMillis(); + + System.out.print("Creating Features: "); + is.init(ic, mf); + int del = 0; + + while (true) { + if (num1 % 100 == 0) { + del = outValue(num1, del); + } + SentenceData09 instance1 = depReader.getNext(is); + if (instance1 == null) + break; + + if (num1 > options.count) + break; + + num1++; + } + long end1 = System.currentTimeMillis(); + System.gc(); + long mem2 = Runtime.getRuntime().totalMemory() - Runtime.getRuntime().freeMemory(); + System.out.print(" time " + (end1 - start1) + " mem " + (mem2 / 1024) + " kb"); + + types = new String[mf.getFeatureCounter().get(FEAT)]; + + for (Entry<String, Integer> e : MFO.getFeatureSet().get(FEAT).entrySet()) { + types[e.getValue()] = e.getKey(); + } + + if (options.clusterFile == null) + cl = new Cluster(); + else + cl = new Cluster(options.clusterFile, mf, 6); + + System.out.println("Num Features: " + types.length); + + depReader.startReading(file); + + int num11 = 0; + + while (true) { + + SentenceData09 instance = depReader.getNext(); + if (instance == null) + break; + + is.fillChars(instance, num11, _CEND); + + if (num11 > options.count) + break; + + num11++; + } + + return is;// .toNativeArray(); + + } + + private void registerChars(String type, String word) { + for (int i = 0; i < word.length(); i++) + mf.register(type, Character.toString(word.charAt(i))); + } + + @Override + public void initValues() { + s_feat = MFO.getFeatureBits(FEAT); + s_word = MFO.getFeatureBits(WORD); + s_type = MFO.getFeatureBits(TYPE); + s_char = MFO.getFeatureBits(CHAR); + s_pos = MFO.getFeatureBits(POS); + // dl1.a[0] = s_type; dl1.a[1] = s_pos; + // for (int k = 2; k < 7; k++) dl1.a[k] = s_pos; + + d1.a0 = s_type; + d1.a1 = s_feat; + d1.a2 = s_word; + d2.a0 = s_type; + d2.a1 = s_feat; + d2.a2 = s_feat; + d2.a3 = s_feat; + d2.a4 = s_feat; + d2.a5 = s_feat; + d2.a6 = s_feat; + d3.a0 = s_type; + d3.a1 = s_feat; + d3.a2 = s_char; + d3.a3 = s_char; + d3.a4 = s_char; + d3.a5 = s_char; + d3.a6 = s_char; + d3.a7 = s_char; + dp.a0 = s_type; + dp.a1 = s_feat; + dp.a2 = s_pos; + dp.a3 = s_pos; + dp.a4 = s_feat;// dp.a5= s_char; dp.a6= s_char; dp.a7= s_char; + dw.a0 = s_type; + dw.a1 = s_feat; + dw.a2 = s_word; + dw.a3 = s_word; + dw.a4 = s_word; + dw.a5 = s_word; + dw.a6 = s_word; + dw.a7 = s_word; + dwp.a0 = s_type; + dwp.a1 = s_feat; + dwp.a2 = s_word; + dwp.a3 = s_feat; + dwp.a4 = s_word; + + } + + public static short s_feat, s_word, s_type, s_dir, s_dist, s_char, s_pos; + + /** + * Initialize the features types. + */ + @Override + public void initFeatures() { + + for (int t = 0; t < 62; t++) { + mf.register(TYPE, "F" + t); + } + + // _mid = mf.register(POS, MID); + _strp = mf.register(POS, STR); + mf.register(POS, END); + + mf.register(WORD, STR); + _ewrd = mf.register(WORD, END); + + _CEND = mf.register(CHAR, END); + + // optional features + mf.register(WORD, STWRD); + mf.register(POS, STPOS); + + } + + final public void addCF(InstancesTagger is, int ic, String fs, int i, int pfeat[], short ppos[], int[] forms, + int[] lemmas, long[] vs) { + + int c0 = is.chars[ic][i][0], c1 = is.chars[ic][i][1], c2 = is.chars[ic][i][2], c3 = is.chars[ic][i][3], + c4 = is.chars[ic][i][4], c5 = is.chars[ic][i][5]; + int e0 = is.chars[ic][i][6], e1 = is.chars[ic][i][7], e2 = is.chars[ic][i][8], e3 = is.chars[ic][i][9], + e4 = is.chars[ic][i][10]; + + int f = 1, n = 0; + short upper = 0, number = 1; + for (int k1 = 0; k1 < fs.length(); k1++) { + char c = fs.charAt(k1); + if (Character.isUpperCase(c)) { + if (k1 == 0) + upper = 1; + else { + // first char + another + if (upper == 1) + upper = 3; + // another uppercase in the word + else if (upper == 0) + upper = 2; + } + } + + if (Character.isDigit(c) && k1 == 0) + number = 2; + else if (Character.isDigit(c) && number == 1) + number = 3; + } + + int form = forms[i]; + + int len = forms.length; + long l; + d1.v0 = f++; + d1.v2 = form; + l = mf.calc3(d1); + vs[n++] = mf.calc3(d1); + + d1.v0 = f++; + d1.v2 = is.formlc[ic][i]; + vs[n++] = mf.calc3(d1); + + d3.v2 = c0; + d3.v3 = c1; + d3.v4 = c2; + d3.v5 = c3; + d3.v6 = c4; + d3.v0 = f++; + vs[n++] = mf.calc3(d3); + d3.v0 = f++; + vs[n++] = mf.calc4(d3); + d3.v0 = f++; + vs[n++] = mf.calc5(d3); + d3.v0 = f++; + vs[n++] = mf.calc6(d3); + d3.v0 = f++; + vs[n++] = mf.calc7(d3); + + if (form != -1) { + d3.v2 = c2; + d3.v3 = c3; + d3.v4 = c4; + d3.v5 = c5; + d3.v6 = cl.getLP(form); + d3.v0 = f; + vs[n++] = mf.calc6(d3); + d3.v0 = f + 1; + vs[n++] = mf.calc7(d3); + } + f += 2; + + if (form > 0) { + d3.v0 = f; + d3.v5 = cl.getLP(form); + vs[n++] = mf.calc6(d3); + d3.v0 = f + 1; + d3.v4 = cl.getLP(form); + vs[n++] = mf.calc5(d3); + d3.v0 = f + 2; + d3.v3 = cl.getLP(form); + vs[n++] = mf.calc4(d3); + } + f += 3; + + d3.v2 = e0; + d3.v3 = e1; + d3.v4 = e2; + d3.v5 = e3; + d3.v6 = e4; + d3.v0 = f++; + vs[n++] = mf.calc3(d3); + d3.v0 = f++; + vs[n++] = l = mf.calc4(d3); + vs[n++] = d3.calcs(3, upper, l); + d3.v0 = f++; + vs[n++] = l = mf.calc5(d3); + vs[n++] = d3.calcs(3, upper, l); + d3.v0 = f++; + vs[n++] = l = mf.calc6(d3); + vs[n++] = d3.calcs(3, upper, l); + d3.v0 = f++; + vs[n++] = l = mf.calc7(d3); + vs[n++] = d3.calcs(3, upper, l); + + if (form > 0) { + d3.v0 = f; + d3.v5 = cl.getLP(form); + vs[n++] = mf.calc6(d3); + d3.v0 = f + 1; + d3.v4 = cl.getLP(form); + vs[n++] = mf.calc5(d3); + d3.v0 = f + 2; + d3.v3 = cl.getLP(form); + vs[n++] = mf.calc4(d3); + } + f += 3; + + dw.v0 = f++; + dw.v2 = i + 1 < len ? forms[i + 1] : _ewrd; + dw.v3 = forms[i]; + vs[n++] = mf.calc4(dw); + + if (len > i + 1) { + + dw.v0 = f; + dw.v2 = forms[i + 1]; + vs[n++] = mf.calc3(dw); + d3.v0 = f + 1; + d3.v2 = is.chars[ic][i + 1][0]; + vs[n++] = mf.calc3(d3); + d3.v0 = f + 2; + d3.v2 = is.chars[ic][i + 1][6]; + vs[n++] = mf.calc3(d3); + + d3.v2 = e0; + d3.v3 = e1; + + d3.v0 = f + 3; + d3.v4 = is.chars[ic][i + 1][0]; + vs[n++] = mf.calc5(d3); + d3.v0 = f + 4; + d3.v4 = is.chars[ic][i + 1][6]; + vs[n++] = mf.calc5(d3); + + if (is.chars[ic][i + 1][11] > 1) { // instance.forms[i+1].length() + + d3.v0 = f + 5; + d3.v2 = is.chars[ic][i + 1][0]; + d3.v3 = is.chars[ic][i + 1][1]; + vs[n++] = mf.calc4(d3); + d3.v0 = f + 6; + d3.v2 = is.chars[ic][i + 1][6]; + d3.v3 = is.chars[ic][i + 1][7]; + vs[n++] = mf.calc4(d3); + + d3.v2 = e0; + d3.v3 = e1; + + d3.v0 = f + 7; + d3.v4 = is.chars[ic][i + 1][0]; + d3.v5 = is.chars[ic][i + 1][1]; + vs[n++] = mf.calc6(d3); + d3.v0 = f + 8; + d3.v4 = is.chars[ic][i + 1][6]; + d3.v5 = is.chars[ic][i + 1][7]; + vs[n++] = mf.calc6(d3); + + if (forms[i + 1] > 0) { + d3.v0 = f + 9; + d3.v2 = is.chars[ic][i + 1][0]; + d3.v3 = is.chars[ic][i + 1][1]; + d3.v4 = cl.getLP(forms[i + 1]); + vs[n++] = mf.calc5(d3); + d3.v0 = f + 10; + d3.v2 = is.chars[ic][i + 1][6]; + d3.v3 = is.chars[ic][i + 1][7]; + d3.v4 = cl.getLP(forms[i + 1]); + vs[n++] = mf.calc5(d3); + } + } + + if (forms[i + 1] > 0) { + dw.v0 = f + 11; + dw.v2 = cl.getLP(forms[i + 1]); + dw.v3 = forms[i]; + vs[n++] = mf.calc4(dw); + } + + if (len > i + 2) { + dw.v0 = f + 12; + dw.v2 = forms[i + 2]; + dw.v3 = forms[i + 1]; + vs[n++] = mf.calc4(dw); + vs[n++] = mf.calc3(dw); + // d2.v0=f+13; d2.v2=pfeat[i+1]; d2.v3= pfeat[i+2]; + // vs[n++]=mf.calc4(d2); + // dp.v0= f+14; dp.v2=ppos[i+1]; dp.v3=ppos[i+2]; + // vs[n++]=mf.calc4(dp); + + } + + if (len > i + 3) { + dw.v0 = f + 14; + dw.v2 = forms[i + 3]; + dw.v3 = forms[i + 2]; + vs[n++] = mf.calc4(dw); + vs[n++] = mf.calc3(dw); + + } + } + f += 16; + + // length + d2.v0 = f++; + d2.v2 = is.chars[ic][i][11]; + vs[n++] = mf.calc3(d2); + + // contains a number + d2.v0 = f++; + d2.v2 = number; + vs[n++] = mf.calc3(d2); + d1.v0 = f++; + d1.v2 = lemmas[i]; + vs[n++] = mf.calc3(d1); + + if (i != 0 && len > i + 1) { + dw.v0 = f; + dw.v2 = lemmas[i - 1]; + dw.v3 = lemmas[i + 1]; + vs[n++] = mf.calc4(dw); + d2.v0 = f + 1; + d2.v2 = pfeat[i - 1]; + d2.v3 = pfeat[i + 1]; + vs[n++] = mf.calc4(d2); + } + f += 2; + + d2.v0 = f++; + d2.v2 = i >= 1 ? pfeat[i - 1] : _strp; + vs[n++] = mf.calc3(d2); + dp.v0 = f++; + dp.v2 = ppos[i]; + vs[n++] = mf.calc3(dp); + + if (i > 0) { + dw.v0 = f++; + dw.v2 = i >= 1 ? forms[i - 1] : _strp; + vs[n++] = mf.calc3(dw); + dw.v0 = f++; + dw.v2 = i >= 1 ? lemmas[i - 1] : _strp; + vs[n++] = mf.calc3(dw); + + if (len > i + 1) { + // d2.v0=f; d2.v2= pfeat[i-1];d2.v3= pfeat[i+1]; + // vs[n++]=mf.calc4(d2); + // dp.v0= f+1; dp.v2=ppos[i-1]; dp.v3=ppos[i+1]; + // vs[n++]=mf.calc4(dp); + + } + f++; + dp.v0 = f++; + dp.v2 = ppos[i]; + dp.v3 = ppos[i - 1]; + vs[n++] = mf.calc4(dp); + + if (i > 1) { + d2.v0 = f++; + d2.v2 = i < 2 ? _strp : pfeat[i - 2]; + vs[n++] = mf.calc3(d2); + d2.v0 = f++; + d2.v2 = pfeat[i - 1]; + d2.v3 = pfeat[i - 2]; + vs[n++] = mf.calc4(d2); + + dw.v0 = f++; + dw.v2 = forms[i - 2]; + vs[n++] = mf.calc3(dw); + dwp.v0 = f++; + dwp.v2 = forms[i - 1]; + dwp.v3 = pfeat[i - 2]; + vs[n++] = mf.calc4(dwp); + dwp.v0 = f++; + dwp.v2 = forms[i - 2]; + dwp.v3 = pfeat[i - 1]; + vs[n++] = mf.calc4(dwp); + + if (i > 2) { + d2.v0 = f++; + d2.v2 = pfeat[i - 3]; + vs[n++] = mf.calc3(d2); + d2.v0 = f++; + d2.v2 = pfeat[i - 2]; + d2.v3 = pfeat[i - 3]; + vs[n++] = mf.calc4(d2); + dw.v0 = f++; + dw.v2 = forms[i - 3]; + dw.v3 = forms[i - 2]; + vs[n++] = mf.calc4(dw); + // dp.v0= f++; dp.v2=ppos[i-3]; dp.v3=ppos[i-2]; + // vs[n++]=mf.calc4(dp); + } + } + } + vs[n] = Integer.MIN_VALUE; + } + + public int fillFeatureVectorsOne(ParametersFloat params, int w1, String form, Instances is, int n, int[] features, + long[] vs) { + double best = -1; + int bestType = -1; + + F2SF f = new F2SF(params.parameters); + // is.gfeats[n] + addCF((InstancesTagger) is, n, form, w1, features, is.pposs[n], is.forms[n], is.plemmas[n], vs); + + for (int t = 0; t < types.length; t++) { + + f.clear(); + int p = t << Pipe.s_type; + for (int k = vs.length - 1; k >= 0; k--) + if (vs[k] >= 0) + f.add(li.l2i(vs[k] + p)); + if (f.score > best) { + bestType = t; + best = f.score; + } + + } + return bestType; + + } + + // static ArrayList<T> todo = new ArrayList<T>(); + static SentenceData09 instance; + + public static int _FC = 200; + + /** + * Write the lemma that are not mapped by operations + * + * @param dos + */ + public void writeMap(DataOutputStream dos) { + + try { + dos.writeInt(this.form2morph.size()); + for (Entry<Integer, Integer> e : form2morph.entrySet()) { + dos.writeInt(e.getKey()); + dos.writeInt(e.getValue()); + } + } catch (IOException e1) { + e1.printStackTrace(); + } + } + + /** + * Read the form-lemma mapping not read by operations + * + * @param dis + */ + public void readMap(DataInputStream dis) { + try { + int size = dis.readInt(); + for (int i = 0; i < size; i++) { + form2morph.put(dis.readInt(), dis.readInt()); + } + } catch (IOException e1) { + e1.printStackTrace(); + } + } + + /* + * (non-Javadoc) + * + * @see is2.tools.IPipe#write(java.io.DataOutputStream) + */ + @Override + public void write(DataOutputStream dos) { + try { + cl.write(dos); + writeMap(dos); + } catch (IOException e) { + e.printStackTrace(); + } + } + +} diff --git a/dependencyParser/experimental/mate-tools/src/is2/mtag/Tagger.java b/dependencyParser/experimental/mate-tools/src/is2/mtag/Tagger.java new file mode 100644 index 0000000..05aa8d7 --- /dev/null +++ b/dependencyParser/experimental/mate-tools/src/is2/mtag/Tagger.java @@ -0,0 +1,386 @@ +package is2.mtag; + +import java.io.BufferedInputStream; +import java.io.BufferedOutputStream; +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.FileOutputStream; +import java.io.IOException; +import java.util.Map.Entry; +import java.util.zip.ZipEntry; +import java.util.zip.ZipInputStream; +import java.util.zip.ZipOutputStream; + +import is2.data.Cluster; +import is2.data.FV; +import is2.data.Instances; +import is2.data.InstancesTagger; +import is2.data.Long2Int; +import is2.data.ParametersFloat; +import is2.data.PipeGen; +import is2.data.SentenceData09; +import is2.io.CONLLReader09; +import is2.io.CONLLWriter09; +import is2.tools.IPipe; +import is2.tools.Tool; +import is2.tools.Train; +import is2.util.DB; +import is2.util.OptionsSuper; + +public class Tagger implements Tool, Train { + + ExtractorM pipe; + ParametersFloat params; + + /** + * Initialize + * + * @param options + */ + public Tagger(Options options) { + + // load the model + try { + readModel(options); + } catch (Exception e) { + e.printStackTrace(); + } + + } + + /** + * @param string + * @throws IOException + */ + public Tagger(String modelFileName) { + this(new Options(new String[] { "-model", modelFileName })); + } + + public Tagger() { + } + + public static void main(String[] args) throws FileNotFoundException, Exception { + + Options options = new Options(args); + + Tagger tagger = new Tagger(); + + if (options.train) { + + Long2Int li = new Long2Int(options.hsize); + tagger.pipe = new ExtractorM(options, li); + InstancesTagger is = (InstancesTagger) tagger.pipe.createInstances(options.trainfile); + ParametersFloat params = new ParametersFloat(li.size()); + + tagger.train(options, tagger.pipe, params, is); + tagger.writeModel(options, tagger.pipe, params); + } + + if (options.test) { + + tagger.readModel(options); + tagger.out(options, tagger.pipe, tagger.params); + } + + if (options.eval) { + + System.out.println("\nEvaluate:"); + Evaluator.evaluate(options.goldfile, options.outfile, options.format); + } + } + + /* + * (non-Javadoc) + * + * @see is2.mtag2.Learn#writeModel(is2.mtag2.Options, is2.mtag2.Pipe, + * is2.data.ParametersFloat) + */ + @Override + public void writeModel(OptionsSuper options, IPipe pipe, ParametersFloat params) { + + try { + ZipOutputStream zos = new ZipOutputStream( + new BufferedOutputStream(new FileOutputStream(options.modelName))); + zos.putNextEntry(new ZipEntry("data")); + DataOutputStream dos = new DataOutputStream(new BufferedOutputStream(zos)); + + MFO.writeData(dos); + + MFO.clearData(); + + DB.println("number of parameters " + params.parameters.length); + dos.flush(); + params.write(dos); + pipe.write(dos); + dos.flush(); + dos.close(); + } catch (Exception e) { + e.printStackTrace(); + } + } + + /* + * (non-Javadoc) + * + * @see is2.mtag2.Learn#readModel(is2.mtag2.Options) + */ + @Override + public void readModel(OptionsSuper options) { + + try { + pipe = new ExtractorM(options); + params = new ParametersFloat(0); + + // load the model + ZipInputStream zis = new ZipInputStream(new BufferedInputStream(new FileInputStream(options.modelName))); + zis.getNextEntry(); + DataInputStream dis = new DataInputStream(new BufferedInputStream(zis)); + pipe.mf.read(dis); + pipe.initValues(); + pipe.initFeatures(); + + params.read(dis); + pipe.li = new Long2Int(params.parameters.length); + pipe.cl = new Cluster(dis); + pipe.readMap(dis); + dis.close(); + + this.pipe.types = new String[pipe.mf.getFeatureCounter().get(PipeGen.FFEATS)]; + for (Entry<String, Integer> e : MFO.getFeatureSet().get(PipeGen.FFEATS).entrySet()) + this.pipe.types[e.getValue()] = e.getKey(); + + DB.println("Loading data finished. "); + + DB.println("number of parameter " + params.parameters.length); + DB.println("number of classes " + this.pipe.types.length); + } catch (Exception e) { + e.printStackTrace(); + } + } + + /* + * (non-Javadoc) + * + * @see is2.mtag2.Learn#train(is2.mtag2.Options, is2.mtag2.Pipe, + * is2.data.ParametersFloat, is2.data.InstancesTagger) + */ + @Override + public void train(OptionsSuper options, IPipe pipe, ParametersFloat params, Instances is) { + + int i = 0; + int del = 0; + + String[] wds = MFO.reverse(MFO.getFeatureSet().get(PipeGen.WORD)); + int numInstances = is.size(); + + float upd = (options.numIters * numInstances + 1); + + for (i = 0; i < options.numIters; i++) { + + long start = System.currentTimeMillis(); + + long last = System.currentTimeMillis(); + + FV pred = new FV(), gold = new FV(); + int correct = 0, count = 0; + + for (int n = 0; n < numInstances; n++) { + + upd--; + + if ((n + 1) % 500 == 0) + del = PipeGen.outValueErr(n + 1, (count - correct), (float) correct / (float) count, del, last, + upd); + + int length = is.length(n); + + int feats[] = new int[length]; + long[] vs = new long[ExtractorM._FC]; + + for (int w1 = 0; w1 < length; w1++) { + + count++; + + if (this.pipe.form2morph.get(is.forms[n][w1]) != null) { + correct++; + continue; + } + + int bestType = this.pipe.fillFeatureVectorsOne(params, w1, wds[is.forms[n][w1]], is, n, + is.gfeats[n], vs); + feats[w1] = bestType; + + if (bestType == is.gfeats[n][w1]) { + correct++; + continue; + } + + pred.clear(); + int p = bestType << ExtractorM.s_type; + // System.out.println("test type "+bestType+" ex type + // "+ExtractorM.s_type); + for (long element : vs) { + if (element == Integer.MIN_VALUE) + break; + if (element >= 0) + pred.add(this.pipe.li.l2i(element + p)); + } + + gold.clear(); + p = is.gfeats[n][w1] << ExtractorM.s_type; + for (long element : vs) { + if (element == Integer.MIN_VALUE) + break; + if (element >= 0) + gold.add(this.pipe.li.l2i(element + p)); + } + params.update(pred, gold, upd, 1.0f); + } + + } + + long end = System.currentTimeMillis(); + String info = "time " + (end - start); + del = PipeGen.outValueErr(numInstances, (count - correct), (float) correct / (float) count, del, last, 0, + info); + + System.out.println(); + } + + params.average(i * is.size()); + + } + + @Override + public void out(OptionsSuper options, IPipe pipe, ParametersFloat params) { + + try { + long start = System.currentTimeMillis(); + + CONLLReader09 depReader = new CONLLReader09(options.testfile, options.formatTask); + CONLLWriter09 depWriter = new CONLLWriter09(options.outfile, options.formatTask); + + depReader.normalizeOn = false; + + System.out.print("Processing Sentence: "); + pipe.initValues(); + + int cnt = 0; + int del = 0; + while (true) { + + InstancesTagger is = new InstancesTagger(); + is.init(1, this.pipe.mf); + cnt++; + + SentenceData09 instance = depReader.getNext(is); + if (instance == null || instance.forms == null) + break; + is.fillChars(instance, 0, ExtractorM._CEND); + + instance = exec(instance, this.pipe, params, is); + + SentenceData09 i09 = new SentenceData09(instance); + i09.createSemantic(instance); + + if (options.overwritegold) + i09.ofeats = i09.pfeats; + + depWriter.write(i09); + + if (cnt % 100 == 0) + del = PipeGen.outValue(cnt, del); + + } + depWriter.finishWriting(); + + del = PipeGen.outValue(cnt, del); + + long end = System.currentTimeMillis(); + System.out.println(PipeGen.getSecondsPerInstnace(cnt, (end - start))); + System.out.println(PipeGen.getUsedTime((end - start))); + } catch (Exception e) { + e.printStackTrace(); + } + } + + private SentenceData09 exec(SentenceData09 instance, ExtractorM pipe, ParametersFloat params, InstancesTagger is) { + + int length = instance.ppos.length; + + short[] feats = new short[instance.gpos.length]; + + long vs[] = new long[ExtractorM._FC]; + + String[] forms = instance.forms; + + instance.pfeats = new String[instance.gpos.length]; + + for (int j = 0; j < length; j++) { + if (pipe.form2morph.get(is.forms[0][j]) != null) { + feats[j] = (short) pipe.form2morph.get(is.forms[0][j]).intValue(); + instance.pfeats[j] = this.pipe.types[feats[j]]; + } else { + + int bestType = pipe.fillFeatureVectorsOne(params, j, forms[j], is, 0, feats, vs); + feats[j] = (short) bestType; + instance.pfeats[j] = this.pipe.types[bestType]; + } + } + for (int j = 0; j < length; j++) { + if (pipe.form2morph.get(is.forms[0][j]) != null) { + feats[j] = (short) pipe.form2morph.get(is.forms[0][j]).intValue(); + instance.pfeats[j] = this.pipe.types[feats[j]]; + } else { + + int bestType = pipe.fillFeatureVectorsOne(params, j, forms[j], is, 0, feats, vs); + feats[j] = (short) bestType; + instance.pfeats[j] = this.pipe.types[bestType]; + } + } + return instance; + } + + /* + * (non-Javadoc) + * + * @see is2.tools.Tool#apply(is2.data.SentenceData09) + */ + @Override + public SentenceData09 apply(SentenceData09 snt) { + + try { + SentenceData09 it = new SentenceData09(); + it.createWithRoot(snt); + + InstancesTagger is = new InstancesTagger(); + is.init(1, pipe.mf); + is.createInstance09(it.forms.length); + + String[] forms = it.forms; + + int length = forms.length; + + // is.setForm(0, 0, CONLLReader09.ROOT); + for (int i = 0; i < length; i++) + is.setForm(0, i, forms[i]); + for (int i = 0; i < length; i++) + is.setLemma(0, i, it.plemmas[i]); + for (int i = 0; i < length; i++) + is.setPPoss(0, i, it.ppos[i]); + + is.fillChars(it, 0, ExtractorM._CEND); + + exec(it, pipe, params, is); + SentenceData09 i09 = new SentenceData09(it); + i09.createSemantic(it); + return i09; + } catch (Exception e) { + e.printStackTrace(); + } + + return null; + } +} diff --git a/dependencyParser/experimental/mate-tools/src/is2/parser/Closed.java b/dependencyParser/experimental/mate-tools/src/is2/parser/Closed.java new file mode 100755 index 0000000..af491aa --- /dev/null +++ b/dependencyParser/experimental/mate-tools/src/is2/parser/Closed.java @@ -0,0 +1,30 @@ +package is2.parser; + +import is2.data.Parse; + +final public class Closed { + + public float p; + // short b,e,m; + byte dir; + + Closed d; + Open u; + + public Closed(short s, short t, int m, int dir, Open u, Closed d, float score) { + // this.b = s; + // this.e = t; + // this.m = (short)m; + this.dir = (byte) dir; + this.u = u; + this.d = d; + p = score; + } + + public void create(Parse parse) { + if (u != null) + u.create(parse); + if (d != null) + d.create(parse); + } +} diff --git a/dependencyParser/experimental/mate-tools/src/is2/parser/D5.java b/dependencyParser/experimental/mate-tools/src/is2/parser/D5.java new file mode 100644 index 0000000..407b4e1 --- /dev/null +++ b/dependencyParser/experimental/mate-tools/src/is2/parser/D5.java @@ -0,0 +1,293 @@ +/** + * + */ +package is2.parser; + +import is2.data.DX; +import is2.data.IFV; +import is2.data.Long2IntInterface; + +/** + * @author Dr. Bernd Bohnet, 30.10.2010 + * + * + */ +final public class D5 extends DX { + + public long shift; + private long h; + + /* + * (non-Javadoc) + * + * @see is2.parser52L.DX#cz2() + */ + final public void cz2() { + + if (v0 < 0 || v1 < 0) { + shift = 0; + h = -1; + return; + } + + h = v0 | v1 << (shift = a0); + shift += a1; + + } + + /* + * (non-Javadoc) + * + * @see is2.parser52L.DX#cz3() + */ + @Override + final public void cz3() { + + if (v0 < 0 || v1 < 0 || v2 < 0) { + shift = 0; + h = -1; + return; + + } + + h = v0 | v1 << (shift = a0) | v2 << (shift += a1); + shift = shift + a2; + + } + + /* + * (non-Javadoc) + * + * @see is2.parser52L.DX#cz4() + */ + @Override + final public void cz4() { + if (v0 < 0 || v1 < 0 || v2 < 0 || v3 < 0) { + shift = 0; + h = -1; + return; + } + + h = v0 | v1 << (shift = a0) | v2 << (shift += a1) | v3 << (shift += a2); + shift = shift + a3; + + } + + /* + * (non-Javadoc) + * + * @see is2.parser52L.DX#cz5() + */ + @Override + final public void cz5() { + + if (v0 < 0 || v1 < 0 || v2 < 0 || v3 < 0 || v4 < 0) { + shift = 0; + h = -1; + return; + } + + h = v0 | v1 << (shift = a0) | v2 << (shift += a1) | v3 << (shift += a2) | v4 << (shift += a3); + shift = shift + a4; + + } + + /* + * (non-Javadoc) + * + * @see is2.parser52L.DX#cz6() + */ + @Override + final public void cz6() { + + if (v0 < 0 || v1 < 0 || v2 < 0 || v3 < 0 || v4 < 0 || v5 < 0) { + shift = 0; + h = -1; + return; + } + + h = v0 | v1 << (shift = a0) | v2 << (shift += a1) | v3 << (shift += a2) | v4 << (shift += a3) + | v5 << (shift += a4); + shift = shift + a5; + + } + + /* + * (non-Javadoc) + * + * @see is2.parser52L.DX#cz7() + */ + @Override + final public void cz7() { + + if (v0 < 0 || v1 < 0 || v2 < 0 || v3 < 0 || v4 < 0 || v5 < 0 || v6 < 0) { + shift = 0; + h = -1; + return; + } + + h = v0 | v1 << (shift = a0) | v2 << (shift += a1) | v3 << (shift += a2) | v4 << (shift += a3) + | v5 << (shift += a4) | v6 << (shift += a5); + shift = shift + a6; + + } + + /* + * (non-Javadoc) + * + * @see is2.parser52L.DX#cz8() + */ + @Override + final public void cz8() { + + if (v0 < 0 || v1 < 0 || v2 < 0 || v3 < 0 || v4 < 0 || v5 < 0 || v6 < 0 || v7 < 0) { + h = -1; + shift = 0; + return; + } + + h = v0 | v1 << (shift = a0) | v2 << (shift += a1) | v3 << (shift += a2) | v4 << (shift += a3) + | v5 << (shift += a4) | v6 << (shift += a5) | v7 << (shift += a6); + shift = shift + a7; + + } + + /* + * (non-Javadoc) + * + * @see is2.parser52L.DX#clean() + */ + @Override + final public void clean() { + v0 = 0; + v1 = 0; + v2 = 0; + v3 = 0; + v4 = 0; + v5 = 0; + v6 = 0; + v7 = 0; + v8 = 0; + shift = 0; + h = 0; + } + + public final Long2IntInterface _li; + + public D5(Long2IntInterface li) { + _li = li; + } + + /* + * (non-Javadoc) + * + * @see is2.parser52L.DX#cs(int, int) + */ + @Override + final public long cs(int b, int v) { + if (h < 0) { + h = -1; + shift = 0; + return -1; + } + + h |= (long) v << shift; + shift += b; + if (shift > 64) { + System.out.println("shift too large " + shift); + new Exception().printStackTrace(); + } + + return h; + + } + + /* + * (non-Javadoc) + * + * @see is2.parser52L.DX#csa(int, int) + */ + @Override + final public long csa(int b, int v) { + if (h < 0) { + h = -1; + shift = 0; + return -1; + } + + h |= (long) v << shift; + shift += b; + if (shift > 64) { + System.out.println("shift too large " + shift); + new Exception().printStackTrace(); + } + + return h; + + } + + /* + * (non-Javadoc) + * + * @see is2.parser52L.DX#csa(int, int, is2.data.IFV) + */ + @Override + final public void csa(int b, int v, IFV f) { + if (h < 0) { + h = -1; + shift = 0; + return; + } + + h |= (long) v << shift; + shift += b; + if (shift > 64) { + System.out.println("shift too large " + shift); + new Exception().printStackTrace(); + } + + f.add(_li.l2i(h)); + } + + /* + * (non-Javadoc) + * + * @see is2.parser52L.DX#getVal() + */ + @Override + public long getVal() { + if (h < 0) { + h = -1; + shift = 0; + return h; + } + return h; + } + + /* + * (non-Javadoc) + * + * @see is2.parser52L.DX#map(is2.data.IFV, long) + */ + @Override + public void map(IFV f, long l) { + if (l > 0) + f.add(_li.l2i(l)); + } + + /* + * (non-Javadoc) + * + * @see is2.data.DX#computeLabeValue(short, short) + */ + @Override + public int computeLabeValue(int label, int shift) { + return label << shift; + } + + @Override + public void fix() { + + } + +} \ No newline at end of file diff --git a/dependencyParser/experimental/mate-tools/src/is2/parser/Decoder.java b/dependencyParser/experimental/mate-tools/src/is2/parser/Decoder.java new file mode 100755 index 0000000..1fe2340 --- /dev/null +++ b/dependencyParser/experimental/mate-tools/src/is2/parser/Decoder.java @@ -0,0 +1,243 @@ +package is2.parser; + +import java.util.ArrayList; +import java.util.concurrent.ExecutorService; + +import is2.data.DataFES; +import is2.data.Parse; + +/** + * @author Bernd Bohnet, 01.09.2009 + * + * This methods do the actual work and they build the dependency trees. + */ +final public class Decoder { + + public static final boolean TRAINING = true; + public static long timeDecotder; + public static long timeRearrange; + + /** + * Threshold for rearrange edges non-projective + */ + public static float NON_PROJECTIVITY_THRESHOLD = 0.3F; + + static ExecutorService executerService = java.util.concurrent.Executors.newFixedThreadPool(Parser.THREADS); + + // do not initialize + private Decoder() { + }; + + /** + * Build a dependency tree based on the data + * + * @param pos + * part-of-speech tags + * @param x + * the data + * @param projective + * projective or non-projective + * @param edges + * the edges + * @return a parse tree + * @throws InterruptedException + */ + public static Parse decode(short[] pos, DataFES x, boolean projective, boolean training) + throws InterruptedException { + + long ts = System.nanoTime(); + + if (executerService.isShutdown()) + executerService = java.util.concurrent.Executors.newCachedThreadPool(); + final int n = pos.length; + + final Open O[][][][] = new Open[n][n][2][]; + final Closed C[][][][] = new Closed[n][n][2][]; + + ArrayList<ParallelDecoder> pe = new ArrayList<ParallelDecoder>(); + + for (int i = 0; i < Parser.THREADS; i++) + pe.add(new ParallelDecoder(pos, x, O, C, n)); + + for (short k = 1; k < n; k++) { + + // provide the threads the data + for (short s = 0; s < n; s++) { + short t = (short) (s + k); + if (t >= n) + break; + + ParallelDecoder.add(s, t); + } + + executerService.invokeAll(pe); + } + + float bestSpanScore = (-1.0F / 0.0F); + Closed bestSpan = null; + for (int m = 1; m < n; m++) + if (C[0][n - 1][1][m].p > bestSpanScore) { + bestSpanScore = C[0][n - 1][1][m].p; + bestSpan = C[0][n - 1][1][m]; + } + + // build the dependency tree from the chart + Parse out = new Parse(pos.length); + + bestSpan.create(out); + + out.heads[0] = -1; + out.labels[0] = 0; + + timeDecotder += (System.nanoTime() - ts); + + ts = System.nanoTime(); + + if (!projective) + rearrange(pos, out.heads, out.labels, x, training); + + timeRearrange += (System.nanoTime() - ts); + + return out; + } + + public static Parse[] decodeAll(short[] pos, DataFES x, boolean projective, boolean training) + throws InterruptedException { + + long ts = System.nanoTime(); + + if (executerService.isShutdown()) + executerService = java.util.concurrent.Executors.newCachedThreadPool(); + final int n = pos.length; + + final Open O[][][][] = new Open[n][n][2][]; + final Closed C[][][][] = new Closed[n][n][2][]; + + ArrayList<ParallelDecoder> pe = new ArrayList<ParallelDecoder>(); + + for (int i = 0; i < Parser.THREADS; i++) + pe.add(new ParallelDecoder(pos, x, O, C, n)); + + for (short k = 1; k < n; k++) { + + // provide the threads the data + for (short s = 0; s < n; s++) { + short t = (short) (s + k); + if (t >= n) + break; + + ParallelDecoder.add(s, t); + } + + executerService.invokeAll(pe); + } + + Parse[] out = new Parse[n - 1]; + + // float bestSpanScore = (-1.0F / 0.0F); + // Closed bestSpan = null; + for (int m = 1; m < n; m++) { + // if (C[0][n - 1][1][m].p > bestSpanScore) { + // bestSpanScore = C[0][n - 1][1][m].p; + // bestSpan = C[0][n - 1][1][m]; + // } + out[m - 1] = new Parse(pos.length); + C[0][n - 1][1][m].create(out[m - 1]); + out[m - 1].heads[0] = -1; + out[m - 1].labels[0] = 0; + } + + // build the dependency tree from the chart + // Parse out= new Parse(pos.length); + + // bestSpan.create(out); + + // out.heads[0]=-1; + // out.labels[0]=0; + + timeDecotder += (System.nanoTime() - ts); + + ts = System.nanoTime(); + + if (!projective) + for (Parse p : out) + rearrange(pos, p.heads, p.labels, x, training); + // if (!projective) rearrange(pos, out.heads, out.labels,x,training); + + timeRearrange += (System.nanoTime() - ts); + + return out; + } + + /** + * This is the parallel non-projective edge re-arranger + * + * @param pos + * part-of-speech tags + * @param heads + * parent child relation + * @param labs + * edge labels + * @param x + * the data + * @param edges + * the existing edges defined by part-of-speech tags + * @throws InterruptedException + */ + public static void rearrange(short[] pos, short[] heads, short[] labs, DataFES x, boolean training) + throws InterruptedException { + + int threads = (pos.length > Parser.THREADS) ? Parser.THREADS : pos.length; + + // wh what to change, nPar - new parent, nType - new type + short wh = -1, nPar = -1, nType = -1; + ArrayList<ParallelRearrange> pe = new ArrayList<ParallelRearrange>(); + + while (true) { + boolean[][] isChild = new boolean[heads.length][heads.length]; + for (int i = 1, l1 = 1; i < heads.length; i++, l1 = i) + while ((l1 = heads[l1]) != -1) + isChild[l1][i] = true; + + float max = Float.NEGATIVE_INFINITY; + float p = Extractor.encode3(pos, heads, labs, x); + + pe.clear(); + for (int i = 0; i < threads; i++) + pe.add(new ParallelRearrange(isChild, pos, x, heads, labs)); + + for (int ch = 1; ch < heads.length; ch++) { + + for (short pa = 0; pa < heads.length; pa++) { + if (ch == pa || pa == heads[ch] || isChild[ch][pa]) + continue; + + ParallelRearrange.add(p, (short) ch, pa); + } + } + executerService.invokeAll(pe); + + for (ParallelRearrange.PA rp : ParallelRearrange.order) + if (max < rp.max) { + max = rp.max; + wh = rp.wh; + nPar = rp.nPar; + nType = rp.nType; + } + ParallelRearrange.order.clear(); + + if (max <= NON_PROJECTIVITY_THRESHOLD) + break; // bb: changed from 0.0 + + heads[wh] = nPar; + labs[wh] = nType; + + } + } + + public static String getInfo() { + + return "Decoder non-projectivity threshold: " + NON_PROJECTIVITY_THRESHOLD; + } + +} diff --git a/dependencyParser/experimental/mate-tools/src/is2/parser/Edges.java b/dependencyParser/experimental/mate-tools/src/is2/parser/Edges.java new file mode 100644 index 0000000..39a0190 --- /dev/null +++ b/dependencyParser/experimental/mate-tools/src/is2/parser/Edges.java @@ -0,0 +1,208 @@ +/** + * + */ +package is2.parser; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; +import java.util.Arrays; +import java.util.Comparator; +import java.util.HashMap; +import java.util.Map.Entry; + +/** + * @author Dr. Bernd Bohnet, 13.05.2009; + * + * + */ +public final class Edges { + + private static short[][][] edges; + private static HashMap<Short, Integer> labelCount = new HashMap<Short, Integer>(); + + private static HashMap<String, Integer> slabelCount = new HashMap<String, Integer>(); + + static short[] def = new short[1]; + + private Edges() { + } + + /** + * @param length + */ + public static void init(int length) { + edges = new short[length][length][]; + } + + public static void findDefault() { + + int best = 0; + + for (Entry<Short, Integer> e : labelCount.entrySet()) { + + if (best < e.getValue()) { + best = e.getValue(); + def[0] = e.getKey(); + } + } + + // labelCount=null; + // String[] types = new String[mf.getFeatureCounter().get(PipeGen.REL)]; + // for (Entry<String, Integer> e : + // MFO.getFeatureSet().get(PipeGen.REL).entrySet()) types[e.getValue()] + // = e.getKey(); + + is2.util.DB.println("set default label to " + def[0] + " "); + + // System.out.println("found default "+def[0]); + + } + + final static public void put(int pos1, int pos2, short label) { + putD(pos1, pos2, label); + // putD(pos2, pos1,!dir, label); + } + + final static public void putD(int pos1, int pos2, short label) { + + Integer lc = labelCount.get(label); + if (lc == null) + labelCount.put(label, 1); + else + labelCount.put(label, lc + 1); + + String key = pos1 + "-" + pos2 + label; + Integer lcs = slabelCount.get(key); + if (lcs == null) + slabelCount.put(key, 1); + else + slabelCount.put(key, lcs + 1); + + if (edges[pos1][pos2] == null) { + edges[pos1][pos2] = new short[1]; + edges[pos1][pos2][0] = label; + + // edgesh[pos1][pos2][dir?0:1] = new TIntHashSet(2); + // edgesh[pos1][pos2][dir?0:1].add(label); + } else { + short labels[] = edges[pos1][pos2]; + for (short l : labels) { + // contains label already? + if (l == label) + return; + } + + short[] nlabels = new short[labels.length + 1]; + System.arraycopy(labels, 0, nlabels, 0, labels.length); + nlabels[labels.length] = label; + edges[pos1][pos2] = nlabels; + + // edgesh[pos1][pos2][dir?0:1].add(label); + } + } + + final static public short[] get(int pos1, int pos2) { + + if (pos1 < 0 || pos2 < 0 || edges[pos1][pos2] == null) + return def; + return edges[pos1][pos2]; + } + + /** + * @param dis + */ + static public void write(DataOutputStream d) throws IOException { + + int len = edges.length; + d.writeShort(len); + + for (int p1 = 0; p1 < len; p1++) { + for (int p2 = 0; p2 < len; p2++) { + if (edges[p1][p2] == null) + d.writeShort(0); + else { + d.writeShort(edges[p1][p2].length); + for (int l = 0; l < edges[p1][p2].length; l++) { + d.writeShort(edges[p1][p2][l]); + } + + } + } + } + + d.writeShort(def[0]); + + } + + /** + * @param dis + */ + public static void read(DataInputStream d) throws IOException { + int len = d.readShort(); + + edges = new short[len][len][]; + for (int p1 = 0; p1 < len; p1++) { + for (int p2 = 0; p2 < len; p2++) { + int ll = d.readShort(); + if (ll == 0) { + edges[p1][p2] = null; + } else { + edges[p1][p2] = new short[ll]; + for (int l = 0; l < ll; l++) { + edges[p1][p2][l] = d.readShort(); + } + } + } + } + + def[0] = d.readShort(); + + } + + public static void print() { + for(int i = 0; i < edges.length; ++i) + for(int j = 0; j < edges[i].length; ++j) + if(edges[i][j] != null) + System.out.println("edges[" + i + "][" + j + "] = " + Arrays.toString(edges[i][j])); + + assert def.length == 0; + System.out.println("def = [" + def[0] + "]"); + } + + public static class C implements Comparator<Short> { + + public C() { + super(); + } + + String _key; + + public C(String key) { + super(); + _key = key; + } + + /* + * (non-Javadoc) + * + * @see java.util.Comparator#compare(java.lang.Object, java.lang.Object) + */ + @Override + public int compare(Short l1, Short l2) { + + // int c1 = labelCount.get(l1); + // int c2 = labelCount.get(l2); + // if (true) return c1==c2?0:c1>c2?-1:1; + + int x1 = slabelCount.get(_key + l1.shortValue()); + int x2 = slabelCount.get(_key + l2.shortValue()); + // System.out.println(x1+" "+x2); + + return x1 == x2 ? 0 : x1 > x2 ? -1 : 1; + + } + + } + +} diff --git a/dependencyParser/experimental/mate-tools/src/is2/parser/Evaluator.java b/dependencyParser/experimental/mate-tools/src/is2/parser/Evaluator.java new file mode 100755 index 0000000..f0d45ec --- /dev/null +++ b/dependencyParser/experimental/mate-tools/src/is2/parser/Evaluator.java @@ -0,0 +1,100 @@ +package is2.parser; + +import is2.data.SentenceData09; +import is2.io.CONLLReader09; + +public class Evaluator { + + public static final String PUNCT = "!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~"; + + public static class Results { + + public int total; + public int corr; + public float las; + public float ula; + + } + + public static Results evaluate(String act_file, String pred_file) throws Exception { + + CONLLReader09 goldReader = new CONLLReader09(act_file, -1); + CONLLReader09 predictedReader = new CONLLReader09(pred_file, -1); + + int total = 0, corr = 0, corrL = 0; + int numsent = 0, corrsent = 0, corrsentL = 0; + SentenceData09 goldInstance = goldReader.getNext(); + SentenceData09 predInstance = predictedReader.getNext(); + + while (goldInstance != null) { + + int instanceLength = goldInstance.length(); + + if (instanceLength != predInstance.length()) + System.out.println("Lengths do not match on sentence " + numsent); + + int[] goldHeads = goldInstance.heads; + String[] goldLabels = goldInstance.labels; + int[] predHeads = predInstance.heads; + String[] predLabels = predInstance.labels; + + boolean whole = true; + boolean wholeL = true; + + // NOTE: the first item is the root info added during + // nextInstance(), so we skip it. + + int punc = 0; + for (int i = 1; i < instanceLength; i++) { + if (predHeads[i] == goldHeads[i]) { + corr++; + + if (goldLabels[i].equals(predLabels[i])) + corrL++; + else { + // System.out.println(numsent+" error gold + // "+goldLabels[i]+" "+predLabels[i]+" head + // "+goldHeads[i]+" child "+i); + wholeL = false; + } + } else { + // System.out.println(numsent+"error gold "+goldLabels[i]+" + // "+predLabels[i]+" head "+goldHeads[i]+" child "+i); + whole = false; + wholeL = false; + } + } + total += ((instanceLength - 1) - punc); // Subtract one to not score + // fake root token + + if (whole) + corrsent++; + if (wholeL) + corrsentL++; + numsent++; + + goldInstance = goldReader.getNext(); + predInstance = predictedReader.getNext(); + } + + Results r = new Results(); + + r.total = total; + r.corr = corr; + r.las = (float) Math.round(((double) corrL / total) * 100000) / 1000; + r.ula = (float) Math.round(((double) corr / total) * 100000) / 1000; + System.out.print("Total: " + total + " \tCorrect: " + corr + " "); + System.out.println("LAS: " + (double) Math.round(((double) corrL / total) * 100000) / 1000 + " \tTotal: " + + (double) Math.round(((double) corrsentL / numsent) * 100000) / 1000 + " \tULA: " + + (double) Math.round(((double) corr / total) * 100000) / 1000 + " \tTotal: " + + (double) Math.round(((double) corrsent / numsent) * 100000) / 1000); + + return r; + } + + public static float round(double v) { + + return Math.round(v * 10000F) / 10000F; + } + +} diff --git a/dependencyParser/experimental/mate-tools/src/is2/parser/Extractor.java b/dependencyParser/experimental/mate-tools/src/is2/parser/Extractor.java new file mode 100755 index 0000000..3ba9cc9 --- /dev/null +++ b/dependencyParser/experimental/mate-tools/src/is2/parser/Extractor.java @@ -0,0 +1,1726 @@ +package is2.parser; + +import is2.data.Cluster; +import is2.data.D6; +import is2.data.DX; +import is2.data.DataFES; +import is2.data.F2SF; +import is2.data.FV; +import is2.data.IFV; +import is2.data.Instances; +import is2.data.Long2IntInterface; +import is2.data.PipeGen; +import is2.util.DB; +import is2.util.OptionsSuper; + +final public class Extractor { + + static final int _SIB = 85; + public static int s_rel, s_word, s_type, s_dir, s_dist, s_feat, s_child, s_spath, s_lpath, s_pos, s_rel1; + public final DX d0, dl1, dl2, dwr, dr, dwwp, dw, dwp, dlf, d3lp, d2lp, d2pw, d2pp; + + public final Long2IntInterface li; + + public boolean s_stack = false; + + public Extractor(Long2IntInterface li, boolean stack, int what) { + + s_stack = stack; + + this.li = li; + + if (what == OptionsSuper.MULTIPLICATIVE) { + d0 = new D6(li); + dl1 = new D6(li); + dl2 = new D6(li); + dwr = new D6(li); + dr = new D6(li); + dwwp = new D6(li); + dw = new D6(li); + dwp = new D6(li); + dlf = new D6(li); + d3lp = new D6(li); + d2lp = new D6(li); + d2pw = new D6(li); + d2pp = new D6(li); + } else { + d0 = new D5(li); + dl1 = new D5(li); + dl2 = new D5(li); + dwr = new D5(li); + dr = new D5(li); + dwwp = new D5(li); + dw = new D5(li); + dwp = new D5(li); + dlf = new D5(li); + d3lp = new D5(li); + d2lp = new D5(li); + d2pw = new D5(li); + d2pp = new D5(li); + } + + } + + public static void initStat(int what) { + MFO mf = new MFO(); + if (what == OptionsSuper.MULTIPLICATIVE) { + + DB.println("mult (d4) "); + + s_rel = mf.getFeatureCounter().get(REL).intValue() * 16; + s_rel1 = mf.getFeatureCounter().get(REL).intValue() + 1; + s_pos = mf.getFeatureCounter().get(POS).intValue(); + s_word = mf.getFeatureCounter().get(WORD).intValue(); + s_type = mf.getFeatureCounter().get(TYPE).intValue(); + s_dir = (mf.getFeatureCounter().get(DIR)); + la = (mf.getValue(DIR, LA)); + ra = (mf.getValue(DIR, RA)); + s_dist = (mf.getFeatureCounter().get(DIST));// mf.getFeatureBits(DIST); + s_feat = (mf.getFeatureCounter().get(PipeGen.FEAT));// mf.getFeatureBits(Pipe.FEAT); + s_spath = (mf.getFeatureCounter().get(Cluster.SPATH) == null ? 0 + : mf.getFeatureCounter().get(Cluster.SPATH));// mf.getFeatureBits(Cluster.SPATH); + s_lpath = (mf.getFeatureCounter().get(Cluster.LPATH) == null ? 0 + : mf.getFeatureCounter().get(Cluster.LPATH));// mf.getFeatureBits(Cluster.LPATH); + + } else { + + s_rel = MFO.getFeatureBits(REL); + s_pos = MFO.getFeatureBits(POS); + s_word = MFO.getFeatureBits(WORD); + s_type = MFO.getFeatureBits(TYPE); + s_dir = MFO.getFeatureBits(DIR); + la = mf.getValue(DIR, LA); + ra = mf.getValue(DIR, RA); + s_dist = MFO.getFeatureBits(DIST); + s_feat = MFO.getFeatureBits(PipeGen.FEAT); + s_spath = MFO.getFeatureBits(Cluster.SPATH); + s_lpath = MFO.getFeatureBits(Cluster.LPATH); + + DB.println("shift init (d5) "); + } + + } + + public void init() { + + d0.a0 = s_type; + d0.a1 = s_pos; + d0.a2 = s_pos; + d0.a3 = s_pos; + d0.a4 = s_pos; + d0.a5 = s_pos; + d0.a6 = s_pos; + d0.a7 = s_pos; + d0.fix(); + dl1.a0 = s_type; + dl1.a1 = s_rel; + dl1.a2 = s_pos; + dl1.a3 = s_pos; + dl1.a4 = s_pos; + dl1.a5 = s_pos; + dl1.a6 = s_pos; + dl1.a7 = s_pos; + dl1.fix(); + dl2.a0 = s_type; + dl2.a1 = s_rel; + dl2.a2 = s_word; + dl2.a3 = s_pos; + dl2.a4 = s_pos; + dl2.a5 = s_pos; + dl2.a6 = s_pos; + dl2.a7 = s_pos; + dl2.fix(); + dwp.a0 = s_type; + dwp.a1 = s_rel; + dwp.a2 = s_word; + dwp.a3 = s_pos; + dwp.a4 = s_pos; + dwp.a5 = s_word; + dwp.fix(); + dwwp.a0 = s_type; + dwwp.a1 = s_rel; + dwwp.a2 = s_word; + dwwp.a3 = s_word; + dwwp.a4 = s_pos; + dwwp.a5 = s_word; + dwwp.fix(); + dlf.a0 = s_type; + dlf.a1 = s_rel; + dlf.a2 = s_pos; + dlf.a3 = s_pos; + dlf.a4 = s_feat; + dlf.a5 = s_feat; + dlf.a6 = s_pos; + dlf.a7 = s_pos; + dlf.fix(); + d3lp.a0 = s_type; + d3lp.a1 = s_rel; + d3lp.a2 = s_lpath; + d3lp.a3 = s_lpath; + d3lp.a4 = s_lpath; + d3lp.a5 = s_word; + d3lp.a6 = s_spath; + d3lp.a7 = s_spath; + d3lp.fix(); + d2lp.a0 = s_type; + d2lp.a1 = s_rel; + d2lp.a2 = s_lpath; + d2lp.a3 = s_lpath; + d2lp.a4 = s_word; + d2lp.a5 = s_word; + d2lp.fix(); // d3lp.a6 = s_spath; d3lp.a7 = s_spath; + d2pw.a0 = s_type; + d2pw.a1 = s_rel; + d2pw.a2 = s_lpath; + d2pw.a3 = s_lpath; + d2pw.a4 = s_word; + d2pw.a5 = s_word; + d2pw.fix(); // d3lp.a6 = s_spath; d3lp.a7 = s_spath; + d2pp.a0 = s_type; + d2pp.a1 = s_rel; + d2pp.a2 = s_lpath; + d2pp.a3 = s_lpath; + d2pp.a4 = s_pos; + d2pp.a5 = s_pos; + d2pp.fix(); // d3lp.a6 = s_spath; d3lp.a7 = s_spath; + } + + public int basic(short[] pposs, int p, int d, IFV f) { + + d0.clean(); + dl1.clean(); + dl2.clean(); + dwp.clean(); + dwwp.clean(); + dlf.clean(); + d3lp.clean(); + + d3lp.clean(); + d2lp.clean(); + d2pw.clean(); + d2pp.clean(); + + int n = 1; + int dir = (p < d) ? ra : la; + d0.v0 = n++; + d0.v1 = pposs[p]; + d0.v2 = pposs[d]; // d0.stop=4; + int end = (p >= d ? p : d); + int start = (p >= d ? d : p) + 1; + + for (int i = start; i < end; i++) { + d0.v3 = pposs[i]; + d0.cz4(); + d0.csa(s_dir, dir, f); + } + return n; + } + + public int firstm(Instances is, int i, int prnt, int dpnt, int label, Cluster cluster, long[] f) { + + for (int k = 0; k < f.length; k++) + f[k] = 0; + + short[] pposs = is.pposs[i]; + int[] form = is.forms[i]; + short[][] feats = is.feats[i]; + + int pF = form[prnt], dF = form[dpnt]; + int pL = is.plemmas[i][prnt], dL = is.plemmas[i][dpnt]; + int pP = pposs[prnt], dP = pposs[dpnt]; + + int prntLS = pF == -1 ? -1 : cluster.getLP(pF), chldLS = dF == -1 ? -1 : cluster.getLP(dF); + + // final int dir= (prnt < dpnt)? ra:la; + + if (pF > maxForm) + pF = -1; + if (pL > maxForm) + pL = -1; + + if (dF > maxForm) + dF = -1; + if (dL > maxForm) + dL = -1; + + int n = 3, c = 0; + + dl2.v1 = label; + dl2.v0 = n++; + dl2.v2 = pF; + dl2.v3 = dP; + dl2.cz4(); + f[c++] = dl2.getVal(); + dl2.v0 = n++; + dl2.cz3(); + f[c++] = dl2.getVal(); + dl2.v0 = n++; + dl2.v2 = dF; + dl2.v3 = pP; + dl2.cz4(); + f[c++] = dl2.getVal(); + dl2.v0 = n++; + dl2.cz3(); + f[c++] = dl2.getVal(); + + dwwp.v1 = label; + dwwp.v0 = n++; + dwwp.v2 = pF; + dwwp.v3 = dF; + dwwp.cz4(); + f[c++] = dwwp.getVal(); + + dl1.v1 = label; + dl1.v0 = n++; + dl1.v2 = dP; + dl1.cz3(); + f[c++] = dl1.getVal(); + dl1.v0 = n++; + dl1.v2 = pP; + dl1.cz3(); + f[c++] = dl1.getVal(); + dl1.v0 = n++; + dl1.v3 = dP; + dl1.cz4(); + f[c++] = dl1.getVal(); + + int pPm1 = prnt > 0 ? pposs[prnt - 1] : s_str, dPm1 = dpnt > 0 ? pposs[dpnt - 1] : s_str; + int pPp1 = prnt < pposs.length - 1 ? pposs[prnt + 1] : s_end, + dPp1 = dpnt < pposs.length - 1 ? pposs[dpnt + 1] : s_end; + + int pPm2 = prnt > 1 ? pposs[prnt - 2] : s_str, dPm2 = dpnt > 1 ? pposs[dpnt - 2] : s_str; + int pPp2 = prnt < pposs.length - 2 ? pposs[prnt + 2] : s_end, + dPp2 = dpnt < pposs.length - 2 ? pposs[dpnt + 2] : s_end; + + int pFm1 = prnt > 0 ? form[prnt - 1] : s_stwrd, dFm1 = dpnt > 0 ? form[dpnt - 1] : s_stwrd; + int pFp1 = prnt < form.length - 1 ? form[prnt + 1] : s_stwrd, + dFp1 = dpnt < form.length - 1 ? form[dpnt + 1] : s_stwrd; + + if (prnt - 1 == dpnt) + pPm1 = -1; + if (prnt == dpnt - 1) + dPm1 = -1; + + if (prnt + 1 == dpnt) + pPp1 = -1; + if (prnt == dpnt + 1) + dPp1 = -1; + + if (prnt - 2 == dpnt) + pPm2 = -1; + if (prnt == dpnt - 2) + dPm2 = -1; + + if (prnt + 2 == dpnt) + pPp2 = -1; + if (prnt == dpnt + 2) + dPp2 = -1; + + dl1.v0 = n++; + dl1.v2 = pP; + dl1.v3 = pPp1; + dl1.v4 = dP; + dl1.v5 = dPp1; + dl1.v6 = (prnt + 1 == dpnt ? 4 : prnt == dpnt + 1 ? 5 : 6); + dl1.cz7(); + f[c++] = dl1.getVal(); + dl1.v0 = n++; + dl1.v5 = dPm1; + dl1.v6 = (prnt + 1 == dpnt ? 4 : prnt == dpnt - 1 ? 5 : 6); + dl1.cz7(); + f[c++] = dl1.getVal(); + dl1.v0 = n++; + dl1.v3 = pPm1; + dl1.v6 = (prnt - 1 == dpnt ? 4 : prnt == dpnt - 1 ? 5 : 6); + dl1.cz7(); + f[c++] = dl1.getVal(); + dl1.v0 = n++; + dl1.v5 = dPp1; + dl1.v6 = (prnt - 1 == dpnt ? 4 : prnt == dpnt + 1 ? 5 : 6); + dl1.cz7(); + f[c++] = dl1.getVal(); + + dl1.v0 = n++; + dl1.v3 = pPm1; + dl1.v5 = (prnt - 1 == dpnt ? 4 : 5); + dl1.cz6(); + f[c++] = dl1.getVal(); + dl1.v0 = n++; + dl1.v3 = dPm1; + dl1.v5 = (prnt == dpnt - 1 ? 4 : 5); + dl1.cz6(); + f[c++] = dl1.getVal(); + dl1.v0 = n++; + dl1.v3 = dPp1; + dl1.v5 = (prnt == dpnt + 1 ? 4 : 5); + dl1.cz6(); + f[c++] = dl1.getVal(); + dl1.v0 = n++; + dl1.v3 = pPp1; + dl1.v5 = (prnt + 1 == dpnt ? 4 : 5); + dl1.cz6(); + f[c++] = dl1.getVal(); + + dl1.v0 = n++; + dl1.v2 = pP; + dl1.v3 = pPp2; + dl1.v4 = dP; + dl1.v5 = dPp2; + dl1.v6 = (prnt + 2 == dpnt ? 4 : prnt == dpnt + 2 ? 5 : 6); + dl1.cz7(); + f[c++] = dl1.getVal(); + dl1.v0 = n++; + dl1.v5 = dPm2; + dl1.v6 = (prnt + 2 == dpnt ? 4 : prnt == dpnt - 2 ? 5 : 6); + dl1.cz7(); + f[c++] = dl1.getVal(); + dl1.v0 = n++; + dl1.v3 = pPm2; + dl1.v6 = (prnt - 2 == dpnt ? 4 : prnt == dpnt - 2 ? 5 : 6); + dl1.cz7(); + f[c++] = dl1.getVal(); + dl1.v0 = n++; + dl1.v5 = dPp2; + dl1.v6 = (prnt - 2 == dpnt ? 4 : prnt == dpnt + 2 ? 5 : 6); + dl1.cz7(); + f[c++] = dl1.getVal(); + + // remove this again + dl1.v0 = n++; + dl1.v3 = pPm2; + dl1.v5 = (prnt - 2 == dpnt ? 4 : 5); + dl1.cz6(); + f[c++] = dl1.getVal(); + dl1.v0 = n++; + dl1.v3 = dPm2; + dl1.v5 = (prnt == dpnt - 2 ? 4 : 5); + dl1.cz6(); + f[c++] = dl1.getVal(); + dl1.v0 = n++; + dl1.v3 = dPp2; + dl1.v5 = (prnt == dpnt + 2 ? 4 : 5); + dl1.cz6(); + f[c++] = dl1.getVal(); + dl1.v0 = n++; + dl1.v3 = pPp2; + dl1.v5 = (prnt + 2 == dpnt ? 4 : 5); + dl1.cz6(); + f[c++] = dl1.getVal(); + + dl2.v0 = n++; + dl2.v3 = dFm1; + dl2.v3 = pPp1; + dl2.v4 = pP; + dl2.v5 = (prnt + 1 == dpnt ? 4 : prnt == dpnt - 1 ? 5 : 6); + dl2.cz6(); + f[c++] = dl2.getVal(); + dl2.v0 = n++; + dl2.v3 = dFp1; + dl2.v3 = pPm1; + dl2.v5 = (prnt - 1 == dpnt ? 4 : prnt == dpnt + 1 ? 5 : 6); + dl2.cz6(); + f[c++] = dl2.getVal(); + dl2.v0 = n++; + dl2.v3 = pFm1; + dl2.v3 = dPp1; + dl2.v4 = dP; + dl2.v5 = (prnt - 1 == dpnt ? 4 : prnt == dpnt + 1 ? 5 : 6); + dl2.cz6(); + f[c++] = dl2.getVal(); + dl2.v0 = n++; + dl2.v3 = pFp1; + dl2.v3 = dPm1; + dl2.v5 = (prnt + 1 == dpnt ? 4 : prnt == dpnt - 1 ? 5 : 6); + dl2.cz6(); + f[c++] = dl2.getVal(); + + // maybe without dir + dl2.v0 = n++; + dl2.v3 = dFm1; + dl2.v3 = dPm2; + dl2.v4 = pP; + dl2.v5 = (prnt == dpnt - 1 ? 4 : prnt == dpnt - 2 ? 5 : 6); + dl2.cz6(); + f[c++] = dl2.getVal(); + dl2.v0 = n++; + dl2.v3 = dFp1; + dl2.v3 = dPp2; + dl2.v5 = (prnt == dpnt + 1 ? 4 : prnt == dpnt + 2 ? 5 : 6); + dl2.cz6(); + f[c++] = dl2.getVal(); + dl2.v0 = n++; + dl2.v3 = pFm1; + dl2.v3 = pPm2; + dl2.v4 = dP; + dl2.v5 = (prnt - 1 == dpnt ? 4 : prnt - 2 == dpnt ? 5 : 6); + dl2.cz6(); + f[c++] = dl2.getVal(); + dl2.v0 = n++; + dl2.v3 = pFp1; + dl2.v3 = pPp2; + dl2.v5 = (prnt + 1 == dpnt ? 4 : prnt + 2 == dpnt ? 5 : 6); + dl2.cz6(); + f[c++] = dl2.getVal(); + + dwwp.v0 = n++; + dwwp.v2 = pF; + dwwp.v3 = dF; + dwwp.v4 = dP; + dwwp.cz5(); + f[c++] = dwwp.getVal(); + dwwp.v0 = n++; + dwwp.v2 = pF; + dwwp.v3 = dF; + dwwp.v4 = pP; + dwwp.cz5(); + f[c++] = dwwp.getVal(); + // dwwp.v0= n++; dwwp.v2=dF; dwwp.v3=pF; dwwp.v4=pP; dwwp.v4=dP; + // dwwp.cz6(); f[c++]=dwwp.getVal(); + + // until here + + // lemmas + + dl2.v1 = label; + dl2.v0 = n++; + dl2.v2 = pL; + dl2.v3 = dP; + dl2.cz4(); + f[c++] = dl2.getVal(); + dl2.v0 = n++; + dl2.cz3(); + f[c++] = dl2.getVal(); + dl2.v0 = n++; + dl2.v2 = dL; + dl2.v3 = pP; + dl2.cz4(); + f[c++] = dl2.getVal(); + dl2.v0 = n++; + dl2.cz3(); + f[c++] = dl2.getVal(); + + dwwp.v1 = label; + dwwp.v0 = n++; + dwwp.v2 = pL; + dwwp.v3 = dL; + dwwp.cz4(); + f[c++] = dwwp.getVal(); + + dwp.v1 = label; + dwp.v0 = n++; + dwp.v2 = dL; + dwp.v3 = pP; + dwp.v4 = dP; + dwp.v5 = pL; // dwp.cz6(); f[c++]=dwp.getVal(); + + dwp.v0 = n++; + dwp.v2 = pL; + dwp.v3 = pP; + dwp.v4 = dP; + dwp.v0 = n++; + dwp.cz5(); + f[c++] = dwp.getVal(); + + dwp.v0 = n++; + dwp.v2 = pL; + dwp.cz5(); + f[c++] = dwp.getVal(); + dwwp.v0 = n++; + dwwp.v2 = pL; + dwwp.v3 = dL; + dwwp.v4 = dP; + dwwp.cz5(); + f[c++] = dwwp.getVal(); + dwwp.v0 = n++; + dwwp.v4 = pP; + dwwp.cz5(); + f[c++] = dwwp.getVal(); + + // cluster + if (cluster.size() > 10) { + d2pw.v1 = label; + d2pw.v0 = n++; + d2pw.v2 = prntLS; + d2pw.v3 = chldLS; + d2pw.cz4(); + f[c++] = d2pw.getVal(); + d2pw.v0 = n++; + d2pw.v4 = pF; + d2pw.cz5(); + f[c++] = d2pw.getVal(); + d2pw.v0 = n++; + d2pw.v4 = dF; + d2pw.cz5(); + f[c++] = d2pw.getVal(); + // d2pw.v0=n++; d2pw.v5=pF; d2pw.cz6(); f[c++]=d2pw.getVal(); + + d2pp.v1 = label; + d2pp.v0 = n++; + d2pp.v2 = prntLS; + d2pp.v3 = chldLS; + d2pp.cz4(); + f[c++] = d2pp.getVal(); + d2pp.v0 = n++; + d2pp.v4 = pP; + d2pp.cz5(); + f[c++] = d2pp.getVal(); + d2pp.v0 = n++; + d2pp.v4 = dP; + d2pp.cz5(); + f[c++] = d2pp.getVal(); + d2pp.v0 = n++; + d2pp.v5 = pP; + d2pp.cz6(); + f[c++] = d2pp.getVal(); + } + + if (s_stack) { + + short[] prel = is.plabels[i]; + short[] phead = is.pheads[i]; + + // take those in for stacking + dl2.v1 = label; + dl2.v0 = n++; + dl2.v2 = prel[dpnt]; + dl2.v3 = pP; + dl2.v4 = dP; + dl2.v5 = prnt == phead[dpnt] ? 1 : 2; + dl2.cz6(); + f[c++] = dl2.getVal(); + dl2.v0 = n++; + dl2.v2 = pP; + dl2.v3 = dP; + dl2.v4 = prnt == phead[dpnt] ? 1 : 2; + dl2.cz5(); + f[c++] = dl2.getVal(); + } + + if (feats == null) + return c; + + short[] featsP = feats[prnt], featsD = feats[dpnt]; + dlf.v0 = n++; + dlf.v1 = label; + dlf.v2 = pP; + dlf.v3 = dP; + c = extractFeat(f, c, featsP, featsD); + + return c; + } + + public int second(Instances is, int i, int p, int d, int x, int label, Cluster cluster, long[] f) { + + // for(int k=0;k<f.length;k++) f[k]=0; + + dl1.clean(); + dwp.clean(); + dlf.clean(); + dwwp.clean(); + + short[] pos = is.pposs[i]; + int[] forms = is.forms[i], lemmas = is.plemmas[i]; + + int pP = pos[p], dP = pos[d]; + int pF = forms[p], dF = forms[d]; + int pL = lemmas[p], cL = lemmas[d]; + + int sP = x != -1 ? pos[x] : s_str, sF = x != -1 ? forms[x] : s_stwrd, sL = x != -1 ? lemmas[x] : s_stwrd; + + int n = _SIB; + if (pF > maxForm) + pF = -1; + if (pL > maxForm) + pL = -1; + + if (dF > maxForm) + dF = -1; + if (cL > maxForm) + cL = -1; + + if (sF > maxForm) + sF = -1; + if (sL > maxForm) + sL = -1; + + int c = 0; + + dl1.v1 = label; + dwwp.v1 = label; + dwp.v1 = label; + + dl1.v0 = n++; + dl1.v2 = pP; + dl1.v3 = dP; + dl1.v4 = sP; + dl1.cz5(); + f[c++] = dl1.getVal(); // f[c++]=dl1.csa(s_dist,dist); + dl1.v0 = n++; + dl1.v3 = sP; + dl1.cz4(); + f[c++] = dl1.getVal(); // f[c++]=dl1.csa(s_dist,dist); + dl1.v0 = n++; + dl1.v2 = dP; + dl1.cz4(); + f[c++] = dl1.getVal(); // f[c++]=dl1.csa(s_dist,dist); + + // sibling only could be tried + + dwwp.v0 = n++; + dwwp.v2 = pF; + dwwp.v3 = sF; + dwwp.cz4(); + f[c++] = dwwp.getVal(); // f[c++]=dwwp.csa(s_dist,dist); + dwwp.v0 = n++; + dwwp.v2 = dF; + dwwp.cz4(); + f[c++] = dwwp.getVal(); // f[c++]=dwwp.csa(s_dist,dist); + + // 154 + dwp.v0 = n++; + dwp.v2 = sF; + dwp.v3 = pP; + dwp.cz4(); + f[c++] = dwp.getVal(); // f[c++]=dwp.csa(s_dist,dist); + dwp.v0 = n++; + /* dwp.v1=label; */dwp.v3 = dP; + dwp.cz4(); + f[c++] = dwp.getVal(); // f[c++]=dwp.csa(s_dist,dist); + dwp.v0 = n++; + /* dwp.v1=label; */ dwp.v2 = pF; + dwp.v3 = sP; + dwp.cz4(); + f[c++] = dwp.getVal(); // f[c++]=dwp.csa(s_dist,dist); + dwp.v0 = n++; + /* dwp.v1=label; */ dwp.v2 = dF; + dwp.cz4(); + f[c++] = dwp.getVal();// f[c++]=dwp.csa(s_dist,dist); + + // 158 + // lemmas + + dwwp.v0 = n++; + dwwp.v2 = pL; + dwwp.v3 = sL; + dwwp.cz4(); + f[c++] = dwwp.getVal(); + dwwp.v0 = n++; + dwwp.v2 = cL; + dwwp.cz4(); + f[c++] = dwwp.getVal(); // f[c++]=dwwp.csa(s_dist,dist); + dwp.v0 = n++; + dwp.v2 = sL; + dwp.v3 = pP; + dwp.cz4(); + f[c++] = dwp.getVal();// f[c++]=dwp.csa(s_dist,dist); + dwp.v0 = n++; + dwp.v3 = dP; + dwp.cz4(); + f[c++] = dwp.getVal(); // f[c++]=dwp.csa(s_dist,dist); + + // 162 + dwp.v0 = n++; + dwp.v2 = pL; + dwp.v3 = sP; + dwp.cz4(); + f[c++] = dwp.getVal(); // f[c++]=dwp.csa(s_dist,dist); + dwp.v0 = n++; + dwp.v2 = cL; + dwp.cz4(); + f[c++] = dwp.getVal();// f[c++]=dwp.csa(s_dist,dist); + + // clusters + if (cluster.size() > 10) { + + } + + int pPm1 = p != 0 ? pos[p - 1] : s_str; + int chldPm1 = d - 1 >= 0 ? pos[d - 1] : s_str; + int prntPp1 = p != pos.length - 1 ? pos[p + 1] : s_end; + int chldPp1 = d != pos.length - 1 ? pos[d + 1] : s_end; + + // sibling part of speech minus and plus 1 + int sPm1 = x > 0 ? pos[x - 1] : s_str; + int sPp1 = x < pos.length - 1 ? pos[x + 1] : s_end; + + if (x + 1 == x || x + 1 == p || x + 1 == d) + sPp1 = -1; + if (p + 1 == x || p + 1 == p || p + 1 == d) + prntPp1 = -1; + if (d + 1 == x || d + 1 == p || d + 1 == d) + chldPp1 = -1; + + if (x - 1 == x || x - 1 == p || x - 1 == d) + sPm1 = -1; + if (d - 1 == x || d - 1 == p || d - 1 == d) + chldPm1 = -1; + if (p - 1 == x || p - 1 == p || p - 1 == d) + pPm1 = -1; + + dl1.v0 = n++; + dl1.v2 = sP; + dl1.v3 = sPp1; + dl1.v4 = pP; + dl1.cz5(); + f[c++] = dl1.getVal(); + // 165 + dl1.v0 = n++; + dl1.v2 = sP; + dl1.v3 = sPm1; + dl1.v4 = pP; + dl1.v5 = (x - 1 == p ? 3 : x - 1 == d ? 4 : 5); + dl1.cz6(); + f[c++] = dl1.getVal(); // dl1.getVal();// f.add(li.l2i(l)); + dl1.v0 = n++; + dl1.v2 = sP; + dl1.v3 = pP; + dl1.v4 = prntPp1; + dl1.v5 = (x == p + 1 ? 3 : 4); + dl1.cz6(); + f[c++] = dl1.getVal();// f.add(li.l2i(l)); + dl1.v0 = n++; + dl1.v2 = sP; + dl1.v3 = pP; + dl1.v4 = pPm1; + dl1.v5 = (x == p - 1 ? 3 : 4); + dl1.cz6(); + f[c++] = dl1.getVal();// f.add(li.l2i(l)); + dl1.v0 = n++; + dl1.v2 = sP; + dl1.v3 = sPp1; + dl1.v4 = pPm1; + dl1.v5 = pP; + dl1.v6 = (x == p - 1 ? 3 : x == p + 1 ? 4 : 5); + dl1.cz7(); + f[c++] = dl1.getVal(); + dl1.v0 = n++; + dl1.v2 = sPm1; + dl1.v3 = sP; + dl1.v4 = pPm1; + dl1.v5 = pP; + dl1.v6 = (x == p - 1 ? 3 : x - 1 == p ? 4 : 5); + dl1.cz7(); + f[c++] = dl1.getVal();// f.add(li.l2i(l)); + dl1.v0 = n++; + dl1.v2 = sP; + dl1.v3 = sPp1; + dl1.v4 = pP; + dl1.v5 = prntPp1; + dl1.v6 = (x + 1 == p ? 3 : x == p + 1 ? 4 : 5); + dl1.cz7(); + f[c++] = dl1.getVal();// f.add(li.l2i(l)); + dl1.v0 = n++; + dl1.v2 = sPm1; + dl1.v3 = sP; + dl1.v4 = pP; + dl1.v5 = prntPp1; + dl1.v6 = (x == p - 1 ? 3 : x == p + 1 ? 4 : 5); + dl1.cz7(); + f[c++] = dl1.getVal();// f.add(li.l2i(l)); + + dl1.v0 = n++; + dl1.v2 = sP; + dl1.v3 = sPp1; + dl1.v4 = dP; + dl1.v5 = (x + 1 == d ? 3 : x + 1 == p ? 4 : 5); + dl1.cz6(); + f[c++] = dl1.getVal(); + dl1.v0 = n++; + dl1.v2 = sP; + dl1.v3 = sPm1; + dl1.v4 = dP; + dl1.v5 = (x - 1 == d ? 3 : x - 1 == p ? 4 : 5); + dl1.cz6(); + f[c++] = dl1.getVal(); + + dl1.v0 = n++; + dl1.v2 = sP; + dl1.v3 = dP; + dl1.v4 = chldPp1; + dl1.v5 = (x == d + 1 ? 3 : d + 1 == p ? 4 : 5); + dl1.cz6(); + f[c++] = dl1.getVal(); + dl1.v0 = n++; + dl1.v2 = sP; + dl1.v3 = dP; + dl1.v4 = chldPm1; + dl1.v5 = (x == d - 1 ? 3 : d - 1 == p ? 4 : 5); + dl1.cz6(); + f[c++] = dl1.getVal(); + dl1.v0 = n++; + dl1.v2 = sP; + dl1.v3 = sPp1; + dl1.v4 = chldPm1; + dl1.v5 = dP; + dl1.v6 = (x == d - 1 ? 3 : x + 1 == d ? 4 : 5); + dl1.cz7(); + f[c++] = dl1.getVal();// f.add(li.l2i(l)); + dl1.v0 = n++; + dl1.v2 = sPm1; + dl1.v3 = sP; + dl1.v4 = chldPm1; + dl1.v5 = dP; + dl1.v6 = (x - 1 == d ? 3 : d - 1 == x ? 4 : 5); + dl1.cz7(); + f[c++] = dl1.getVal(); + dl1.v0 = n++; + dl1.v2 = sP; + dl1.v3 = sPp1; + dl1.v4 = dP; + dl1.v5 = chldPp1; + dl1.v6 = (x == d + 1 ? 3 : x + 1 == d ? 4 : 5); + dl1.cz7(); + f[c++] = dl1.getVal();// f.add(li.l2i(l)); + dl1.v0 = n++; + dl1.v2 = sPm1; + dl1.v3 = sP; + dl1.v4 = dP; + dl1.v5 = chldPp1; + dl1.v6 = (x - 1 == d ? 3 : d + 1 == x ? 4 : 5); + dl1.cz7(); + f[c++] = dl1.getVal(); + + // c=61; + /* + * if (cluster.size()>10) { AtomicInteger N = new AtomicInteger(n); c = + * addClusterFeatures(d, p, x, pos, forms, cluster, N, c, f,label); n = + * N.get(); } + */ + // take those in for stacking + + if (s_stack) { + short[] prel = is.plabels[i], phead = is.pheads[i]; + + int g = p == phead[d] ? 1 : 2; + if (x >= 0) + g += p == phead[x] ? 4 : 8; + + int gr = x == -1 ? s_relend : prel[x]; + + dl2.v1 = label; + dl2.v0 = n++; + dl2.v2 = prel[d]; + dl2.v3 = g; + dl2.v4 = sP; + dl2.v5 = dP; + dl2.cz6(); + f[c++] = dl2.getVal(); + dl2.v0 = n++; + dl2.v2 = prel[d]; + dl2.v3 = g; + dl2.v4 = sP; + dl2.v5 = pP; + dl2.cz6(); + f[c++] = dl2.getVal(); + dl2.v0 = n++; + dl2.v2 = prel[d]; + dl2.v3 = g; + dl2.v4 = sP; + dl2.v5 = pP; + dl2.v6 = dP; + dl2.cz7(); + f[c++] = dl2.getVal(); + + dl2.v0 = n++; + dl2.v2 = gr; + dl2.v3 = g; + dl2.v4 = sP; + dl2.v5 = dP; + dl2.cz6(); + f[c++] = dl2.getVal(); + dl2.v0 = n++; + dl2.v2 = gr; + dl2.v3 = g; + dl2.v4 = sP; + dl2.v5 = pP; + dl2.cz6(); + f[c++] = dl2.getVal(); + dl2.v0 = n++; + dl2.v2 = gr; + dl2.v3 = g; + dl2.v4 = sP; + dl2.v5 = pP; + dl2.v6 = dP; + dl2.cz7(); + f[c++] = dl2.getVal(); + } + + short[][] feats = is.feats[i]; + + if (feats == null) + return c; + + short[] featsP = feats[d]; + short[] featsSbl = x != -1 ? feats[x] : null; + dlf.v1 = label; + dlf.v0 = n++; + dlf.v2 = sP; + dlf.v3 = dP; + c = extractFeat(f, c, featsP, featsSbl); + + featsP = feats[p]; + + dlf.v0 = n++; + dlf.v1 = label; + dlf.v2 = sP; + dlf.v3 = pP; + c = extractFeat(f, c, featsP, featsSbl); + + return c; + } + + /** + * Separated this method to speed up parsing + * + * @param d + * @param p + * @param x + * @param pos + * @param forms + * @param cluster + * @param N + * @param c + * @param f + * @return + */ + int addClusterFeatures(Instances is, int i, int d, int p, int x, Cluster cluster, int c, long[] f, int label) { + + // int n= N.get(); + + short[] pos = is.pposs[i]; + int[] forms = is.forms[i]; + + int n = 190; + int pP = pos[p], dP = pos[d]; + int sP = x != -1 ? pos[x] : s_str; + + int pLSp1 = p != pos.length - 1 ? forms[p + 1] == -1 ? -1 : cluster.getLP(forms[p + 1]) : _cend; + int cLSp1 = d != pos.length - 1 ? forms[d + 1] == -1 ? -1 : cluster.getLP(forms[d + 1]) : _cend; + int sLSp1 = x < pos.length - 1 ? forms[x + 1] == -1 ? -1 : cluster.getLP(forms[x + 1]) : _cend; + + int pLSm1 = p != 0 ? forms[p - 1] == -1 ? -1 : cluster.getLP(forms[p - 1]) : _cstr; + int cLSm1 = d - 1 >= 0 ? forms[d - 1] == -1 ? -1 : cluster.getLP(forms[d - 1]) : _cstr; + int sLSm1 = x > 0 ? forms[x - 1] == -1 ? -1 : cluster.getLP(forms[x - 1]) : _cstr; + + // int c=61; + int pF = forms[p], dF = forms[d], sF = x != -1 ? forms[x] : s_stwrd; + int prntLS = pF == -1 ? -1 : cluster.getLP(pF), chldLS = dF == -1 ? -1 : cluster.getLP(dF); + + int sblLS = (x != -1) && (sF != -1) ? cluster.getLP(sF) : s_stwrd; + + d2lp.v1 = label; + d2lp.v0 = n++; + d2lp.v2 = prntLS; + d2lp.v3 = sblLS; + d2lp.cz4(); + f[c++] = d2lp.getVal(); + d2lp.v0 = n++; + d2lp.v2 = chldLS; + d2lp.v3 = sblLS; + d2lp.cz4(); + f[c++] = d2lp.getVal();// f[c++]=d2lp.csa(s_dist,dist); + + d3lp.v1 = label; + d3lp.v0 = n++; + d3lp.v2 = prntLS; + d3lp.v3 = chldLS; + d3lp.v4 = sblLS; + d3lp.cz5(); + f[c++] = d3lp.getVal(); + + d2lp.v0 = n++; + d2lp.v2 = prntLS; + d2lp.v3 = chldLS; + d2lp.v4 = sF; + d2lp.cz5(); + f[c++] = d2lp.getVal(); // f[c++]=d2lp.csa(s_dist,dist); + d2lp.v0 = n++; + d2lp.v2 = prntLS; + d2lp.v3 = sblLS; + d2lp.v4 = dF; + d2lp.cz5(); + f[c++] = d2lp.getVal(); // f[c++]=d2lp.csa(s_dist,dist); + d2lp.v0 = n++; + d2lp.v2 = chldLS; + d2lp.v3 = sblLS; + d2lp.v4 = pF; + d2lp.cz5(); + f[c++] = d2lp.getVal(); // f[c++]=d2lp.csa(s_dist,dist); + + d2pp.v1 = label; + d2pp.v0 = n++; + d2pp.v2 = prntLS; + d2pp.v3 = chldLS; + d2pp.v4 = sP; + d2pp.cz5(); + f[c++] = d2pp.getVal(); // f[c++]=d2pp.csa(s_dist,dist); + d2pp.v0 = n++; + d2pp.v2 = prntLS; + d2pp.v3 = sblLS; + d2pp.v4 = dP; + d2pp.cz5(); + f[c++] = d2pp.getVal(); // f[c++]=d2pp.csa(s_dist,dist); + d2pp.v0 = n++; + d2pp.v2 = chldLS; + d2pp.v3 = sblLS; + d2pp.v4 = pP; + d2pp.cz5(); + f[c++] = d2pp.getVal(); // f[c++]=d2pp.csa(s_dist,dist); + + if (x + 1 == x || x + 1 == p || x + 1 == d) + sLSp1 = -1; + if (p + 1 == x || p + 1 == p || p + 1 == d) + pLSp1 = -1; + if (d + 1 == x || d + 1 == p || d + 1 == d) + cLSp1 = -1; + + if (x - 1 == x || x - 1 == p || x - 1 == d) + sLSm1 = -1; + if (d - 1 == x || d - 1 == p || d - 1 == d) + cLSm1 = -1; + if (p - 1 == x || p - 1 == p || p - 1 == d) + pLSm1 = -1; + + dl1.v0 = n++; + dl1.v2 = sP; + dl1.v3 = sLSp1; + dl1.v4 = pP; + dl1.cz5(); + f[c++] = dl1.getVal(); + dl1.v0 = n++; + dl1.v2 = sP; + dl1.v3 = sLSm1; + dl1.v4 = pP; + dl1.cz5(); + f[c++] = dl1.getVal(); + dl1.v0 = n++; + dl1.v2 = sP; + dl1.v3 = pP; + dl1.v4 = pLSp1; + dl1.cz5(); + f[c++] = dl1.getVal(); + dl1.v0 = n++; + dl1.v2 = sP; + dl1.v3 = pP; + dl1.v4 = pLSm1; + dl1.cz5(); + f[c++] = dl1.getVal(); + dl1.v0 = n++; + dl1.v2 = sP; + dl1.v3 = sLSp1; + dl1.v4 = pLSm1; + dl1.v5 = pP; + dl1.cz6(); + f[c++] = dl1.getVal(); + dl1.v0 = n++; + dl1.v2 = sLSm1; + dl1.v3 = sP; + dl1.v4 = pLSm1; + dl1.v5 = pP; + dl1.cz6(); + f[c++] = dl1.getVal(); + dl1.v0 = n++; + dl1.v2 = sP; + dl1.v3 = sLSp1; + dl1.v4 = pP; + dl1.v5 = pLSp1; + dl1.cz6(); + f[c++] = dl1.getVal(); + dl1.v0 = n++; + dl1.v2 = sLSm1; + dl1.v3 = sP; + dl1.v4 = pP; + dl1.v5 = pLSp1; + dl1.cz6(); + f[c++] = dl1.getVal(); + dl1.v0 = n++; + dl1.v2 = sP; + dl1.v3 = sLSp1; + dl1.v4 = dP; + dl1.cz5(); + f[c++] = dl1.getVal(); + dl1.v0 = n++; + dl1.v2 = sP; + dl1.v3 = sLSm1; + dl1.v4 = dP; + dl1.cz5(); + f[c++] = dl1.getVal(); + dl1.v0 = n++; + dl1.v2 = sP; + dl1.v3 = dP; + dl1.v4 = cLSp1; + dl1.cz5(); + f[c++] = dl1.getVal(); + dl1.v0 = n++; + dl1.v2 = sP; + dl1.v3 = dP; + dl1.v4 = cLSm1; + dl1.cz5(); + f[c++] = dl1.getVal(); + dl1.v0 = n++; + dl1.v2 = sP; + dl1.v3 = sLSm1; + dl1.v4 = cLSm1; + dl1.v5 = dP; + dl1.cz6(); + f[c++] = dl1.getVal(); + dl1.v0 = n++; + dl1.v2 = sLSm1; + dl1.v3 = sP; + dl1.v4 = cLSm1; + dl1.v5 = dP; + dl1.cz6(); + f[c++] = dl1.getVal(); + dl1.v0 = n++; + dl1.v2 = sP; + dl1.v3 = sLSp1; + dl1.v4 = dP; + dl1.v5 = cLSp1; + dl1.cz6(); + f[c++] = dl1.getVal(); + dl1.v0 = n++; + dl1.v2 = sLSm1; + dl1.v3 = sP; + dl1.v4 = dP; + dl1.v5 = cLSp1; + dl1.cz6(); + f[c++] = dl1.getVal(); + + dl1.v0 = n++; + dl1.v2 = sP; + dl1.v3 = sLSp1; + dl1.v4 = pP; + dl1.cz5(); + f[c++] = dl1.getVal(); + dl1.v0 = n++; + dl1.v2 = sP; + dl1.v3 = sLSm1; + dl1.v4 = pP; + dl1.cz5(); + f[c++] = dl1.getVal(); + dl1.v0 = n++; + dl1.v2 = sP; + dl1.v3 = pP; + dl1.v4 = pLSp1; + dl1.cz5(); + f[c++] = dl1.getVal(); + dl1.v0 = n++; + dl1.v2 = sP; + dl1.v3 = pP; + dl1.v4 = pLSm1; + dl1.cz5(); + f[c++] = dl1.getVal(); + dl1.v0 = n++; + dl1.v2 = sP; + dl1.v3 = sLSp1; + dl1.v4 = pLSm1; + dl1.v5 = pP; + dl1.cz6(); + f[c++] = dl1.getVal(); + dl1.v0 = n++; + dl1.v2 = sLSm1; + dl1.v3 = sP; + dl1.v4 = pLSm1; + dl1.v5 = pP; + dl1.cz6(); + f[c++] = dl1.getVal(); + dl1.v0 = n++; + dl1.v2 = sP; + dl1.v3 = sLSp1; + dl1.v4 = pP; + dl1.v5 = pLSp1; + dl1.cz6(); + f[c++] = dl1.getVal(); + dl1.v0 = n++; + dl1.v2 = sLSm1; + dl1.v3 = sP; + dl1.v4 = pP; + dl1.v5 = pLSp1; + dl1.cz6(); + f[c++] = dl1.getVal(); + dl1.v0 = n++; + dl1.v2 = sP; + dl1.v3 = sLSp1; + dl1.v4 = dP; + dl1.cz5(); + f[c++] = dl1.getVal(); + dl1.v0 = n++; + dl1.v2 = sP; + dl1.v3 = sLSm1; + dl1.v4 = dP; + dl1.cz5(); + f[c++] = dl1.getVal(); + dl1.v0 = n++; + dl1.v2 = sP; + dl1.v3 = dP; + dl1.v4 = cLSp1; + dl1.cz5(); + f[c++] = dl1.getVal(); + dl1.v0 = n++; + dl1.v2 = sP; + dl1.v3 = dP; + dl1.v4 = cLSm1; + dl1.cz5(); + f[c++] = dl1.getVal(); + dl1.v0 = n++; + dl1.v2 = sP; + dl1.v3 = sLSm1; + dl1.v4 = cLSm1; + dl1.v5 = dP; + dl1.cz6(); + f[c++] = dl1.getVal(); + dl1.v0 = n++; + dl1.v2 = sLSm1; + dl1.v3 = sP; + dl1.v4 = cLSm1; + dl1.v5 = dP; + dl1.cz6(); + f[c++] = dl1.getVal(); + dl1.v0 = n++; + dl1.v2 = sP; + dl1.v3 = sLSp1; + dl1.v4 = dP; + dl1.v5 = cLSp1; + dl1.cz6(); + f[c++] = dl1.getVal(); + dl1.v0 = n++; + dl1.v2 = sLSm1; + dl1.v3 = sP; + dl1.v4 = dP; + dl1.v5 = cLSp1; + dl1.cz6(); + f[c++] = dl1.getVal(); + + return c; + } + + private int extractFeat(long[] f, int cnt, short[] featsP, short[] featsD) { + if (featsP != null && featsD != null) { + for (short i1 = 0; i1 < featsP.length; i1++) { + for (short i2 = 0; i2 < featsD.length; i2++) { + dlf.v4 = featsP[i1]; + dlf.v5 = featsD[i2]; + dlf.cz6(); + f[cnt++] = dlf.getVal(); + } + } + } else if (featsP == null && featsD != null) { + + for (short i2 = 0; i2 < featsD.length; i2++) { + dlf.v4 = nofeat; + dlf.v5 = featsD[i2]; + dlf.cz6(); + f[cnt++] = dlf.getVal(); + + } + } else if (featsP != null && featsD == null) { + + for (short i1 = 0; i1 < featsP.length; i1++) { + dlf.v4 = featsP[i1]; + dlf.v5 = nofeat; + dlf.cz6(); + f[cnt++] = dlf.getVal(); + + } + } + return cnt; + } + + public FV encodeCat(Instances is, int ic, short pposs[], int forms[], int[] lemmas, short[] heads, short[] types, + short feats[][], Cluster cluster, FV f) { + + long[] svs = new long[250]; + + for (int i = 1; i < heads.length; i++) { + + basic(pposs, heads[i], i, f); + + int w1 = heads[i] < i ? heads[i] : i; + int w2 = heads[i] < i ? i : heads[i]; + + int dir = heads[i] < i ? 0 : s_rel1; + int label = types[i] + dir; + + int c = firstm(is, ic, w1, w2, label, cluster, svs); + for (int k = 0; k < c; k++) + dl1.map(f, svs[k]); + + int ch, cmi, cmo; + if (heads[i] < i) { + ch = rightmostRight(heads, heads[i], i); + cmi = leftmostLeft(heads, i, heads[i]); + cmo = rightmostRight(heads, i, heads.length); + + } else { + ch = leftmostLeft(heads, heads[i], i); + cmi = rightmostRight(heads, i, heads[i]); + cmo = leftmostLeft(heads, i, 0); + } + + int lx = types[i] + s_rel1 * ((heads[i] < i ? 0 : 1) + 8); + c = second(is, ic, w1, w2, ch, lx, cluster, svs); + for (int k = 0; k < c; k++) + dl1.map(f, svs[k]); + c = addClusterFeatures(is, ic, w1, w2, ch, cluster, c, svs, lx); + for (int k = 0; k < c; k++) + dl1.map(f, svs[k]); + + lx = types[i] + s_rel1 * ((heads[i] < i ? 0 : 1) + ((cmi < i) ? 0 : 2)); + c = second(is, ic, w1, w2, cmi, lx, cluster, svs); + for (int k = 0; k < c; k++) + dl1.map(f, svs[k]); + + c = addClusterFeatures(is, ic, w1, w2, cmi, cluster, c, svs, lx); + for (int k = 0; k < c; k++) + dl1.map(f, svs[k]); + + lx = types[i] + s_rel1 * ((heads[i] < i ? 0 : 1) + ((cmo < i) ? 0 : 2)); + c = second(is, ic, w1, w2, cmo, lx, cluster, svs); + for (int k = 0; k < c; k++) + dl1.map(f, svs[k]); + + c = addClusterFeatures(is, ic, w1, w2, cmo, cluster, c, svs, lx); + for (int k = 0; k < c; k++) + dl1.map(f, svs[k]); + } + + return f; + } + + public void compare(Instances is, int ic, short pos[], short[] heads, short[] types, Cluster cluster, F2SF f, + DataFES x) { + + long[] svs = new long[250]; + + for (int i = 1; i < heads.length; i++) { + + f.clear(); + basic(pos, heads[i], i, f); + + if (x.pl[heads[i]][i] != f.getScore()) { + DB.println("basic diff " + x.pl[heads[i]][i] + " fg " + f.getScore()); + } + + int w1 = heads[i] < i ? heads[i] : i; + int w2 = heads[i] < i ? i : heads[i]; + + int dir = heads[i] < i ? 0 : s_rel1; + int label = types[i] + dir; + f.clear(); + int c = firstm(is, ic, w1, w2, label, cluster, svs); + for (int k = 0; k < c; k++) + dl1.map(f, svs[k]); + + if (x.lab[heads[i]][i][types[i]] != f.getScore()) { + DB.println("first diff " + x.lab[heads[i]][i][types[i]] + " fg " + f.getScore()); + } + + short[] labels = Edges.get(pos[heads[i]], pos[i]); + int lid = -1; + for (int k = 0; k < labels.length; k++) + if (types[i] == labels[k]) { + lid = k; + break; + } + + int ch, cmi, cmo; + if (heads[i] < i) { + ch = rightmostRight(heads, heads[i], i); + cmi = leftmostLeft(heads, i, heads[i]); + cmo = rightmostRight(heads, i, heads.length); + + } else { + ch = leftmostLeft(heads, heads[i], i); + cmi = rightmostRight(heads, i, heads[i]); + cmo = leftmostLeft(heads, i, 0); + } + + f.clear(); + + int lx = types[i] + s_rel1 * ((heads[i] < i ? 0 : 1) + 8); + c = second(is, ic, w1, w2, ch, lx, cluster, svs); + for (int k = 0; k < c; k++) + dl1.map(f, svs[k]); + + if (x.sib[heads[i]][i][ch == -1 ? heads[i] : ch][lid] != f.getScore()) { + DB.println("sib diff " + x.sib[heads[i]][i][ch == -1 ? i : ch][lid] + " fg " + f.getScore()); + } + + f.clear(); + + lx = types[i] + s_rel1 * ((heads[i] < i ? 0 : 1) + ((cmi < i) ? 0 : 2)); + c = second(is, ic, w1, w2, cmi, lx, cluster, svs); + for (int k = 0; k < c; k++) + dl1.map(f, svs[k]); + + if (x.gra[heads[i]][i][cmi == -1 ? i : cmi][lid] != f.getScore()) { + DB.println("gcm diff " + x.gra[heads[i]][i][cmi == -1 ? i : cmi][lid] + " fg " + f.getScore() + " cmi " + + cmi + " i " + i + " head " + heads[i] + " w1 " + w1 + " w2 " + w2 + " label " + lx + " " + + ((heads[i] < i ? 0 : 1) + ((cmi < i) ? 0 : 2))); + + System.out.println("w1 " + w1 + " w2 " + w2 + " cmi " + cmi + " label " + label + " "); + + for (long k : svs) + System.out.print(k + " "); + System.out.println(); + + } + f.clear(); + lx = types[i] + s_rel1 * ((heads[i] < i ? 0 : 1) + ((cmo < i) ? 0 : 2)); + c = second(is, ic, w1, w2, cmo, lx, cluster, svs); + for (int k = 0; k < c; k++) + dl1.map(f, svs[k]); + + if (x.gra[heads[i]][i][cmo == -1 ? i : cmo][lid] != f.getScore()) { + DB.println("gcm diff " + x.gra[heads[i]][i][cmo == -1 ? i : cmo][lid] + " fg " + f.getScore() + " cmo " + + cmo + " i " + i + " head " + heads[i] + " w1 " + w1 + " w2 " + w2 + " label " + lx + " " + + ((heads[i] < i ? 0 : 1) + ((cmi < i) ? 0 : 2))); + + System.out.println("w1 " + w1 + " w2 " + w2 + " cmi " + cmi + " label " + label + " "); + + for (long k : svs) + System.out.print(k + " "); + System.out.println(); + + } + } + + } + + public short[] searchLabel(Instances is, int ic, short pposs[], int forms[], int[] lemmas, short[] heads, + short[] types, short feats[][], Cluster cluster, IFV f) { + + long[] svs = new long[250]; + + short[] newLabels = new short[types.length]; + + for (int i = 1; i < heads.length; i++) { + + // int n =basic(pposs, forms, heads[i], i, cluster, f); + + int ch, cmi, cmo; + if (heads[i] < i) { + ch = rightmostRight(heads, heads[i], i); + cmi = leftmostLeft(heads, i, heads[i]); + cmo = rightmostRight(heads, i, heads.length); + + } else { + ch = leftmostLeft(heads, heads[i], i); + cmi = rightmostRight(heads, i, heads[i]); + cmo = leftmostLeft(heads, i, 0); + } + + short labels[] = Edges.get(pposs[is.heads[ic][i]], pposs[i]); + + float best = -1000; + short bestL = 0; + for (short label : labels) { + + f.clear(); + firstm(is, ic, heads[i], i, label, cluster, svs); + for (long sv : svs) + dl1.map(f, sv); + + second(is, ic, heads[i], i, ch, label, cluster, svs); + for (long sv : svs) + dl1.map(f, sv); + + second(is, ic, heads[i], i, cmi, label, cluster, svs); + for (long sv : svs) + dl1.map(f, sv); + + second(is, ic, heads[i], i, cmo, label, cluster, svs); + for (long sv : svs) + dl1.map(f, sv); + + if (best < f.getScore()) { + best = (float) f.getScore(); + bestL = label; + newLabels[i] = bestL; + } + + } + } + return newLabels; + + // return f; + } + + public static float encode3(short[] pos, short heads[], short[] types, DataFES d2) { + + float v = 0F; + for (int i = 1; i < heads.length; i++) { + + // int dir= (heads[i] < i)? 0:1; + + v += d2.pl[heads[i]][i]; + v += d2.lab[heads[i]][i][types[i]]; + + // boolean left = i<heads[i]; + short[] labels = Edges.get(pos[heads[i]], pos[i]); + int lid = -1; + for (int k = 0; k < labels.length; k++) + if (types[i] == labels[k]) { + lid = k; + break; + } + + int ch, cmi, cmo; + if (heads[i] < i) { + ch = rightmostRight(heads, heads[i], i); + cmi = leftmostLeft(heads, i, heads[i]); + cmo = rightmostRight(heads, i, heads.length); + + if (ch == -1) + ch = heads[i]; + if (cmi == -1) + cmi = heads[i]; + if (cmo == -1) + cmo = heads[i]; + + } else { + ch = leftmostLeft(heads, heads[i], i); + cmi = rightmostRight(heads, i, heads[i]); + cmo = leftmostLeft(heads, i, 0); + + if (ch == -1) + ch = i; + if (cmi == -1) + cmi = i; + if (cmo == -1) + cmo = i; + } + v += d2.sib[heads[i]][i][ch][lid]; + v += d2.gra[heads[i]][i][cmi][lid]; + v += d2.gra[heads[i]][i][cmo][lid]; + } + return v; + } + + public static float encode3(short[] pos, short heads[], short[] types, DataFES d2, float[] scores) { + + float v = 0F; + for (int i = 1; i < heads.length; i++) { + + scores[i] = d2.pl[heads[i]][i]; + scores[i] += d2.lab[heads[i]][i][types[i]]; + + short[] labels = Edges.get(pos[heads[i]], pos[i]); + int lid = -1; + for (int k = 0; k < labels.length; k++) + if (types[i] == labels[k]) { + lid = k; + break; + } + + int ch, cmi, cmo; + if (heads[i] < i) { + ch = rightmostRight(heads, heads[i], i); + cmi = leftmostLeft(heads, i, heads[i]); + cmo = rightmostRight(heads, i, heads.length); + + if (ch == -1) + ch = heads[i]; + if (cmi == -1) + cmi = heads[i]; + if (cmo == -1) + cmo = heads[i]; + + } else { + ch = leftmostLeft(heads, heads[i], i); + cmi = rightmostRight(heads, i, heads[i]); + cmo = leftmostLeft(heads, i, 0); + + if (ch == -1) + ch = i; + if (cmi == -1) + cmi = i; + if (cmo == -1) + cmo = i; + } + scores[i] += d2.sib[heads[i]][i][ch][lid]; + scores[i] += d2.gra[heads[i]][i][cmi][lid]; + scores[i] += d2.gra[heads[i]][i][cmo][lid]; + } + return v; + } + + public static int rightmostRight(short[] heads, int head, int max) { + int rightmost = -1; + for (int i = head + 1; i < max; i++) + if (heads[i] == head) + rightmost = i; + + return rightmost; + } + + public static int leftmostLeft(short[] heads, int head, int min) { + int leftmost = -1; + for (int i = head - 1; i > min; i--) + if (heads[i] == head) + leftmost = i; + return leftmost; + } + + public static final String REL = "REL", END = "END", STR = "STR", LA = "LA", RA = "RA"; + + private static int ra, la; + private static int s_str; + private static int s_end, _cend, _cstr, s_stwrd, s_relend; + + protected static final String TYPE = "TYPE", DIR = "D"; + public static final String POS = "POS"; + protected static final String DIST = "DIST", MID = "MID"; + + private static final String _0 = "0", _4 = "4", _3 = "3", _2 = "2", _1 = "1", _5 = "5", _10 = "10"; + + private static final String WORD = "WORD", STWRD = "STWRD", STPOS = "STPOS"; + + private static int nofeat; + + public static int maxForm; + + /** + * Initialize the features. + * + * @param maxFeatures + */ + static public void initFeatures() { + + MFO mf = new MFO(); + mf.register(POS, MID); + s_str = mf.register(POS, STR); + s_end = mf.register(POS, END); + + s_relend = mf.register(REL, END); + + _cstr = mf.register(Cluster.SPATH, STR); + _cend = mf.register(Cluster.SPATH, END); + + mf.register(TYPE, POS); + + s_stwrd = mf.register(WORD, STWRD); + mf.register(POS, STPOS); + + la = mf.register(DIR, LA); + ra = mf.register(DIR, RA); + + // mf.register(TYPE, CHAR); + + mf.register(TYPE, PipeGen.FEAT); + nofeat = mf.register(PipeGen.FEAT, "NOFEAT"); + + for (int k = 0; k < 150; k++) + mf.register(TYPE, "F" + k); + + mf.register(DIST, _0); + mf.register(DIST, _1); + mf.register(DIST, _2); + mf.register(DIST, _3); + mf.register(DIST, _4); + mf.register(DIST, _5); + mf.register(DIST, _10); + + } + +} diff --git a/dependencyParser/experimental/mate-tools/src/is2/parser/MFO.java b/dependencyParser/experimental/mate-tools/src/is2/parser/MFO.java new file mode 100755 index 0000000..5a2de73 --- /dev/null +++ b/dependencyParser/experimental/mate-tools/src/is2/parser/MFO.java @@ -0,0 +1,267 @@ +package is2.parser; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; +import java.util.HashMap; +import java.util.Map.Entry; +import is2.data.IEncoderPlus; +import is2.util.DB; + +/** + * Map Features, do not map long to integer + * + * @author Bernd Bohnet, 20.09.2009 + */ + +final public class MFO implements IEncoderPlus { + + /** The features and its values */ + static private final HashMap<String, HashMap<String, Integer>> m_featureSets = new HashMap<String, HashMap<String, Integer>>(); + + /** The feature class and the number of values */ + static private final HashMap<String, Integer> m_featureCounters = new HashMap<String, Integer>(); + + /** The number of bits needed to encode a feature */ + static final HashMap<String, Integer> m_featureBits = new HashMap<String, Integer>(); + + /** Integer counter for long2int */ + static private int count = 0; + + /** Stop growing */ + public boolean stop = false; + + final public static String NONE = "<None>"; + + public MFO() { + } + + public int size() { + return count; + } + + /** + * Register an attribute class, if it not exists and add a possible value + * + * @param type + * @param type2 + */ + @Override + final public int register(String a, String v) { + + HashMap<String, Integer> fs = getFeatureSet().get(a); + if (fs == null) { + fs = new HashMap<String, Integer>(); + getFeatureSet().put(a, fs); + fs.put(NONE, 0); + getFeatureCounter().put(a, 1); + } + Integer c = getFeatureCounter().get(a); + + Integer i = fs.get(v); + if (i == null) { + fs.put(v, c); + c++; + getFeatureCounter().put(a, c); + return c - 1; + } else + return i; + } + + /** + * Calculates the number of bits needed to encode a feature + */ + public void calculateBits() { + + for (Entry<String, Integer> e : getFeatureCounter().entrySet()) { + int bits = (int) Math.ceil((Math.log(e.getValue() + 1) / Math.log(2))); + m_featureBits.put(e.getKey(), bits); + } + + // System.out.println("total number of needed bits "+total); + } + + @Override + public String toString() { + + StringBuffer content = new StringBuffer(); + for (Entry<String, Integer> e : getFeatureCounter().entrySet()) { + content.append(e.getKey() + " " + e.getValue()); + content.append(':'); + // HashMap<String,Integer> vs = getFeatureSet().get(e.getKey()); + content.append(getFeatureBits(e.getKey())); + + /* + * if (vs.size()<120) for(Entry<String,Integer> e2 : vs.entrySet()) + * { content.append(e2.getKey()+" ("+e2.getValue()+") "); } + */ + content.append('\n'); + + } + return content.toString(); + } + + static final public short getFeatureBits(String a) { + if (m_featureBits.get(a) == null) + return 0; + return (short) m_featureBits.get(a).intValue(); + } + + /** + * Get the integer place holder of the string value v of the type a + * + * @param t + * the type + * @param v + * the value + * @return the integer place holder of v + */ + @Override + final public int getValue(String t, String v) { + + if (m_featureSets.get(t) == null) + return -1; + Integer vi = m_featureSets.get(t).get(v); + if (vi == null) + return -1; // stop && + return vi.intValue(); + } + + /** + * Static version of getValue + * + * @see getValue + */ + static final public int getValueS(String a, String v) { + + if (m_featureSets.get(a) == null) + return -1; + Integer vi = m_featureSets.get(a).get(v); + if (vi == null) + return -1; // stop && + return vi.intValue(); + } + + public int hasValue(String a, String v) { + + Integer vi = m_featureSets.get(a).get(v); + if (vi == null) + return -1; + return vi.intValue(); + } + + public static String printBits(int k) { + StringBuffer s = new StringBuffer(); + for (int i = 0; i < 31; i++) { + s.append((k & 0x00000001) == 1 ? '1' : '0'); + k = k >> 1; + + } + s.reverse(); + return s.toString(); + } + + /** + * Maps a long to a integer value. This is very useful to save memory for + * sparse data long values + * + * @param l + * @return the integer + */ + static public int misses = 0; + static public int good = 0; + + /** + * Write the data + * + * @param dos + * @throws IOException + */ + static public void writeData(DataOutputStream dos) throws IOException { + dos.writeInt(getFeatureSet().size()); + // DB.println("write"+getFeatureSet().size()); + for (Entry<String, HashMap<String, Integer>> e : getFeatureSet().entrySet()) { + dos.writeUTF(e.getKey()); + dos.writeInt(e.getValue().size()); + + for (Entry<String, Integer> e2 : e.getValue().entrySet()) { + + if (e2.getKey() == null) + DB.println("key " + e2.getKey() + " value " + e2.getValue() + " e -key " + e.getKey()); + dos.writeUTF(e2.getKey()); + dos.writeInt(e2.getValue()); + + } + + } + } + + public void read(DataInputStream din) throws IOException { + + int size = din.readInt(); + for (int i = 0; i < size; i++) { + String k = din.readUTF(); + int size2 = din.readInt(); + + HashMap<String, Integer> h = new HashMap<String, Integer>(); + getFeatureSet().put(k, h); + for (int j = 0; j < size2; j++) { + h.put(din.readUTF(), din.readInt()); + } + getFeatureCounter().put(k, size2); + } + + count = size; + // stop(); + calculateBits(); + } + + /** + * Clear the data + */ + static public void clearData() { + getFeatureSet().clear(); + m_featureBits.clear(); + getFeatureSet().clear(); + } + + @Override + public HashMap<String, Integer> getFeatureCounter() { + return m_featureCounters; + } + + static public HashMap<String, HashMap<String, Integer>> getFeatureSet() { + return m_featureSets; + } + + static public String[] reverse(HashMap<String, Integer> v) { + String[] set = new String[v.size()]; + for (Entry<String, Integer> e : v.entrySet()) { + set[e.getValue()] = e.getKey(); + } + return set; + } + + private static <K, V> String mapToString(HashMap<K, V> m) { + int counter = 0; + StringBuilder s = new StringBuilder(); + for(K k: m.keySet()) { + s.append(", " + k + ": " + m.get(k)); + ++counter; + if(counter == Parser.maxPrint) break; + } + if(s.length() < 3) return "{}"; + else if(counter == Parser.maxPrint) return "{" + s.substring(2) + ",...} (exceeds maximum print length)"; + else return "{" + s.substring(2) + "}"; + } + + @Override + public void print() { + for(String s: m_featureSets.keySet()) + System.out.println("m_featureSets[" + s + "] = " + mapToString(m_featureSets.get(s))); + System.out.println("m_featureCounters = " + mapToString(m_featureCounters)); + System.out.println("m_featureBits = " + mapToString(m_featureBits)); + System.out.println("count = " + count); + System.out.println("stop = " + stop); + } +} diff --git a/dependencyParser/experimental/mate-tools/src/is2/parser/Open.java b/dependencyParser/experimental/mate-tools/src/is2/parser/Open.java new file mode 100755 index 0000000..2f68e07 --- /dev/null +++ b/dependencyParser/experimental/mate-tools/src/is2/parser/Open.java @@ -0,0 +1,40 @@ +package is2.parser; + +import is2.data.Parse; + +final public class Open { + + public float p; + short s, e, label; + byte dir; + + Closed left; + Closed right; + + public Open(short s, short t, short dir, short label, Closed left, Closed right, float p) { + this.s = s; + this.e = t; + this.label = label; + this.dir = (byte) dir; + this.left = left; + this.right = right; + this.p = p; + } + + void create(Parse parse) { + if (dir == 0) { + parse.heads[s] = e; + if (label != -1) + parse.labels[s] = label; + } else { + parse.heads[e] = s; + if (label != -1) + parse.labels[e] = label; + } + if (left != null) + left.create(parse); + if (right != null) + right.create(parse); + } + +} diff --git a/dependencyParser/experimental/mate-tools/src/is2/parser/Options.java b/dependencyParser/experimental/mate-tools/src/is2/parser/Options.java new file mode 100755 index 0000000..bd550ec --- /dev/null +++ b/dependencyParser/experimental/mate-tools/src/is2/parser/Options.java @@ -0,0 +1,70 @@ +package is2.parser; + +import is2.util.OptionsSuper; + +public final class Options extends OptionsSuper { + + public Options(String[] args) { + + for (int i = 0; i < args.length; i++) { + + if (args[i].equals("--help")) + explain(); + + if (args[i].equals("-decode")) { + decodeProjective = args[i + 1].equals("proj"); + i++; + } else if (args[i].equals("-decodeTH")) { + decodeTH = Double.parseDouble(args[i + 1]); + i++; + } else if (args[i].equals("-nonormalize")) { + normalize = false; + } else if (args[i].equals("-features")) { + features = args[i + 1]; + i++; + } else if (args[i].equals("-hsize")) { + hsize = Integer.parseInt(args[i + 1]); + i++; + } else if (args[i].equals("-len")) { + maxLen = Integer.parseInt(args[i + 1]); + i++; + } else if (args[i].equals("-cores")) { + cores = Integer.parseInt(args[i + 1]); + i++; + } else if (args[i].equals("-no2nd")) { + no2nd = true; + } else if (args[i].equals("-few2nd")) { + few2nd = true; + } else + super.addOption(args, i); + + } + + } + + private void explain() { + System.out.println("Usage: "); + System.out.println("java -class mate.jar is2.parser.Parser [Options]"); + System.out.println(); + System.out.println("Example: "); + System.out.println( + " java -class mate.jar is2.parser.Parser -model eps3.model -train corpora/conll08st/train/train.closed -test corpora/conll08st/devel/devel.closed -out b3.test -eval corpora/conll08st/devel/devel.closed -count 2000 -i 6"); + System.out.println(""); + System.out.println("Options:"); + System.out.println(""); + System.out.println(" -train <file> the corpus a model is trained on; default " + this.trainfile); + System.out.println(" -test <file> the input corpus for testing; default " + this.testfile); + System.out.println(" -out <file> the output corpus (result) of a test run; default " + this.outfile); + System.out.println(" -model <file> the parsing model for traing the model is stored in the files"); + System.out.println( + " and for parsing the model is load from this file; default " + this.modelName); + System.out.println( + " -i <number> the number of training iterations; good numbers are 10 for smaller corpora and 6 for bigger; default " + + this.numIters); + System.out.println(" -count <number> the n first sentences of the corpus are take for the training default " + + this.count); + System.out.println(" -format <number> conll format of the year 8 or 9; default " + this.formatTask); + + System.exit(0); + } +} diff --git a/dependencyParser/experimental/mate-tools/src/is2/parser/ParallelDecoder.java b/dependencyParser/experimental/mate-tools/src/is2/parser/ParallelDecoder.java new file mode 100755 index 0000000..ca508fd --- /dev/null +++ b/dependencyParser/experimental/mate-tools/src/is2/parser/ParallelDecoder.java @@ -0,0 +1,194 @@ +package is2.parser; + +import java.util.ArrayList; +import java.util.concurrent.Callable; + +import is2.data.DataFES; + +/** + * @author Bernd Bohnet, 30.08.2009 + * + * This class implements a parallel feature extractor. + */ +final public class ParallelDecoder implements Callable<Object> { + // some constants + private static final float INIT_BEST = (-1.0F / 0.0F); + private static final boolean[] DIR = { false, true }; + + // the data space of the weights for a dependency tree + final private DataFES x; + + private short[] pos; + + private Open O[][][][]; + private Closed C[][][][]; + + private int length; + + boolean done = false; + public boolean waiting = false; + + /** + * Initialize the parallel decoder. + * + * @param pos + * part-of-speech + * @param d + * data + * @param edges + * part-of-speech edge mapping + * @param o + * open spans + * @param c + * closed spans + * @param length + * number of words + */ + public ParallelDecoder(short[] pos, DataFES d, Open o[][][][], Closed c[][][][], int length) { + + this.pos = pos; + this.x = d; + + this.O = o; + this.C = c; + this.length = length; + } + + private static class DSet { + short w1, w2; + } + + @Override + public Object call() { + + try { + + while (true) { + + DSet set = get(); + // if (done && set==null) break; + + if (set == null) + return null; + + short s = set.w1, t = set.w2; + + for (short dir = 0; dir < 2; dir++) { + + short[] labs = (dir == 1) ? Edges.get(pos[s], pos[t]) : Edges.get(pos[t], pos[s]); + + O[s][t][dir] = new Open[labs.length]; + + for (int l = 0; l < labs.length; l++) { + + double tRP = INIT_BEST; + + Closed tL = null, tR = null; + + for (int r = s; r < t; r++) { + + if (s == 0 && r != 0) + continue; + + double tLPr = INIT_BEST, tRPr = INIT_BEST; + Closed tLCld = null, tRCld = null; + + if (r == s) + tLPr = dir == 1 ? x.sib[s][t][s][l] : x.gra[t][s][s][l]; + else + for (int i = s + 1; i <= r; i++) + if (((dir == 1 ? x.sib[s][t][i][l] : x.gra[t][s][i][l]) + C[s][r][1][i].p) > tLPr) { + tLPr = ((dir == 1 ? x.sib[s][t][i][l] : x.gra[t][s][i][l]) + C[s][r][1][i].p); + tLCld = C[s][r][1][i]; + } + + if (r == t - 1) + tRPr = dir == 1 ? x.gra[s][t][s][l] : x.sib[t][s][s][l]; + else + for (int i = r + 1; i < t; i++) + if (((dir == 1 ? x.gra[s][t][i][l] : x.sib[t][s][i][l]) + + C[r + 1][t][0][i].p) > tRPr) { + tRPr = ((dir == 1 ? x.gra[s][t][i][l] : x.sib[t][s][i][l]) + + C[r + 1][t][0][i].p); + tRCld = C[r + 1][t][0][i]; + } + + if (tLPr + tRPr > tRP) { + tRP = tLPr + tRPr; + tL = tLCld; + tR = tRCld; + } + } + O[s][t][dir][l] = new Open(s, t, dir, labs[l], tL, tR, + (float) (tRP + ((dir == 1) ? x.pl[s][t] : x.pl[t][s]) + + ((dir == 1) ? x.lab[s][t][labs[l]] : x.lab[t][s][labs[l]]))); + } + } + C[s][t][1] = new Closed[length]; + C[s][t][0] = new Closed[length]; + + for (int m = s; m <= t; m++) { + for (boolean d : DIR) { + if ((d && m != s) || !d && (m != t && s != 0)) { + + // create closed structure + + double top = INIT_BEST; + + Open tU = null; + Closed tL = null; + int numLabels = O[(d ? s : m)][(d ? m : t)][d ? 1 : 0].length; + + // for (int l = numLabels-1; l >=0; l--) { + for (int l = 0; l < numLabels; l++) { + + Open hi = O[(d ? s : m)][(d ? m : t)][d ? 1 : 0][l]; + for (int amb = m + (d ? 1 : -1); amb != (d ? t : s) + + (d ? 1 : -1); amb += (d ? 1 : -1)) { + + if ((hi.p + C[d ? m : s][d ? t : m][d ? 1 : 0][amb].p + + x.gra[d ? s : t][m][amb][l]) > top) { + top = (hi.p + C[d ? m : s][d ? t : m][d ? 1 : 0][amb].p + + x.gra[d ? s : t][m][amb][l]); + tU = hi; + tL = C[d ? m : s][d ? t : m][d ? 1 : 0][amb]; + } + + } + + if ((m == (d ? t : s)) && (hi.p + x.gra[d ? s : t][d ? t : s][m][l]) > top) { + top = (hi.p + x.gra[d ? s : t][d ? t : s][m][l]); + tU = hi; + tL = null; + } + } + C[s][t][d ? 1 : 0][m] = new Closed(s, t, m, d ? 1 : 0, tU, tL, (float) top); + + } + } + } + } + } catch (Exception e) { + e.printStackTrace(); + System.exit(0); + } + return null; + } + + public static ArrayList<DSet> sets = new ArrayList<DSet>(); + + static synchronized private DSet get() { + synchronized (sets) { + if (sets.size() == 0) + return null; + return sets.remove(sets.size() - 1); + } + } + + public static void add(short w1, short w2) { + DSet ds = new DSet(); + ds.w1 = w1; + ds.w2 = w2; + sets.add(ds); + } +} diff --git a/dependencyParser/experimental/mate-tools/src/is2/parser/ParallelExtract.java b/dependencyParser/experimental/mate-tools/src/is2/parser/ParallelExtract.java new file mode 100755 index 0000000..ca85711 --- /dev/null +++ b/dependencyParser/experimental/mate-tools/src/is2/parser/ParallelExtract.java @@ -0,0 +1,248 @@ +package is2.parser; + +import java.util.ArrayList; +import java.util.concurrent.Callable; + +import is2.data.Cluster; +import is2.data.DataFES; +import is2.data.F2SF; +import is2.data.Instances; +import is2.data.Long2IntInterface; + +/** + * @author Bernd Bohnet, 30.08.2009 + * + * This class implements a parallel feature extractor. + */ +final public class ParallelExtract implements Callable<Object> { + // the data space of the weights for a dependency tree + final DataFES d; + + // the data extractor does the actual work + final Extractor extractor; + + private Instances is; + private int i; + + private F2SF para; + + private Cluster cluster; + + public ParallelExtract(Extractor e, Instances is, int i, DataFES d, F2SF para, Cluster cluster) { + + this.is = is; + extractor = e; + this.d = d; + this.i = i; + this.para = para; + this.cluster = cluster; + } + + public static class DSet { + int w1, w2; + } + + @Override + public Object call() { + + try { + + F2SF f = para; + + short[] pos = is.pposs[i]; + int length = pos.length; + + long[] gvs = new long[50]; + long[] svs = new long[220]; + + while (true) { + + DSet set = get(); + if (set == null) + break; + + int w1 = set.w1; + int w2 = set.w2; + + f.clear(); + extractor.basic(pos, w1, w2, f); + d.pl[w1][w2] = f.getScoreF(); + + f.clear(); + + extractor.basic(pos, w2, w1, f); + d.pl[w2][w1] = f.getScoreF(); + + short[] labels = Edges.get(pos[w1], pos[w2]); + float[] lab = d.lab[w1][w2]; + + final Long2IntInterface li = extractor.li; + + int c = extractor.firstm(is, i, w1, w2, 0, cluster, svs); + + for (int l = 0; l < lab.length; l++) + lab[l] = -100; + + for (short label2 : labels) { + short label = label2; + + f.clear(); + int lv = extractor.d0.computeLabeValue(label, Extractor.s_type); + for (int k = 0; k < c; k++) + if (svs[k] > 0) + f.add(li.l2i(svs[k] + lv)); + + lab[label] = f.getScoreF(); + } + + labels = Edges.get(pos[w2], pos[w1]); + lab = d.lab[w2][w1]; + + for (int l = 0; l < lab.length; l++) + lab[l] = -100; + + for (short label2 : labels) { + int label = label2; + + f.clear(); + int lv = extractor.d0.computeLabeValue(label + Extractor.s_rel1, Extractor.s_type); + for (int k = 0; k < c; k++) + if (svs[k] > 0) + f.add(li.l2i(svs[k] + lv)); + + lab[label] = f.getScoreF(); + } + + int s = w1 < w2 ? w1 : w2; + int e = w1 < w2 ? w2 : w1; + + for (int m = 0; m < length; m++) { + + int g = (m == s || e == m) ? -1 : m; + + int cn = extractor.second(is, i, w1, w2, g, 0, cluster, svs); + int cc = extractor.addClusterFeatures(is, i, w1, w2, g, cluster, 0, gvs, 0); + // for(int k=0;k<c;k++) dl1.map(f,svs[k]); + + if (m >= w1) { + labels = Edges.get(pos[w1], pos[w2]); + float[] lab2 = new float[labels.length]; + for (int l = 0; l < labels.length; l++) { + + short label = labels[l]; + + int lx = label + Extractor.s_rel1 * (g < w2 ? 0 : 2); + + f.clear(); + int lv = extractor.d0.computeLabeValue(lx, Extractor.s_type); + for (int k = 0; k < cn; k++) + if (svs[k] > 0) + f.add(li.l2i(svs[k] + lv)); + for (int k = 0; k < cc; k++) + if (gvs[k] > 0) + f.add(li.l2i(gvs[k] + lv)); + + lab2[l] = f.getScoreF(); + } + d.gra[w1][w2][m] = lab2; + } + + if (m <= w2) { + labels = Edges.get(pos[w2], pos[w1]); + float lab2[]; + d.gra[w2][w1][m] = lab2 = new float[labels.length]; + for (int l = 0; l < labels.length; l++) { + + int label = labels[l]; + int lx = label + Extractor.s_rel1 * (1 + (g < w1 ? 0 : 2)); + + f.clear(); + int lv = extractor.d0.computeLabeValue(lx, Extractor.s_type); + for (int k = 0; k < cn; k++) + if (svs[k] > 0) + f.add(li.l2i(svs[k] + lv)); + for (int k = 0; k < cc; k++) + if (gvs[k] > 0) + f.add(li.l2i(gvs[k] + lv)); + + lab2[l] = f.getScoreF(); + + } + } + + g = (m == s || e == m) ? -1 : m; + + // int cn = extractor.second(is,i,w1,w2,g,0, cluster, + // svs,Extractor._SIB); + if (m >= w1 && m <= w2) { + labels = Edges.get(pos[w1], pos[w2]); + float lab2[] = new float[labels.length]; + d.sib[w1][w2][m] = lab2; + + for (int l = 0; l < labels.length; l++) { + + short label = labels[l]; + + int lx = label + Extractor.s_rel1 * (8); + f.clear(); + int lv = extractor.d0.computeLabeValue(lx, Extractor.s_type); + for (int k = 0; k < cn; k++) + if (svs[k] > 0) + f.add(li.l2i(svs[k] + lv)); + for (int k = 0; k < cc; k++) + if (gvs[k] > 0) + f.add(li.l2i(gvs[k] + lv)); + + lab2[l] = f.score;// f.getScoreF(); + } + } + if (m >= w1 && m <= w2) { + labels = Edges.get(pos[w2], pos[w1]); + float[] lab2 = new float[labels.length]; + d.sib[w2][w1][m] = lab2; + for (int l = 0; l < labels.length; l++) { + + int label = labels[l]; + + int lx = label + Extractor.s_rel1 * (9); + + f.clear(); + int lv = extractor.d0.computeLabeValue(lx, Extractor.s_type); + for (int k = 0; k < cn; k++) + if (svs[k] > 0) + f.add(li.l2i(svs[k] + lv)); + for (int k = 0; k < cc; k++) + if (gvs[k] > 0) + f.add(li.l2i(gvs[k] + lv)); + + lab2[l] = f.score;// f.getScoreF(); + } + } + } + } + + } catch (Exception e) { + e.printStackTrace(); + } + return null; + } + + static ArrayList<DSet> sets = new ArrayList<DSet>(); + + private DSet get() { + + synchronized (sets) { + if (sets.size() == 0) + return null; + return sets.remove(sets.size() - 1); + } + } + + static public void add(int w1, int w2) { + DSet ds = new DSet(); + ds.w1 = w1; + ds.w2 = w2; + sets.add(ds); + } + +} diff --git a/dependencyParser/experimental/mate-tools/src/is2/parser/ParallelRearrange.java b/dependencyParser/experimental/mate-tools/src/is2/parser/ParallelRearrange.java new file mode 100755 index 0000000..83dcdaa --- /dev/null +++ b/dependencyParser/experimental/mate-tools/src/is2/parser/ParallelRearrange.java @@ -0,0 +1,146 @@ +package is2.parser; + +import java.util.ArrayList; +import java.util.concurrent.Callable; + +import is2.data.DataFES; + +/** + * @author Dr. Bernd Bohnet, 30.08.2009 + * + * This class implements a parallel edge rearrangement for + * non-projective parsing; The linear method was first suggest by Rayn + * McDonald et. al. 2005. + */ +final public class ParallelRearrange implements Callable<Object> { + + // new parent child combination to explore + final static class PA { + final float p; + final short ch, pa; + public float max; + public short wh; + public short nPar; + public short nType; + + public PA(float p2, short ch2, short pa2) { + p = p2; + ch = ch2; + pa = pa2; + } + } + + // list of parent child combinations + static ArrayList<PA> parents = new ArrayList<PA>(); + static ArrayList<PA> order = new ArrayList<PA>(); + // best new parent child combination, found so far + public float max; + + // some data from the dependency tree + // private EdgesC edges; + private short[] pos; + private DataFES x; + private boolean[][] isChild; + public short[] heads, types; + + // child, new parent, new label + public short wh, nPar, nType; + + /** + * Initialize the parallel rearrange thread + * + * @param isChild2 + * is a child + * @param edgesC + * the part-of-speech edge mapping + * @param pos + * the part-of-speech + * @param x + * the data + * @param s + * the heads + * @param ts + * the types + */ + public ParallelRearrange(boolean[][] isChild2, short[] pos, DataFES x, short[] s, short[] ts) { + + heads = new short[s.length]; + System.arraycopy(s, 0, heads, 0, s.length); + + types = new short[ts.length]; + System.arraycopy(ts, 0, types, 0, ts.length); + + isChild = isChild2; + // edges = edgesC; + this.pos = pos; + this.x = x; + } + + @Override + public Object call() { + + // check the list of new possible parents and children for a better + // combination + while (true) { + PA px = getPA(); + if (px == null) + break; + + float max = 0; + short pa = px.pa, ch = px.ch; + + if (ch == pa || pa == heads[ch] || isChild[ch][pa]) + continue; + + short oldP = heads[ch], oldT = types[ch]; + + heads[ch] = pa; + + short[] labels = Edges.get(pos[pa], pos[ch]); + + for (short label : labels) { + + types[ch] = label; + + float p_new = Extractor.encode3(pos, heads, types, x); + + if (max < p_new - px.p) { + max = p_new - px.p; + wh = ch; + nPar = pa; + nType = label; + px.max = max; + px.wh = ch; + px.nPar = pa; + px.nType = label; + } + } + heads[ch] = oldP; + types[ch] = oldT; + } + return null; + } + + /** + * Add a child-parent combination which are latter explored for + * rearrangement + * + * @param p2 + * @param ch2 + * @param pa + */ + static public void add(float p2, short ch2, short pa) { + PA px = new PA(p2, ch2, pa); + parents.add(px); + order.add(px); + } + + static private PA getPA() { + synchronized (parents) { + if (parents.size() == 0) + return null; + return parents.remove(parents.size() - 1); + } + } + +} diff --git a/dependencyParser/experimental/mate-tools/src/is2/parser/Parameters.java b/dependencyParser/experimental/mate-tools/src/is2/parser/Parameters.java new file mode 100755 index 0000000..baba7b6 --- /dev/null +++ b/dependencyParser/experimental/mate-tools/src/is2/parser/Parameters.java @@ -0,0 +1,37 @@ +/** + * + */ +package is2.parser; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; + +import is2.data.FV; +import is2.data.IFV; +import is2.data.Instances; +import is2.data.Parse; + +/** + * @author Bernd Bohnet, 31.08.2009 + * + * + */ +public abstract class Parameters { + + public abstract void average(double avVal); + + public abstract void update(FV act, FV pred, Instances isd, int instc, Parse d, double upd, double e); + + public abstract void write(DataOutputStream dos) throws IOException; + + public abstract void read(DataInputStream dis) throws IOException; + + public abstract int size(); + + /** + * @return + */ + public abstract IFV getFV(); + +} diff --git a/dependencyParser/experimental/mate-tools/src/is2/parser/ParametersFloat.java b/dependencyParser/experimental/mate-tools/src/is2/parser/ParametersFloat.java new file mode 100755 index 0000000..faf795d --- /dev/null +++ b/dependencyParser/experimental/mate-tools/src/is2/parser/ParametersFloat.java @@ -0,0 +1,138 @@ +package is2.parser; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; + +import is2.data.F2SF; +import is2.data.FV; +import is2.data.Instances; +import is2.data.Parse; +import is2.util.DB; + +final public class ParametersFloat extends Parameters { + + public float[] parameters; + public float[] total; + + public ParametersFloat(int size) { + parameters = new float[size]; + total = new float[size]; + for (int i = 0; i < parameters.length; i++) { + parameters[i] = 0F; + total[i] = 0F; + } + } + + /** + * @param parameters2 + */ + public ParametersFloat(float[] p) { + parameters = p; + } + + @Override + public void average(double avVal) { + for (int j = 0; j < total.length; j++) { + parameters[j] = total[j] / ((float) avVal); + } + total = null; + } + + public ParametersFloat average2(double avVal) { + float[] px = new float[this.parameters.length]; + for (int j = 0; j < total.length; j++) { + px[j] = total[j] / ((float) avVal); + } + ParametersFloat pf = new ParametersFloat(px); + return pf; + } + + @Override + public void update(FV act, FV pred, Instances isd, int instc, Parse d, double upd, double e) { + + e++; + + float lam_dist = getScore(act) - getScore(pred); + + float b = (float) e - lam_dist; + + FV dist = act.getDistVector(pred); + + dist.update(parameters, total, hildreth(dist, b), upd, false); + } + + protected double hildreth(FV a, double b) { + + double A = a.dotProduct(a); + if (A <= 0.0000000000000000001) + return 0.0; + return b / A; + } + + public float getScore(FV fv) { + if (fv == null) + return 0.0F; + return fv.getScore(parameters, false); + + } + + @Override + final public void write(DataOutputStream dos) throws IOException { + + dos.writeInt(parameters.length); + for (float d : parameters) + dos.writeFloat(d); + + } + + @Override + public void read(DataInputStream dis) throws IOException { + + parameters = new float[dis.readInt()]; + int notZero = 0; + for (int i = 0; i < parameters.length; i++) { + parameters[i] = dis.readFloat(); + if (parameters[i] != 0.0F) + notZero++; + } + + DB.println("read parameters " + parameters.length + " not zero " + notZero); + + } + + public int countNZ() { + + int notZero = 0; + for (float parameter : parameters) { + if (parameter != 0.0F) + notZero++; + } + return notZero; + + // DB.println("read parameters "+parameters.length+" not zero + // "+notZero); + + } + + /* + * (non-Javadoc) + * + * @see is2.sp09k99995.Parameters#getFV() + */ + @Override + public F2SF getFV() { + return new F2SF(parameters); + } + + /* + * (non-Javadoc) + * + * @see is2.sp09k99999.Parameters#size() + */ + @Override + public int size() { + return parameters.length; + } + +} diff --git a/dependencyParser/experimental/mate-tools/src/is2/parser/Parser.java b/dependencyParser/experimental/mate-tools/src/is2/parser/Parser.java new file mode 100755 index 0000000..b361d69 --- /dev/null +++ b/dependencyParser/experimental/mate-tools/src/is2/parser/Parser.java @@ -0,0 +1,789 @@ +package is2.parser; + +import java.io.BufferedInputStream; +import java.io.BufferedOutputStream; +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.FileOutputStream; +import java.io.IOException; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.Map.Entry; +import java.util.zip.ZipEntry; +import java.util.zip.ZipInputStream; +import java.util.zip.ZipOutputStream; + +import is2.data.Cluster; +import is2.data.DataFES; +import is2.data.F2SF; +import is2.data.FV; +import is2.data.Instances; +import is2.data.Long2Int; +import is2.data.Long2IntInterface; +import is2.data.Parse; +import is2.data.PipeGen; +import is2.data.SentenceData09; +import is2.io.CONLLReader09; +import is2.io.CONLLWriter09; +import is2.tools.Retrainable; +import is2.tools.Tool; +import is2.util.DB; +import is2.util.OptionsSuper; +import is2.util.ParserEvaluator; + +public class Parser implements Tool, Retrainable { + + // output evaluation info + private static final boolean MAX_INFO = true; + + public static int THREADS = 4; + public static int maxPrint = 1024; + + public Long2IntInterface l2i; + public ParametersFloat params; + public Pipe pipe; + public OptionsSuper options; + + // keep some of the parsing information for later evaluation + public Instances is; + DataFES d2; + public Parse d = null; + + /** + * Initialize the parser + * + * @param options + */ + public Parser(OptionsSuper options) { + + this.options = options; + pipe = new Pipe(options); + + params = new ParametersFloat(0); + + // load the model + try { + readModel(options, pipe, params); + } catch (Exception e) { + e.printStackTrace(); + } + + } + + /** + * @param modelFileName + * The file name of the parsing model + */ + public Parser(String modelFileName) { + this(new Options(new String[] { "-model", modelFileName })); + } + + /** + * + */ + public Parser() { + // TODO Auto-generated constructor stub + } + + public static void main(String[] args) throws Exception { + long start = System.currentTimeMillis(); + OptionsSuper options = new Options(args); + + Runtime runtime = Runtime.getRuntime(); + THREADS = runtime.availableProcessors(); + if (options.cores < THREADS && options.cores > 0) + THREADS = options.cores; + DB.println("Found " + runtime.availableProcessors() + " cores use " + THREADS); + + if (options.train) { + + Parser p = new Parser(); + p.options = options; + + p.l2i = new Long2Int(options.hsize); + + p.pipe = new Pipe(options); + Instances is = new Instances(); + + Extractor.initFeatures(); + p.pipe.extractor = new Extractor[THREADS]; + DB.println("hsize " + options.hsize); + + DB.println("Use " + (options.featureCreation == OptionsSuper.MULTIPLICATIVE ? "multiplication" : "shift") + + "-based feature creation function"); + for (int t = 0; t < THREADS; t++) + p.pipe.extractor[t] = new Extractor(p.l2i, options.stack, options.featureCreation); + + DB.println("Stacking " + options.stack); + + p.pipe.createInstances(options.trainfile, is); + + p.params = new ParametersFloat(p.l2i.size()); + + p.train(options, p.pipe, p.params, is, p.pipe.cl); + + p.writeModell(options, p.params, null, p.pipe.cl); + + } + + if (options.test) { + // Parser p = new Parser(); + Parser p = new Parser(options); + + // p. pipe = new Pipe(options); + // p. params = new ParametersFloat(0); // total should be zero and + // the parameters are later read + + // load the model + + // p.readModel(options, p.pipe, p.params); + + DB.println("label only? " + options.label); + + p.outAll(options, p.pipe, p.params, !MAX_INFO, options.label); + } + + System.out.println(); + + if (options.eval) { + System.out.println("\nEVALUATION PERFORMANCE:"); + ParserEvaluator.evaluate(options.goldfile, options.outfile); + } + + long end = System.currentTimeMillis(); + System.out.println("used time " + ((float) ((end - start) / 100) / 10)); + + Decoder.executerService.shutdown(); + Pipe.executerService.shutdown(); + System.out.println("end."); + } + + /** + * Read the models and mapping + * + * @param options + * @param pipe + * @param params + * @throws IOException + */ + public void readModel(OptionsSuper options, Pipe pipe, Parameters params) throws IOException { + + DB.println("Reading data started"); + + // prepare zipped reader + ZipInputStream zis = new ZipInputStream(new BufferedInputStream(new FileInputStream(options.modelName))); + zis.getNextEntry(); + DataInputStream dis = new DataInputStream(new BufferedInputStream(zis)); + + pipe.mf.read(dis); + + pipe.cl = new Cluster(dis); + + params.read(dis); + this.l2i = new Long2Int(params.size()); + DB.println("parsing -- li size " + l2i.size()); + + pipe.extractor = new Extractor[THREADS]; + + boolean stack = dis.readBoolean(); + + options.featureCreation = dis.readInt(); + + for (int t = 0; t < THREADS; t++) + pipe.extractor[t] = new Extractor(l2i, stack, options.featureCreation); + DB.println("Stacking " + stack); + + Extractor.initFeatures(); + Extractor.initStat(options.featureCreation); + + for (int t = 0; t < THREADS; t++) + pipe.extractor[t].init(); + + Edges.read(dis); + + options.decodeProjective = dis.readBoolean(); + + Extractor.maxForm = dis.readInt(); + + boolean foundInfo = false; + try { + String info = null; + int icnt = dis.readInt(); + for (int i = 0; i < icnt; i++) { + info = dis.readUTF(); + System.out.println(info); + } + } catch (Exception e) { + if (!foundInfo) + System.out.println("no info about training"); + } + + dis.close(); + + DB.println("Reading data finnished"); + + Decoder.NON_PROJECTIVITY_THRESHOLD = (float) options.decodeTH; + + Extractor.initStat(options.featureCreation); + + } + + /** + * Do the training + * + * @param instanceLengths + * @param options + * @param pipe + * @param params + * @param is + * @param cluster + * @throws IOException + * @throws InterruptedException + * @throws ClassNotFoundException + */ + public void train(OptionsSuper options, Pipe pipe, ParametersFloat params, Instances is, Cluster cluster) + throws IOException, InterruptedException, ClassNotFoundException { + + DB.println("\nTraining Information "); + DB.println("-------------------- "); + + Decoder.NON_PROJECTIVITY_THRESHOLD = (float) options.decodeTH; + + if (options.decodeProjective) + System.out.println("Decoding: " + (options.decodeProjective ? "projective" : "non-projective")); + else + System.out.println("" + Decoder.getInfo()); + int numInstances = is.size(); + + int maxLenInstances = 0; + for (int i = 0; i < numInstances; i++) + if (maxLenInstances < is.length(i)) + maxLenInstances = is.length(i); + + DataFES data = new DataFES(maxLenInstances, pipe.mf.getFeatureCounter().get(PipeGen.REL).shortValue()); + + int iter = 0; + int del = 0; + float error = 0; + float f1 = 0; + + FV pred = new FV(); + FV act = new FV(); + + double upd = (double) (numInstances * options.numIters) + 1; + + for (; iter < options.numIters; iter++) { + + System.out.print("Iteration " + iter + ": "); + + long start = System.currentTimeMillis(); + + long last = System.currentTimeMillis(); + error = 0; + f1 = 0; + for (int n = 0; n < numInstances; n++) { + + upd--; + + if (is.labels[n].length > options.maxLen) + continue; + + String info = " td " + ((Decoder.timeDecotder) / 1000000F) + " tr " + + ((Decoder.timeRearrange) / 1000000F) + " te " + ((Pipe.timeExtract) / 1000000F); + + if ((n + 1) % 500 == 0) + del = PipeGen.outValueErr(n + 1, error, f1 / n, del, last, upd, info); + + short pos[] = is.pposs[n]; + + data = pipe.fillVector(params.getFV(), is, n, data, cluster); + + Parse d = Decoder.decode(pos, data, options.decodeProjective, Decoder.TRAINING); + + double e = pipe.errors(is, n, d); + + if (d.f1 > 0) + f1 += d.f1; + + if (e <= 0) + continue; + + pred.clear(); + pipe.extractor[0].encodeCat(is, n, pos, is.forms[n], is.plemmas[n], d.heads, d.labels, is.feats[n], + pipe.cl, pred); + + error += e; + + params.getFV(); + + act.clear(); + pipe.extractor[0].encodeCat(is, n, pos, is.forms[n], is.plemmas[n], is.heads[n], is.labels[n], + is.feats[n], pipe.cl, act); + + params.update(act, pred, is, n, d, upd, e); + } + + String info = " td " + ((Decoder.timeDecotder) / 1000000F) + " tr " + ((Decoder.timeRearrange) / 1000000F) + + " te " + ((Pipe.timeExtract) / 1000000F) + " nz " + params.countNZ(); + PipeGen.outValueErr(numInstances, error, f1 / numInstances, del, last, upd, info); + del = 0; + long end = System.currentTimeMillis(); + System.out.println(" time:" + (end - start)); + + ParametersFloat pf = params.average2((iter + 1) * is.size()); + try { + + if (options.testfile != null && options.goldfile != null) { + out(options, pipe, pf, !MAX_INFO, false); + ParserEvaluator.evaluate(options.goldfile, options.outfile); + // writeModell(options, pf, ""+(iter+1),pipe.cl); + } + + } catch (Exception e) { + e.printStackTrace(); + } + + if (error == 0) { + DB.println("stopped because learned all lessons"); + break; + } + + Decoder.timeDecotder = 0; + Decoder.timeRearrange = 0; + Pipe.timeExtract = 0; + + } + if (options.average) + params.average(iter * is.size()); + } + + /** + * Do the parsing job + * + * @param options + * @param pipe + * @param params + * @throws IOException + */ + private void out(OptionsSuper options, Pipe pipe, ParametersFloat params, boolean maxInfo, boolean labelOnly) + throws Exception { + + long start = System.currentTimeMillis(); + + CONLLReader09 depReader = new CONLLReader09(options.testfile, options.formatTask); + CONLLWriter09 depWriter = new CONLLWriter09(options.outfile, options.formatTask); + + int cnt = 0; + int del = 0; + long last = System.currentTimeMillis(); + + if (maxInfo) + System.out.println("\nParsing Information "); + if (maxInfo) + System.out.println("------------------- "); + + if (maxInfo && !options.decodeProjective) + System.out.println("" + Decoder.getInfo()); + + System.out.print("Processing Sentence: "); + + while (true) { + + // Instances is = new Instances(); + // is.init(1, new MFO(),options.formatTask); + + // SentenceData09 instance = pipe.nextInstance(is, depReader); + + SentenceData09 instance = depReader.getNext(); + if (instance == null) + break; + cnt++; + + SentenceData09 i09 = this.parse(instance, params, labelOnly, options); + + depWriter.write(i09); + del = PipeGen.outValue(cnt, del, last); + + } + // pipe.close(); + depWriter.finishWriting(); + long end = System.currentTimeMillis(); + // DB.println("errors "+error); + if (maxInfo) + System.out.println("Used time " + (end - start)); + if (maxInfo) + System.out.println("forms count " + Instances.m_count + " unkown " + Instances.m_unkown); + + } + + private void outAll(OptionsSuper options, Pipe pipe, ParametersFloat params, boolean maxInfo, boolean labelOnly) + throws Exception { + + long start = System.currentTimeMillis(); + + CONLLReader09 depReader = new CONLLReader09(options.testfile, options.formatTask); + CONLLWriter09 depWriter = new CONLLWriter09(options.outfile, options.formatTask); + + int cnt = 0; + int del = 0; + long last = System.currentTimeMillis(); + + if (maxInfo) + System.out.println("\nParsing Information "); + if (maxInfo) + System.out.println("------------------- "); + + if (maxInfo && !options.decodeProjective) + System.out.println("" + Decoder.getInfo()); + + System.out.print("Processing Sentence: "); + + while (true) { + + // Instances is = new Instances(); + // is.init(1, new MFO(),options.formatTask); + + // SentenceData09 instance = pipe.nextInstance(is, depReader); + + SentenceData09 instance = depReader.getNext(); + if (instance == null) + break; + cnt++; + + SentenceData09[] i09 = this.parseAll(instance, params, labelOnly, options); + + for (SentenceData09 sd : i09) + depWriter.write(sd); + del = PipeGen.outValue(cnt, del, last); + + } + // pipe.close(); + depWriter.finishWriting(); + long end = System.currentTimeMillis(); + // DB.println("errors "+error); + if (maxInfo) + System.out.println("Used time " + (end - start)); + if (maxInfo) + System.out.println("forms count " + Instances.m_count + " unkown " + Instances.m_unkown); + + } + + /** + * Parse a single sentence + * + * @param instance + * @param params + * @param labelOnly + * @param options + * @return + */ + public SentenceData09 parse(SentenceData09 instance, ParametersFloat params, boolean labelOnly, + OptionsSuper options) { + + String[] types = new String[pipe.mf.getFeatureCounter().get(PipeGen.REL)]; + for (Entry<String, Integer> e : MFO.getFeatureSet().get(PipeGen.REL).entrySet()) + types[e.getValue()] = e.getKey(); + + is = new Instances(); + is.init(1, new MFO(), options.formatTask); + new CONLLReader09().insert(is, instance); + + // use for the training ppos + + SentenceData09 i09 = new SentenceData09(instance); + i09.createSemantic(instance); + + if (labelOnly) { + F2SF f2s = params.getFV(); + + // repair pheads + + is.pheads[0] = is.heads[0]; + + for (int l = 0; l < is.pheads[0].length; l++) { + if (is.pheads[0][l] < 0) + is.pheads[0][l] = 0; + } + + short[] labels = pipe.extractor[0].searchLabel(is, 0, is.pposs[0], is.forms[0], is.plemmas[0], is.pheads[0], + is.plabels[0], is.feats[0], pipe.cl, f2s); + + for (int j = 0; j < instance.forms.length - 1; j++) { + i09.plabels[j] = types[labels[j + 1]]; + i09.pheads[j] = is.pheads[0][j + 1]; + } + return i09; + } + + if (options.maxLength > instance.length() && options.minLength <= instance.length()) { + try { + // System.out.println("prs "+instance.forms[0]); + // System.out.println("prs "+instance.toString()); + d2 = pipe.fillVector(params.getFV(), is, 0, null, pipe.cl);// cnt-1 + d = Decoder.decode(is.pposs[0], d2, options.decodeProjective, !Decoder.TRAINING); // cnt-1 + + } catch (Exception e) { + e.printStackTrace(); + } + + for (int j = 0; j < instance.forms.length - 1; j++) { + i09.plabels[j] = types[d.labels[j + 1]]; + i09.pheads[j] = d.heads[j + 1]; + } + } + return i09; + + } + + public SentenceData09[] parseAll(SentenceData09 instance, ParametersFloat params, boolean labelOnly, + OptionsSuper options) { + + String[] types = new String[pipe.mf.getFeatureCounter().get(PipeGen.REL)]; + for (Entry<String, Integer> e : MFO.getFeatureSet().get(PipeGen.REL).entrySet()) + types[e.getValue()] = e.getKey(); + + is = new Instances(); + is.init(1, new MFO(), options.formatTask); + new CONLLReader09().insert(is, instance); + + // use for the training ppos + + SentenceData09[] i09;// = new SentenceData09(instance); + // i09.createSemantic(instance); + + if (labelOnly) { + F2SF f2s = params.getFV(); + + // repair pheads + + is.pheads[0] = is.heads[0]; + + for (int l = 0; l < is.pheads[0].length; l++) { + if (is.pheads[0][l] < 0) + is.pheads[0][l] = 0; + } + + short[] labels = pipe.extractor[0].searchLabel(is, 0, is.pposs[0], is.forms[0], is.plemmas[0], is.pheads[0], + is.plabels[0], is.feats[0], pipe.cl, f2s); + + i09 = new SentenceData09[1]; + i09[0] = new SentenceData09(instance); + i09[0].createSemantic(instance); + + for (int j = 0; j < instance.forms.length - 1; j++) { + i09[0].plabels[j] = types[labels[j + 1]]; + i09[0].pheads[j] = is.pheads[0][j + 1]; + } + return i09; + } + + if (options.maxLength > instance.length() && options.minLength <= instance.length()) { + Parse[] ds = null; + + try { + // System.out.println("prs "+instance.forms[0]); + // System.out.println("prs "+instance.toString()); + d2 = pipe.fillVector(params.getFV(), is, 0, null, pipe.cl);// cnt-1 + ds = Decoder.decodeAll(is.pposs[0], d2, options.decodeProjective, !Decoder.TRAINING); // cnt-1 + + } catch (Exception e) { + e.printStackTrace(); + } + + i09 = new SentenceData09[ds.length]; + for (int i = 0; i < ds.length; ++i) { + i09[i] = new SentenceData09(instance); + i09[i].createSemantic(instance); + for (int j = 0; j < instance.forms.length - 1; j++) { + i09[i].plabels[j] = types[ds[i].labels[j + 1]]; + i09[i].pheads[j] = ds[i].heads[j + 1]; + } + } + + return i09; + } else { + i09 = new SentenceData09[1]; + i09[0] = new SentenceData09(instance); + i09[0].createSemantic(instance); + return i09; + } + + } + + is2.io.CONLLReader09 reader = new is2.io.CONLLReader09(true); + + /* + * (non-Javadoc) + * + * @see is2.tools.Tool#apply(is2.data.SentenceData09) + */ + @Override + public SentenceData09 apply(SentenceData09 snt09) { + + SentenceData09 it = new SentenceData09(); + it.createWithRoot(snt09); + + SentenceData09 out = null; + try { + + // for(int k=0;k<it.length();k++) { + // it.forms[k] = reader.normalize(it.forms[k]); + // it.plemmas[k] = reader.normalize(it.plemmas[k]); + // } + + out = parse(it, this.params, false, options); + + } catch (Exception e) { + e.printStackTrace(); + } + + Decoder.executerService.shutdown(); + Pipe.executerService.shutdown(); + + return out; + } + + /** + * Get the edge scores of the last parse. + * + * @return the scores + */ + public float[] getInfo() { + + float[] scores = new float[is.length(0)]; + Extractor.encode3(is.pposs[0], d.heads, d.labels, d2, scores); + + return scores; + } + + /** + * Write the parsing model + * + * @param options + * @param params + * @param extension + * @throws FileNotFoundException + * @throws IOException + */ + private void writeModell(OptionsSuper options, ParametersFloat params, String extension, Cluster cs) + throws FileNotFoundException, IOException { + + String name = extension == null ? options.modelName : options.modelName + extension; + // System.out.println("Writting model: "+name); + ZipOutputStream zos = new ZipOutputStream(new BufferedOutputStream(new FileOutputStream(name))); + zos.putNextEntry(new ZipEntry("data")); + DataOutputStream dos = new DataOutputStream(new BufferedOutputStream(zos)); + + MFO.writeData(dos); + cs.write(dos); + + params.write(dos); + + dos.writeBoolean(options.stack); + dos.writeInt(options.featureCreation); + + Edges.write(dos); + + dos.writeBoolean(options.decodeProjective); + + dos.writeInt(Extractor.maxForm); + + dos.writeInt(5); // Info count + dos.writeUTF("Used parser " + Parser.class.toString()); + dos.writeUTF("Creation date " + (new SimpleDateFormat("yyyy.MM.dd HH:mm:ss")).format(new Date())); + dos.writeUTF("Training data " + options.trainfile); + dos.writeUTF("Iterations " + options.numIters + " Used sentences " + options.count); + dos.writeUTF("Cluster " + options.clusterFile); + + dos.flush(); + dos.close(); + } + + @Override + public boolean retrain(SentenceData09 sentence, float upd, int iterations) { + + params.total = params.parameters; + + boolean done = false; + + for (int k = 0; k < iterations; k++) { + try { + // create the data structure + DataFES data = new DataFES(sentence.length(), + pipe.mf.getFeatureCounter().get(PipeGen.REL).shortValue()); + + Instances is = new Instances(); + is.m_encoder = pipe.mf; + + is.init(1, pipe.mf, options.formatTask); + new CONLLReader09().insert(is, sentence); + + // String list[] = + // ((MFO)is.m_encoder).reverse(((MFO)is.m_encoder).getFeatureSet().get(Pipe.POS)); + // for(String s :list) { + // System.out.println(s+" "); + // } + + // for(int i=0;i<is.length(0);i++) { + + // System.out.printf("%d\t %d\t %d + // \n",i,is.forms[0][i],is.pposs[0][i] ); + // System.out.printf("%s\t form:%s + // pos:%s\n",i,sentence.forms[i],sentence.ppos[i]); + + // } + + SentenceData09 i09 = new SentenceData09(sentence); + i09.createSemantic(sentence); + + // create the weights + data = pipe.fillVector(params.getFV(), is, 0, data, pipe.cl); + + short[] pos = is.pposs[0]; + + // parse the sentence + Parse d = Decoder.decode(pos, data, options.decodeProjective, Decoder.TRAINING); + + // training successful? + double e = pipe.errors(is, 0, d); + // System.out.println("errors "+e); + if (e == 0) { + + done = true; + break; + } + + // update the weight vector + FV pred = new FV(); + pipe.extractor[0].encodeCat(is, 0, pos, is.forms[0], is.plemmas[0], d.heads, d.labels, is.feats[0], + pipe.cl, pred); + + params.getFV(); + + FV act = new FV(); + pipe.extractor[0].encodeCat(is, 0, pos, is.forms[0], is.plemmas[0], is.heads[0], is.labels[0], + is.feats[0], pipe.cl, act); + + params.update(act, pred, is, 0, d, upd, e); + + if (upd > 0) + upd--; + + } catch (Exception e) { + e.printStackTrace(); + } + } + Decoder.executerService.shutdown(); + Pipe.executerService.shutdown(); + + return done; + } + + @Override + public boolean retrain(SentenceData09 sentence, float upd, int iterations, boolean print) { + // TODO Auto-generated method stub + return retrain(sentence, upd, iterations); + } +} \ No newline at end of file diff --git a/dependencyParser/experimental/mate-tools/src/is2/parser/Pipe.java b/dependencyParser/experimental/mate-tools/src/is2/parser/Pipe.java new file mode 100755 index 0000000..f7f3782 --- /dev/null +++ b/dependencyParser/experimental/mate-tools/src/is2/parser/Pipe.java @@ -0,0 +1,224 @@ +package is2.parser; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.concurrent.ExecutorService; + +import is2.data.Cluster; +import is2.data.DataFES; +import is2.data.F2SF; +import is2.data.Instances; +import is2.data.Parse; +import is2.data.PipeGen; +import is2.data.SentenceData09; +import is2.io.CONLLReader09; +import is2.util.OptionsSuper; + +final public class Pipe extends PipeGen { + + public Extractor[] extractor; + final public MFO mf = new MFO(); + + public Cluster cl; + + private OptionsSuper options; + public static long timeExtract; + + public Pipe(OptionsSuper o) { + options = o; + } + + public void createInstances(String file, Instances is) throws Exception { + + CONLLReader09 depReader = new CONLLReader09(file); + + mf.register(REL, "<root-type>"); + + // register at least one predicate since the parsing data might not + // contain predicates as in + // the Japaness corpus but the development sets contains some + + System.out.print("Registering feature parts of sentence: "); + int ic = 0; + int del = 0; + while (true) { + SentenceData09 instance = depReader.getNext(); + if (instance == null) + break; + ic++; + + if (ic % 1000 == 0) { + del = outValue(ic, del); + } + + String[] labs1 = instance.labels; + for (String element : labs1) + mf.register(REL, element); + + String[] w = instance.forms; + for (String element : w) + mf.register(WORD, depReader.normalize(element)); + + w = instance.plemmas; + for (String element : w) + mf.register(WORD, depReader.normalize(element)); + + w = instance.ppos; + for (String element : w) + mf.register(POS, element); + + w = instance.gpos; + for (String element : w) + mf.register(POS, element); + + if (instance.feats != null) { + String fs[][] = instance.feats; + for (String[] element : fs) { + w = element; + if (w == null) + continue; + for (String element2 : w) + mf.register(FEAT, element2); + } + } + + if ((ic - 1) > options.count) + break; + } + del = outValue(ic, del); + + System.out.println(); + Extractor.initFeatures(); + + Extractor.maxForm = mf.getFeatureCounter().get(WORD); + + if (options.clusterFile == null) + cl = new Cluster(); + else + cl = new Cluster(options.clusterFile, mf, 6); + + mf.calculateBits(); + Extractor.initStat(options.featureCreation); + + System.out.println("" + mf.toString()); + + for (Extractor e : extractor) + e.init(); + + depReader.startReading(file); + + int num1 = 0; + + is.init(ic, new MFO()); + + Edges.init(mf.getFeatureCounter().get(POS)); + + System.out.print("Creating edge filters and read corpus: "); + del = 0; + + while (true) { + if (num1 % 100 == 0) + del = outValue(num1, del); + + SentenceData09 instance1 = depReader.getNext(is); + + if (instance1 == null) + break; + + int last = is.size() - 1; + short[] pos = is.pposs[last]; + + for (int k = 0; k < is.length(last); k++) { + if (is.heads[last][k] < 0) + continue; + Edges.put(pos[is.heads[last][k]], pos[k], is.labels[last][k]); + // Edges.put(pos[k],pos[is.heads[last][k]], is.labels[last][k]); + } + + if (!options.allFeatures && num1 > options.count) + break; + + num1++; + + } + del = outValue(num1, del); + System.out.println(); + Edges.findDefault(); + } + + /** + * Creates an instance for outputParses + * + * @param is + * @return + * @throws IOException + */ + protected final SentenceData09 nextInstance(Instances is, CONLLReader09 depReader) throws Exception { + + SentenceData09 instance = depReader.getNext(is); + if (instance == null || instance.forms == null) + return null; + + return instance; + } + + public static ExecutorService executerService = java.util.concurrent.Executors.newFixedThreadPool(Parser.THREADS); + + public DataFES fillVector(F2SF params, Instances is, int inst, DataFES d, Cluster cluster) + throws InterruptedException { + + long ts = System.nanoTime(); + + if (executerService.isShutdown()) + executerService = java.util.concurrent.Executors.newCachedThreadPool(); + + final int length = is.length(inst); + if (d == null || d.len < length) + d = new DataFES(length, mf.getFeatureCounter().get(PipeGen.REL).shortValue()); + + ArrayList<ParallelExtract> pe = new ArrayList<ParallelExtract>(); + for (int i = 0; i < Parser.THREADS; i++) + pe.add(new ParallelExtract(extractor[i], is, inst, d, (F2SF) params.clone(), cluster)); + + for (int w1 = 0; w1 < length; w1++) { + for (int w2 = w1 + 1; w2 < length; w2++) { + + if (w1 == w2) + continue; + + ParallelExtract.add(w1, w2); + + } + } + // for(int i=0;i<efp.length;i++) efp[i].start(); + // for(int i=0;i<efp.length;i++) efp[i].join(); + executerService.invokeAll(pe); + + timeExtract += (System.nanoTime() - ts); + + return d; + } + + public double errors(Instances is, int ic, Parse p) { + short[] act = is.heads[ic]; + double correct = 0; + + // do not count root + for (int i = 1; i < act.length; i++) { + + // if (is.ppos[ic] ==null ) System.out.println("mf + // null"+is.ppos[ic][i]); + if (p.heads[i] == act[i]) { + correct += 0.5; + if (p.labels[i] == is.labels[ic][i]) + correct += 0.5; + } + } + + double x = ((double) act.length - 1 - correct); + + p.f1 = correct / (act.length - 1); + + return x; + } +} diff --git a/dependencyParser/experimental/mate-tools/src/is2/parser/package.html b/dependencyParser/experimental/mate-tools/src/is2/parser/package.html new file mode 100755 index 0000000..a4f40a2 --- /dev/null +++ b/dependencyParser/experimental/mate-tools/src/is2/parser/package.html @@ -0,0 +1,11 @@ +Package info +<ul> + <li> separate cluster feature to keep speed since two many features in a function reduce speed drastically. </li> + <li> try second order stacking features </li> + <li> parser stacking features </li> + <li> lots of cluster features </li> + <li> Iteration over edges and not extraction of all edges each time </li> + <li> integrated new structurer writer </li> +</ul> + Change in FS, I observed lots of duplicated grand-children features +<br> \ No newline at end of file diff --git a/dependencyParser/experimental/mate-tools/src/is2/parserR2/Decoder.java b/dependencyParser/experimental/mate-tools/src/is2/parserR2/Decoder.java new file mode 100755 index 0000000..2ba175f --- /dev/null +++ b/dependencyParser/experimental/mate-tools/src/is2/parserR2/Decoder.java @@ -0,0 +1,405 @@ +package is2.parserR2; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashSet; +import java.util.List; +import java.util.concurrent.ExecutorService; + +import decoder.ParallelDecoder; +import decoder.ParallelRearrangeNBest; +import decoder.ParallelRearrangeNBest2; +import extractors.Extractor; +import is2.data.Closed; +import is2.data.DataF; +import is2.data.Instances; +import is2.data.Open; +import is2.data.Parse; +import is2.data.ParseNBest; + +/** + * @author Bernd Bohnet, 01.09.2009 + * + * This methods do the actual work and they build the dependency trees. + */ +final public class Decoder { + + public static final boolean TRAINING = true; + public static long timeDecotder; + public static long timeRearrange; + + public static final boolean LAS = true; + + /** + * Threshold for rearrange edges non-projective + */ + public static float NON_PROJECTIVITY_THRESHOLD = 0.3F; + + public static ExecutorService executerService = java.util.concurrent.Executors.newFixedThreadPool(Parser.THREADS); + + // do not initialize + private Decoder() { + }; + + /** + * Build a dependency tree based on the data + * + * @param pos + * part-of-speech tags + * @param x + * the data + * @param projective + * projective or non-projective + * @param edges + * the edges + * @return a parse tree + * @throws InterruptedException + */ + public static List<ParseNBest> decode(short[] pos, DataF x, boolean projective, Extractor extractor) + throws InterruptedException { + + long ts = System.nanoTime(); + + if (executerService.isShutdown()) + executerService = java.util.concurrent.Executors.newCachedThreadPool(); + final int n = pos.length; + + final Open O[][][][] = new Open[n][n][2][]; + final Closed C[][][][] = new Closed[n][n][2][]; + + ArrayList<ParallelDecoder> pe = new ArrayList<ParallelDecoder>(); + + for (int i = 0; i < Parser.THREADS; i++) + pe.add(new ParallelDecoder(pos, x, O, C, n)); + + for (short k = 1; k < n; k++) { + + // provide the threads the data + for (short s = 0; s < n; s++) { + short t = (short) (s + k); + if (t >= n) + break; + + ParallelDecoder.add(s, t); + } + + executerService.invokeAll(pe); + } + + double bestSpanScore = (-1.0F / 0.0F); + Closed bestSpan = null; + for (int m = 1; m < n; m++) + if (C[0][n - 1][1][m].p > bestSpanScore) { + bestSpanScore = C[0][n - 1][1][m].p; + bestSpan = C[0][n - 1][1][m]; + } + + // build the dependency tree from the chart + ParseNBest out = new ParseNBest(pos.length); + + bestSpan.create(out); + + out.heads[0] = -1; + out.labels[0] = 0; + bestProj = out; + + timeDecotder += (System.nanoTime() - ts); + // DB.println(""+out); + + ts = System.nanoTime(); + List<ParseNBest> parses; + + if (!projective) { + + // if (training) + // rearrange(pos, out.heads, out.types,x,training); + // else { + // DB.println("bestSpan score "+(float)bestSpan.p+" comp score + // "+Extractor.encode3(pos, out.heads, out.types, x)); + // System.out.println(); + // Parse best = new Parse(out.heads,out.types,Extractor.encode3(pos, + // out.heads, out.types, x)); + parses = rearrangeNBest(pos, out.heads, out.labels, x, extractor); + // DB.println("1best "+parses.get(0).f1); + // DB.println(""+parses.get(0).toString()); + + // for(ParseNBest p :parses) if (p.heads==null) + // p.signature2parse(p.signature()); + + /// if (parses.get(0).f1>(best.f1+NON_PROJECTIVITY_THRESHOLD)) out = + /// parses.get(0); + // else out =best; + + // } + } else { + parses = new ArrayList<ParseNBest>(); + parses.add(out); + } + timeRearrange += (System.nanoTime() - ts); + + return parses; + } + + static Parse bestProj = null; + + /** + * This is the parallel non-projective edge re-arranger + * + * @param pos + * part-of-speech tags + * @param heads + * parent child relation + * @param labs + * edge labels + * @param x + * the data + * @param edges + * the existing edges defined by part-of-speech tags + * @throws InterruptedException + */ + public static List<ParseNBest> rearrangeNBestP(short[] pos, short[] heads, short[] labs, DataF x, + Extractor extractor) throws InterruptedException { + + ArrayList<ParallelRearrangeNBest2> pe = new ArrayList<ParallelRearrangeNBest2>(); + + int round = 0; + ArrayList<ParseNBest> parses = new ArrayList<ParseNBest>(); + ParseNBest px = new ParseNBest(); + px.signature(heads, labs); + // Object extractor; + px.f1 = extractor.encode3(pos, heads, labs, x); + parses.add(px); + + float lastNBest = Float.NEGATIVE_INFINITY; + + HashSet<Parse> done = new HashSet<Parse>(); + gnu.trove.THashSet<CharSequence> contained = new gnu.trove.THashSet<CharSequence>(); + + while (true) { + + pe.clear(); + + // used the first three parses + int ic = 0, considered = 0; + while (true) { + + if (parses.size() <= ic || considered > 11) + break; + + ParseNBest parse = parses.get(ic); + + ic++; + // parse already extended + if (done.contains(parse)) + continue; + considered++; + + parse.signature2parse(parse.signature()); + + done.add(parse); + + boolean[][] isChild = new boolean[heads.length][heads.length]; + + for (int i = 1, l1 = 1; i < heads.length; i++, l1 = i) + while ((l1 = heads[l1]) != -1) + isChild[l1][i] = true; + + // check the list of new possible parents and children for a + // better combination + for (short ch = 1; ch < heads.length; ch++) { + for (short pa = 0; pa < heads.length; pa++) { + if (ch == pa || pa == heads[ch] || isChild[ch][pa]) + continue; + ParallelRearrangeNBest2.add(parse.clone(), ch, pa); + } + } + + } + + for (int t = 0; t < Parser.THREADS; t++) + pe.add(new ParallelRearrangeNBest2(pos, x, lastNBest, extractor, NON_PROJECTIVITY_THRESHOLD)); + + executerService.invokeAll(pe); + + // avoid to add parses several times + for (ParallelRearrangeNBest2 rp : pe) { + for (int k = rp.parses.size() - 1; k >= 0; k--) { + if (lastNBest > rp.parses.get(k).f1) + continue; + CharSequence sig = rp.parses.get(k).signature(); + if (!contained.contains(sig)) { + parses.add(rp.parses.get(k)); + contained.add(sig); + } + } + } + + Collections.sort(parses); + + if (round >= 2) + break; + round++; + + // do not use to much memory + if (parses.size() > Parser.NBest) { + // if (parses.get(Parser.NBest).f1>lastNBest) lastNBest = + // (float)parses.get(Parser.NBest).f1; + parses.subList(Parser.NBest, parses.size() - 1).clear(); + } + } + return parses; + } + + /** + * This is the parallel non-projective edge re-arranger + * + * @param pos + * part-of-speech tags + * @param heads + * parent child relation + * @param labs + * edge labels + * @param x + * the data + * @param edges + * the existing edges defined by part-of-speech tags + * @throws InterruptedException + */ + public static List<ParseNBest> rearrangeNBest(short[] pos, short[] heads, short[] labs, DataF x, + Extractor extractor) throws InterruptedException { + + ArrayList<ParallelRearrangeNBest> pe = new ArrayList<ParallelRearrangeNBest>(); + + int round = 0; + ArrayList<ParseNBest> parses = new ArrayList<ParseNBest>(); + ParseNBest px = new ParseNBest(); + px.signature(heads, labs); + // Object extractor; + px.f1 = extractor.encode3(pos, heads, labs, x); + parses.add(px); + + float lastNBest = Float.NEGATIVE_INFINITY; + + HashSet<Parse> done = new HashSet<Parse>(); + gnu.trove.THashSet<CharSequence> contained = new gnu.trove.THashSet<CharSequence>(); + while (true) { + + pe.clear(); + + // used the first three parses + int i = 0; + while (true) { + + if (parses.size() <= i || pe.size() > 12) + break; + + ParseNBest parse = parses.get(i); + + i++; + + // parse already extended + if (done.contains(parse)) + continue; + + // DB.println("err "+parse.heads); + + parse.signature2parse(parse.signature()); + + done.add(parse); + pe.add(new ParallelRearrangeNBest(pos, x, parse, lastNBest, extractor, (float) parse.f1, + NON_PROJECTIVITY_THRESHOLD)); + } + + executerService.invokeAll(pe); + + // avoid to add parses several times + for (ParallelRearrangeNBest rp : pe) { + for (int k = rp.parses.size() - 1; k >= 0; k--) { + if (lastNBest > rp.parses.get(k).f1) + continue; + CharSequence sig = rp.parses.get(k).signature(); + if (!contained.contains(sig)) { + parses.add(rp.parses.get(k)); + contained.add(sig); + } + } + } + + Collections.sort(parses); + + if (round >= 2) + break; + round++; + + // do not use to much memory + if (parses.size() > Parser.NBest) { + if (parses.get(Parser.NBest).f1 > lastNBest) + lastNBest = (float) parses.get(Parser.NBest).f1; + parses.subList(Parser.NBest, parses.size() - 1).clear(); + } + } + return parses; + } + + public static String getInfo() { + + return "Decoder non-projectivity threshold: " + NON_PROJECTIVITY_THRESHOLD; + } + + /** + * @param parses + * @param is + * @param i + * @return + */ + public static int getGoldRank(List<ParseNBest> parses, Instances is, int i, boolean las) { + + for (int p = 0; p < parses.size(); p++) { + + if (parses.get(p).heads == null) + parses.get(p).signature2parse(parses.get(p).signature()); + + boolean eq = true; + for (int w = 1; w < is.length(0); w++) { + if (is.heads[i][w] != parses.get(p).heads[w] || (is.labels[i][w] != parses.get(p).labels[w] && las)) { + eq = false; + break; + } + } + if (eq) + return p; + } + return -1; + } + + public static int getSmallestError(List<ParseNBest> parses, Instances is, int i, boolean las) { + + int smallest = -1; + for (int p = 0; p < parses.size(); p++) { + + int err = 0; + for (int w = 1; w < is.length(0); w++) { + if (is.heads[i][w] != parses.get(p).heads[w] || (is.labels[i][w] != parses.get(p).labels[w] && las)) { + err++; + } + } + if (smallest == -1 || smallest > err) + smallest = err; + if (smallest == 0) + return 0; + } + return smallest; + } + + public static int getError(ParseNBest parse, Instances is, int i, boolean las) { + + int err = 0; + for (int w = 1; w < is.length(i); w++) { + if (is.heads[i][w] != parse.heads[w] || (is.labels[i][w] != parse.labels[w] && las)) { + err++; + } + } + return err; + } + +} diff --git a/dependencyParser/experimental/mate-tools/src/is2/parserR2/Options.java b/dependencyParser/experimental/mate-tools/src/is2/parserR2/Options.java new file mode 100755 index 0000000..eb396b4 --- /dev/null +++ b/dependencyParser/experimental/mate-tools/src/is2/parserR2/Options.java @@ -0,0 +1,92 @@ +package is2.parserR2; + +import is2.util.OptionsSuper; + +public final class Options extends OptionsSuper { + + int start = 0, end = 0; + String prefix_model = "m"; + String prefix_test = "t"; + + public Options(String[] args) { + + for (int i = 0; i < args.length; i++) { + + if (args[i].equals("--help")) + explain(); + + if (args[i].equals("-decode")) { + decodeProjective = args[i + 1].equals("proj"); + i++; + } else if (args[i].equals("-decodeTH")) { + decodeTH = Double.parseDouble(args[i + 1]); + i++; + } else if (args[i].equals("-nonormalize")) { + normalize = false; + } else if (args[i].equals("-features")) { + features = args[i + 1]; + i++; + } else if (args[i].equals("-hsize")) { + hsize = Integer.parseInt(args[i + 1]); + i++; + } else if (args[i].equals("-len")) { + maxLen = Integer.parseInt(args[i + 1]); + i++; + } else if (args[i].equals("-cores")) { + cores = Integer.parseInt(args[i + 1]); + i++; + } else if (args[i].equals("-best")) { + best = Integer.parseInt(args[i + 1]); + i++; + } else if (args[i].equals("-start")) { + start = Integer.parseInt(args[i + 1]); + i++; + } else if (args[i].equals("-end")) { + end = Integer.parseInt(args[i + 1]); + i++; + } else if (args[i].equals("-prefix-model")) { + prefix_model = args[i + 1]; + i++; + } else if (args[i].equals("-prefix-test")) { + prefix_test = args[i + 1]; + i++; + } else if (args[i].equals("-mapping")) { + this.useMapping = args[i + 1]; + i++; + } else if (args[i].equals("-no2nd")) { + no2nd = true; + } else if (args[i].equals("-few2nd")) { + few2nd = true; + } else + super.addOption(args, i); + + } + + } + + private void explain() { + System.out.println("Usage: "); + System.out.println("java -class mate.jar is2.parser.Parser [Options]"); + System.out.println(); + System.out.println("Example: "); + System.out.println( + " java -class mate.jar is2.parser.Parser -model eps3.model -train corpora/conll08st/train/train.closed -test corpora/conll08st/devel/devel.closed -out b3.test -eval corpora/conll08st/devel/devel.closed -count 2000 -i 6"); + System.out.println(""); + System.out.println("Options:"); + System.out.println(""); + System.out.println(" -train <file> the corpus a model is trained on; default " + this.trainfile); + System.out.println(" -test <file> the input corpus for testing; default " + this.testfile); + System.out.println(" -out <file> the output corpus (result) of a test run; default " + this.outfile); + System.out.println(" -model <file> the parsing model for traing the model is stored in the files"); + System.out.println( + " and for parsing the model is load from this file; default " + this.modelName); + System.out.println( + " -i <number> the number of training iterations; good numbers are 10 for smaller corpora and 6 for bigger; default " + + this.numIters); + System.out.println(" -count <number> the n first sentences of the corpus are take for the training default " + + this.count); + System.out.println(" -format <number> conll format of the year 8 or 9; default " + this.formatTask); + + System.exit(0); + } +} diff --git a/dependencyParser/experimental/mate-tools/src/is2/parserR2/Parameters.java b/dependencyParser/experimental/mate-tools/src/is2/parserR2/Parameters.java new file mode 100755 index 0000000..de7b591 --- /dev/null +++ b/dependencyParser/experimental/mate-tools/src/is2/parserR2/Parameters.java @@ -0,0 +1,37 @@ +/** + * + */ +package is2.parserR2; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; + +import is2.data.FV; +import is2.data.IFV; +import is2.data.Instances; +import is2.data.Parse; + +/** + * @author Bernd Bohnet, 31.08.2009 + * + * + */ +public abstract class Parameters { + + public abstract void average(double avVal); + + public abstract void update(FV act, FV pred, Instances isd, int instc, Parse d, double upd, double e); + + public abstract void write(DataOutputStream dos) throws IOException; + + public abstract void read(DataInputStream dis) throws IOException; + + public abstract int size(); + + /** + * @return + */ + public abstract IFV getFV(); + +} diff --git a/dependencyParser/experimental/mate-tools/src/is2/parserR2/ParametersFloat.java b/dependencyParser/experimental/mate-tools/src/is2/parserR2/ParametersFloat.java new file mode 100755 index 0000000..2ba0aaa --- /dev/null +++ b/dependencyParser/experimental/mate-tools/src/is2/parserR2/ParametersFloat.java @@ -0,0 +1,178 @@ +package is2.parserR2; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; + +import is2.data.F2SF; +import is2.data.FV; +import is2.data.FVR; +import is2.data.Instances; +import is2.data.Parse; +import is2.util.DB; + +final public class ParametersFloat extends Parameters { + + public float[] parameters; + private float[] total; + + public ParametersFloat(int size) { + parameters = new float[size]; + total = new float[size]; + for (int i = 0; i < parameters.length; i++) { + parameters[i] = 0F; + total[i] = 0F; + } + } + + /** + * @param parameters2 + */ + public ParametersFloat(float[] p) { + parameters = p; + } + + @Override + public void average(double avVal) { + for (int j = 0; j < total.length; j++) { + parameters[j] = total[j] / ((float) avVal); + } + total = null; + } + + public ParametersFloat average2(double avVal) { + float[] px = new float[this.parameters.length]; + for (int j = 0; j < total.length; j++) { + px[j] = total[j] / ((float) avVal); + } + ParametersFloat pf = new ParametersFloat(px); + return pf; + } + + public void update(FV act, FV pred, Instances isd, int instc, Parse dx, double upd, double e, float d, float f) { + + e++; + + float lam_dist = d - f; + + float b = (float) e - lam_dist; + + FV dist = act.getDistVector(pred); + + dist.update(parameters, total, hildreth(dist, b), upd, false); + } + + @Override + public void update(FV act, FV pred, Instances isd, int instc, Parse dx, double upd, double e) { + + e++; + + float lam_dist = getScore(act) - getScore(pred); + + float b = (float) e - lam_dist; + + FV dist = act.getDistVector(pred); + + dist.update(parameters, total, hildreth(dist, b), upd, false); + } + + public void update(FVR act, FVR pred, Instances isd, int instc, Parse dx, double upd, double e, float lam_dist) { + + e++; + + float b = (float) e - lam_dist; + + FVR dist = act.getDistVector(pred); + + dist.update(parameters, total, hildreth(dist, b), upd, false); + } + + protected double hildreth(FV a, double b) { + + double A = a.dotProduct(a); + if (A <= 0.0000000000000000001) + return 0.0; + return b / A; + } + + protected double hildreth(FVR a, double b) { + + double A = a.dotProduct(a); + if (A <= 0.0000000000000000001) + return 0.0; + return b / A; + } + + public float getScore(FV fv) { + if (fv == null) + return 0.0F; + return fv.getScore(parameters, false); + + } + + public float getScore(FVR fv) { // xx + if (fv == null) + return 0.0F; + return fv.getScore(parameters, false); + + } + + @Override + final public void write(DataOutputStream dos) throws IOException { + + dos.writeInt(parameters.length); + for (float d : parameters) + dos.writeFloat(d); + + } + + @Override + public void read(DataInputStream dis) throws IOException { + + parameters = new float[dis.readInt()]; + int notZero = 0; + for (int i = 0; i < parameters.length; i++) { + parameters[i] = dis.readFloat(); + if (parameters[i] != 0.0F) + notZero++; + } + + DB.println("read parameters " + parameters.length + " not zero " + notZero); + + } + + public int countNZ() { + + int notZero = 0; + for (float parameter : parameters) { + if (parameter != 0.0F) + notZero++; + } + return notZero; + + // DB.println("read parameters "+parameters.length+" not zero + // "+notZero); + + } + + /* + * (non-Javadoc) + * + * @see is2.sp09k99995.Parameters#getFV() + */ + @Override + public F2SF getFV() { + return new F2SF(parameters); + } + + /* + * (non-Javadoc) + * + * @see is2.sp09k99999.Parameters#size() + */ + @Override + public int size() { + return parameters.length; + } + +} diff --git a/dependencyParser/experimental/mate-tools/src/is2/parserR2/Parser.java b/dependencyParser/experimental/mate-tools/src/is2/parserR2/Parser.java new file mode 100755 index 0000000..54d6f2e --- /dev/null +++ b/dependencyParser/experimental/mate-tools/src/is2/parserR2/Parser.java @@ -0,0 +1,647 @@ +package is2.parserR2; + +import java.io.BufferedInputStream; +import java.io.BufferedOutputStream; +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.FileOutputStream; +import java.io.IOException; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map.Entry; +import java.util.zip.ZipEntry; +import java.util.zip.ZipInputStream; +import java.util.zip.ZipOutputStream; + +//import extractors.ExtractorClusterStackedR2; +import extractors.Extractor; +import extractors.ExtractorFactory; +import is2.data.Cluster; +import is2.data.DataF; +import is2.data.Edges; +import is2.data.FV; +import is2.data.Instances; +import is2.data.Long2Int; +import is2.data.Long2IntInterface; +import is2.data.MFB; +import is2.data.Parse; +import is2.data.ParseNBest; +import is2.data.PipeGen; +import is2.data.SentenceData09; +import is2.io.CONLLReader09; +import is2.io.CONLLWriter09; +import is2.tools.Tool; +import is2.util.DB; +import is2.util.OptionsSuper; +import is2.util.ParserEvaluator; + +public class Parser implements Tool { + + // output evaluation info + private static final boolean MAX_INFO = true; + + public static int THREADS = 4; + + Long2IntInterface l2i; + ParametersFloat params; + Pipe pipe; + OptionsSuper options; + + HashMap<Integer, Integer> rank = new HashMap<Integer, Integer>(); + int amongxbest = 0, amongxbest_ula = 0, nbest = 0, bestProj = 0, smallestErrorSum = 0, countAllNodes = 0; + static int NBest = 1000; + + ExtractorFactory extractorFactory = new ExtractorFactory(ExtractorFactory.StackedClusteredR2); + + /** + * Initialize the parser + * + * @param options + */ + public Parser(OptionsSuper options) { + + this.options = options; + pipe = new Pipe(options); + + params = new ParametersFloat(0); + + // load the model + try { + readModel(options, pipe, params); + } catch (Exception e) { + e.printStackTrace(); + } + + } + + /** + * @param modelFileName + * The file name of the parsing model + */ + public Parser(String modelFileName) { + this(new Options(new String[] { "-model", modelFileName })); + } + + /** + * + */ + public Parser() { + // TODO Auto-generated constructor stub + } + + public static void main(String[] args) throws Exception { + + long start = System.currentTimeMillis(); + OptionsSuper options = new Options(args); + + NBest = options.best; + + DB.println("n-best" + NBest); + + Runtime runtime = Runtime.getRuntime(); + THREADS = runtime.availableProcessors(); + if (options.cores < THREADS && options.cores > 0) + THREADS = options.cores; + + DB.println("Found " + runtime.availableProcessors() + " cores use " + THREADS); + + if (options.train) { + + Parser p = new Parser(); + p.options = options; + + p.l2i = new Long2Int(options.hsize); + + p.pipe = new Pipe(options); + Instances is = new Instances(); + + p.pipe.extractor = new Extractor[THREADS]; + + for (int t = 0; t < THREADS; t++) + p.pipe.extractor[t] = p.extractorFactory.getExtractor(p.l2i); + + p.params = new ParametersFloat(p.l2i.size()); + + if (options.useMapping != null) { + String model = options.modelName; + + options.modelName = options.useMapping; + DB.println("Using mapping of model " + options.modelName); + ZipInputStream zis = new ZipInputStream( + new BufferedInputStream(new FileInputStream(options.modelName))); + zis.getNextEntry(); + DataInputStream dis = new DataInputStream(new BufferedInputStream(zis)); + p.pipe.mf.read(dis); + + DB.println("read\n" + p.pipe.mf.toString()); + + ParametersFloat params = new ParametersFloat(0); + params.read(dis); + + Edges.read(dis); + + dis.close(); + DB.println("end read model"); + options.modelName = model; + } + + p.pipe.createInstances(options.trainfile, is); + + p.train(options, p.pipe, p.params, is, p.pipe.cl); + + p.writeModell(options, p.params, null, p.pipe.cl); + + } + + if (options.test) { + + Parser p = new Parser(); + p.options = options; + + p.pipe = new Pipe(options); + p.params = new ParametersFloat(0); // total should be zero and the + // parameters are later read + + // load the model + + p.readModel(options, p.pipe, p.params); + + DB.println("test on " + options.testfile); + + System.out.println("" + p.pipe.mf.toString()); + + p.outputParses(options, p.pipe, p.params, !MAX_INFO); + + } + + System.out.println(); + + if (options.eval) { + System.out.println("\nEVALUATION PERFORMANCE:"); + ParserEvaluator.evaluate(options.goldfile, options.outfile); + } + + long end = System.currentTimeMillis(); + System.out.println("used time " + ((float) ((end - start) / 100) / 10)); + + Decoder.executerService.shutdown(); + Pipe.executerService.shutdown(); + System.out.println("end."); + + } + + /** + * Read the models and mapping + * + * @param options + * @param pipe + * @param params + * @throws IOException + */ + public void readModel(OptionsSuper options, Pipe pipe, Parameters params) throws IOException { + + DB.println("Reading data started"); + + // prepare zipped reader + ZipInputStream zis = new ZipInputStream(new BufferedInputStream(new FileInputStream(options.modelName))); + zis.getNextEntry(); + DataInputStream dis = new DataInputStream(new BufferedInputStream(zis)); + + pipe.mf.read(dis); + + pipe.cl = new Cluster(dis); + + params.read(dis); + this.l2i = new Long2Int(params.size()); + DB.println("parsing -- li size " + l2i.size()); + + pipe.extractor = new Extractor[THREADS]; + + for (int t = 0; t < THREADS; t++) + pipe.extractor[t] = this.extractorFactory.getExtractor(l2i); + + Edges.read(dis); + + options.decodeProjective = dis.readBoolean(); + + int maxForm = dis.readInt(); + + for (int t = 0; t < THREADS; t++) { + pipe.extractor[t].setMaxForm(maxForm); + pipe.extractor[t].initStat(); + pipe.extractor[t].init(); + } + + boolean foundInfo = false; + try { + String info = null; + int icnt = dis.readInt(); + for (int i = 0; i < icnt; i++) { + info = dis.readUTF(); + System.out.println(info); + } + } catch (Exception e) { + if (!foundInfo) + System.out.println("no info about training"); + } + + dis.close(); + + DB.println("Reading data finnished"); + + Decoder.NON_PROJECTIVITY_THRESHOLD = (float) options.decodeTH; + for (int t = 0; t < THREADS; t++) { + pipe.extractor[t].initStat(); + pipe.extractor[t].init(); + } + + } + + /** + * Do the training + * + * @param instanceLengths + * @param options + * @param pipe + * @param params + * @param is + * @param cluster + * @throws IOException + * @throws InterruptedException + * @throws ClassNotFoundException + */ + public void train(OptionsSuper options, Pipe pipe, ParametersFloat params, Instances is, Cluster cluster) + throws IOException, InterruptedException, ClassNotFoundException { + + DB.println("\nTraining Information "); + DB.println("-------------------- "); + + Decoder.NON_PROJECTIVITY_THRESHOLD = (float) options.decodeTH; + + if (options.decodeProjective) + System.out.println("Decoding: " + (options.decodeProjective ? "projective" : "non-projective")); + else + System.out.println("" + Decoder.getInfo()); + int numInstances = is.size(); + + int maxLenInstances = 0; + for (int i = 0; i < numInstances; i++) + if (maxLenInstances < is.length(i)) + maxLenInstances = is.length(i); + + DataF data = new DataF(maxLenInstances, pipe.mf.getFeatureCounter().get(PipeGen.REL).shortValue()); + + int iter = 0; + int del = 0; + float error = 0; + float f1 = 0; + + FV pred = new FV(); + FV act = new FV(); + + double upd = (double) (numInstances * options.numIters) + 1; + + for (; iter < options.numIters; iter++) { + + System.out.print("Iteration " + iter + ": "); + + long start = System.currentTimeMillis(); + + long last = System.currentTimeMillis(); + error = 0; + f1 = 0; + for (int n = 0; n < numInstances; n++) { + + upd--; + + if (is.labels[n].length > options.maxLen) + continue; + + String info = " td " + ((Decoder.timeDecotder) / 1000000F) + " tr " + + ((Decoder.timeRearrange) / 1000000F) + " te " + ((Pipe.timeExtract) / 1000000F); + + if ((n + 1) % 500 == 0) + del = PipeGen.outValueErr(n + 1, Math.round(error * 1000) / 1000, f1 / n, del, last, upd, info); + + short pos[] = is.pposs[n]; + + data = pipe.fillVector(params.getFV(), is, n, data, cluster, THREADS, l2i); + + List<ParseNBest> parses = Decoder.decode(pos, data, options.decodeProjective, pipe.extractor[0]); + Parse d = parses.get(0); + double e = pipe.errors(is, n, d); + + if (d.f1 > 0) + f1 += (d.labels.length - 1 - e) / (d.labels.length - 1); + + if (e <= 0) + continue; + + // get predicted feature vector + pred.clear(); + pipe.extractor[0].encodeCat(is, n, pos, is.forms[n], is.plemmas[n], d.heads, d.labels, is.feats[n], + pipe.cl, pred); + + error += e; + + act.clear(); + pipe.extractor[0].encodeCat(is, n, pos, is.forms[n], is.plemmas[n], is.heads[n], is.labels[n], + is.feats[n], pipe.cl, act); + + params.update(act, pred, is, n, d, upd, e); + } + + String info = " td " + ((Decoder.timeDecotder) / 1000000F) + " tr " + ((Decoder.timeRearrange) / 1000000F) + + " te " + ((Pipe.timeExtract) / 1000000F) + " nz " + params.countNZ(); + PipeGen.outValueErr(numInstances, Math.round(error * 1000) / 1000, f1 / numInstances, del, last, upd, info); + del = 0; + long end = System.currentTimeMillis(); + System.out.println(" time:" + (end - start)); + + ParametersFloat pf = params.average2((iter + 1) * is.size()); + try { + + if (options.testfile != null) { + outputParses(options, pipe, pf, !MAX_INFO); + ParserEvaluator.evaluate(options.goldfile, options.outfile); + // writeModell(options, pf, ""+(iter+1),pipe.cl); + } + + } catch (Exception e) { + e.printStackTrace(); + } + + Decoder.timeDecotder = 0; + Decoder.timeRearrange = 0; + Pipe.timeExtract = 0; + + } + params.average(iter * is.size()); + } + + /** + * Do the parsing + * + * @param options + * @param pipe + * @param params + * @throws IOException + */ + private void outputParses(OptionsSuper options, Pipe pipe, ParametersFloat params, boolean maxInfo) + throws Exception { + + long start = System.currentTimeMillis(); + + CONLLReader09 depReader = new CONLLReader09(options.testfile, options.formatTask); + CONLLWriter09 depWriter = new CONLLWriter09(options.outfile, options.formatTask); + + // ExtractorClusterStacked.initFeatures(); + + int cnt = 0; + int del = 0; + long last = System.currentTimeMillis(); + + if (maxInfo) + System.out.println("\nParsing Information "); + if (maxInfo) + System.out.println("------------------- "); + + if (maxInfo && !options.decodeProjective) + System.out.println("" + Decoder.getInfo()); + + // if (!maxInfo) System.out.println(); + + String[] types = new String[pipe.mf.getFeatureCounter().get(PipeGen.REL)]; + for (Entry<String, Integer> e : MFB.getFeatureSet().get(PipeGen.REL).entrySet()) + types[e.getValue()] = e.getKey(); + + System.out.print("Processing Sentence: "); + + while (true) { + + Instances is = new Instances(); + is.init(1, new MFB(), options.formatTask); + + SentenceData09 instance = pipe.nextInstance(is, depReader); + if (instance == null) + break; + cnt++; + + SentenceData09 i09 = this.parse(instance, params); + + // } + depWriter.write(i09); + del = PipeGen.outValue(cnt, del, last); + // DB.println("xbest "+amongxbest+" cnt "+cnt+" + // "+((float)((float)amongxbest/cnt))+" nbest "+((float)nbest/cnt)+ + // " 1best "+((float)(rank.get(0)==null?0:rank.get(0))/cnt)+" + // best-proj "+((float)bestProj/cnt)); + + } + + // pipe.close(); + + depWriter.finishWriting(); + long end = System.currentTimeMillis(); + DB.println("rank\n" + rank + "\n"); + DB.println("x-best-las " + amongxbest + " x-best-ula " + amongxbest_ula + " cnt " + cnt + " x-best-las " + + ((float) amongxbest / cnt) + " x-best-ula " + ((float) amongxbest_ula / cnt) + " nbest " + + ((float) nbest / cnt) + " 1best " + ((float) (rank.get(0) == null ? 0 : rank.get(0)) / cnt) + + " best-proj " + ((float) bestProj / cnt) + " Sum LAS " + + ((float) this.smallestErrorSum / countAllNodes)); + + // DB.println("errors "+error); + + rank.clear(); + amongxbest = 0; + amongxbest_ula = 0; + cnt = 0; + nbest = 0; + bestProj = 0; + if (maxInfo) + System.out.println("Used time " + (end - start)); + if (maxInfo) + System.out.println("forms count " + Instances.m_count + " unkown " + Instances.m_unkown); + + } + + public SentenceData09 parse(SentenceData09 instance, ParametersFloat params) { + + String[] types = new String[pipe.mf.getFeatureCounter().get(PipeGen.REL)]; + for (Entry<String, Integer> e : MFB.getFeatureSet().get(PipeGen.REL).entrySet()) + types[e.getValue()] = e.getKey(); + + Instances is = new Instances(); + is.init(1, new MFB(), options.formatTask); + new CONLLReader09().insert(is, instance); + + String[] forms = instance.forms; + + // use for the training ppos + DataF d2; + try { + d2 = pipe.fillVector(params.getFV(), is, 0, null, pipe.cl, THREADS, l2i);// cnt-1 + } catch (Exception e) { + e.printStackTrace(); + return null; + } + short[] pos = is.pposs[0]; + + List<ParseNBest> parses = null; + Parse d = null; + try { + parses = Decoder.decode(pos, d2, options.decodeProjective, pipe.extractor[0]); // cnt-1 + d = parses.get(0); + } catch (Exception e) { + e.printStackTrace(); + } + + if (parses.size() > NBest) + parses = parses.subList(0, NBest); + + int g_las = Decoder.getGoldRank(parses, is, 0, Decoder.LAS); + int g_ula = Decoder.getGoldRank(parses, is, 0, !Decoder.LAS); + + int smallest = Decoder.getSmallestError(parses, is, 0, !Decoder.LAS); + smallestErrorSum += is.length(0) - smallest; + countAllNodes += is.length(0); + + if (g_las >= 0) + amongxbest++; + if (g_ula >= 0) + amongxbest_ula++; + + nbest += parses.size(); + + Integer r = rank.get(g_las); + if (r == null) + rank.put(g_las, 1); + else + rank.put(g_las, r + 1); + + this.pipe.errors(is, 0, d); + + float errBestProj = (float) this.pipe.errors(is, 0, Decoder.bestProj); + + if (errBestProj == 0) + bestProj++; + + SentenceData09 i09 = new SentenceData09(instance); + + i09.createSemantic(instance); + + for (int j = 0; j < forms.length - 1; j++) { + i09.plabels[j] = types[d.labels[j + 1]]; + i09.pheads[j] = d.heads[j + 1]; + } + return i09; + + } + + public List<ParseNBest> parseNBest(SentenceData09 instance) { + + Instances is = new Instances(); + is.init(1, new MFB(), options.formatTask); + new CONLLReader09().insert(is, instance); + + // use for the training ppos + DataF d2; + try { + d2 = pipe.fillVector(params.getFV(), is, 0, null, pipe.cl, THREADS, l2i);// cnt-1 + } catch (Exception e) { + e.printStackTrace(); + return null; + } + short[] pos = is.pposs[0]; + + List<ParseNBest> parses = null; + try { + parses = Decoder.decode(pos, d2, options.decodeProjective, pipe.extractor[0]); // cnt-1 + } catch (Exception e) { + e.printStackTrace(); + } + + if (parses.size() > NBest) + parses = parses.subList(0, NBest); + + return parses; + + } + + /* + * (non-Javadoc) + * + * @see is2.tools.Tool#apply(is2.data.SentenceData09) + */ + + @Override + public SentenceData09 apply(SentenceData09 snt09) { + + SentenceData09 it = new SentenceData09(); + it.createWithRoot(snt09); + + SentenceData09 out = null; + try { + + // for(int k=0;k<it.length();k++) { + // it.forms[k] = reader.normalize(it.forms[k]); + // it.plemmas[k] = reader.normalize(it.plemmas[k]); + // } + + out = parse(it, this.params); + + } catch (Exception e) { + e.printStackTrace(); + } + + Decoder.executerService.shutdown(); + Pipe.executerService.shutdown(); + + return out; + } + + /** + * Write the parsing model + * + * @param options + * @param params + * @param extension + * @throws FileNotFoundException + * @throws IOException + */ + private void writeModell(OptionsSuper options, ParametersFloat params, String extension, Cluster cs) + throws FileNotFoundException, IOException { + + String name = extension == null ? options.modelName : options.modelName + extension; + // System.out.println("Writting model: "+name); + ZipOutputStream zos = new ZipOutputStream(new BufferedOutputStream(new FileOutputStream(name))); + zos.putNextEntry(new ZipEntry("data")); + DataOutputStream dos = new DataOutputStream(new BufferedOutputStream(zos)); + + MFB.writeData(dos); + cs.write(dos); + + params.write(dos); + + Edges.write(dos); + + dos.writeBoolean(options.decodeProjective); + + dos.writeInt(pipe.extractor[0].getMaxForm()); + + dos.writeInt(5); // Info count + dos.writeUTF("Used parser " + Parser.class.toString()); + dos.writeUTF("Creation date " + (new SimpleDateFormat("yyyy.MM.dd HH:mm:ss")).format(new Date())); + dos.writeUTF("Training data " + options.trainfile); + dos.writeUTF("Iterations " + options.numIters + " Used sentences " + options.count); + dos.writeUTF("Cluster " + options.clusterFile); + + dos.flush(); + dos.close(); + } + +} diff --git a/dependencyParser/experimental/mate-tools/src/is2/parserR2/Pipe.java b/dependencyParser/experimental/mate-tools/src/is2/parserR2/Pipe.java new file mode 100755 index 0000000..81ce59a --- /dev/null +++ b/dependencyParser/experimental/mate-tools/src/is2/parserR2/Pipe.java @@ -0,0 +1,261 @@ +package is2.parserR2; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.concurrent.ExecutorService; + +import extractors.Extractor; +import extractors.ParallelExtract; +import is2.data.Cluster; +import is2.data.DataF; +import is2.data.Edges; +import is2.data.F2SF; +import is2.data.Instances; +import is2.data.Long2IntInterface; +import is2.data.MFB; +import is2.data.Parse; +import is2.data.PipeGen; +import is2.data.SentenceData09; +import is2.io.CONLLReader09; +import is2.util.OptionsSuper; + +final public class Pipe extends PipeGen { + + public Extractor[] extractor; + final public MFB mf = new MFB(); + + Cluster cl; + + private OptionsSuper options; + public static long timeExtract; + + public Pipe(OptionsSuper o) { + options = o; + } + + public void createInstances(String file, Instances is) + // throws Exception + + { + + CONLLReader09 depReader = new CONLLReader09(file); + + mf.register(REL, "<root-type>"); + + // register at least one predicate since the parsing data might not + // contain predicates as in + // the Japaness corpus but the development sets contains some + + System.out.print("Registering feature parts of sentence: "); + int ic = 0; + int del = 0; + while (true) { + SentenceData09 instance = depReader.getNext(); + if (instance == null) + break; + ic++; + + if (ic % 1000 == 0) { + del = outValue(ic, del); + } + + String[] labs1 = instance.labels; + for (String element : labs1) + mf.register(REL, element); + + String[] w = instance.forms; + for (String element : w) + mf.register(WORD, depReader.normalize(element)); + + w = instance.plemmas; + for (String element : w) + mf.register(WORD, depReader.normalize(element)); + + w = instance.ppos; + for (String element : w) + mf.register(POS, element); + + w = instance.gpos; + for (String element : w) + mf.register(POS, element); + + if (instance.feats != null) { + String fs[][] = instance.feats; + for (String[] element : fs) { + w = element; + if (w == null) + continue; + for (String element2 : w) + mf.register(FEAT, element2); + } + } + + if ((ic - 1) > options.count) + break; + } + del = outValue(ic, del); + + for (Extractor e : extractor) { + e.setMaxForm(mf.getFeatureCounter().get(WORD)); + } + + if (options.clusterFile == null) + cl = new Cluster(); + else + cl = new Cluster(options.clusterFile, mf, 6); + + mf.calculateBits(); + + System.out.println("" + mf.toString()); + + for (Extractor e : extractor) { + e.initStat(); + e.init(); + } + + depReader.startReading(file); + + int num1 = 0; + + Edges.init(mf.getFeatureCounter().get(POS)); + + System.out.print("Creating edge filters and read corpus: "); + del = 0; + + is.init(ic, new MFB()); + + while (true) { + if (num1 % 100 == 0) + del = outValue(num1, del); + + SentenceData09 instance1 = depReader.getNext(is); + + if (instance1 == null) + break; + + int last = is.size() - 1; + short[] pos = is.pposs[last]; + + for (int k = 0; k < is.length(last); k++) { + if (is.heads[last][k] < 0) + continue; + Edges.put(pos[is.heads[last][k]], pos[k], k < is.heads[last][k], is.labels[last][k]); + } + + if (!options.allFeatures && num1 > options.count) + break; + + num1++; + + } + del = outValue(num1, del); + System.out.println(); + Edges.findDefault(); + } + + public void getInstances(String file, Instances is) { + CONLLReader09 depReader = new CONLLReader09(file); + + int ic = options.count + 2; + + is.init(ic, new MFB()); + + int num1 = 0, del = 0; + while (true) { + if (num1 % 100 == 0) + del = outValue(num1, del); + + SentenceData09 instance1 = depReader.getNext(is); + + if (instance1 == null) + break; + + if (!options.allFeatures && num1 > options.count) + break; + + num1++; + + } + del = outValue(num1, del); + System.out.println(); + + } + + /** + * Creates an instance for outputParses + * + * @param is + * @return + * @throws IOException + */ + protected final SentenceData09 nextInstance(Instances is, CONLLReader09 depReader) throws Exception { + + SentenceData09 instance = depReader.getNext(is); + if (instance == null || instance.forms == null) + return null; + + return instance; + } + + public static ExecutorService executerService = java.util.concurrent.Executors.newFixedThreadPool(Parser.THREADS); + + public DataF fillVector(F2SF params, Instances is, int inst, DataF d, Cluster cluster, int threads, + Long2IntInterface li) throws InterruptedException { + + long ts = System.nanoTime(); + + if (executerService.isShutdown()) + executerService = java.util.concurrent.Executors.newCachedThreadPool(); + + final int length = is.length(inst); + if (d == null || d.len < length) + d = new DataF(length, mf.getFeatureCounter().get(PipeGen.REL).shortValue()); + + ArrayList<ParallelExtract> pe = new ArrayList<ParallelExtract>(); + + for (int i = 0; i < threads; i++) { + + // DB.println(""+((ExtractorClusterStackedR2)extractor[i]).s_dist); + pe.add(new ParallelExtract(extractor[i], is, inst, d, (F2SF) params.clone(), cluster, li)); + } + + for (int w1 = 0; w1 < length; w1++) { + for (int w2 = 0; w2 < length; w2++) { + if (w1 == w2) + continue; + ParallelExtract.add(w1, w2); + } + } + executerService.invokeAll(pe); + + timeExtract += (System.nanoTime() - ts); + + return d; + } + + /** + * the loss function + */ + public double errors(Instances is, int ic, Parse p) { + + if (p.heads == null) + p.signature2parse(p.signature()); + short[] act = is.heads[ic]; + double correct = 0; + + // do not count root + for (int i = 1; i < act.length; i++) { + if (p.heads[i] == act[i]) { + correct += 0.5; + if (p.labels[i] == is.labels[ic][i]) + correct += 0.5; + } + } + + double x = ((double) act.length - 1 - correct); + + // p.f1 = (double)correct / (double)(act.length-1); + + return x; + } +} diff --git a/dependencyParser/experimental/mate-tools/src/is2/parserR2/PipeReranker.java b/dependencyParser/experimental/mate-tools/src/is2/parserR2/PipeReranker.java new file mode 100644 index 0000000..622fe1c --- /dev/null +++ b/dependencyParser/experimental/mate-tools/src/is2/parserR2/PipeReranker.java @@ -0,0 +1,123 @@ +package is2.parserR2; + +import java.util.concurrent.ExecutorService; + +import extractors.ExtractorReranker; +import is2.data.Cluster; +import is2.data.Edges; +import is2.data.Instances; +import is2.data.MFB; +import is2.data.PipeGen; +import is2.data.SentenceData09; +import is2.io.CONLLReader09; +import is2.util.OptionsSuper; + +final public class PipeReranker extends PipeGen { + + public ExtractorReranker extractor; + final public MFB mf = new MFB(); + + Cluster cl; + + private OptionsSuper options; + public static long timeExtract; + + public PipeReranker(OptionsSuper o) { + options = o; + } + + public void createInstances(String file, Instances is) + // throws Exception + + { + + CONLLReader09 depReader = new CONLLReader09(file); + + mf.register(REL, "<root-type>"); + + // register at least one predicate since the parsing data might not + // contain predicates as in + // the Japaness corpus but the development sets contains some + + System.out.print("Registering feature parts of sentence: "); + int ic = 0; + int del = 0; + while (true) { + SentenceData09 instance = depReader.getNext(); + if (instance == null) + break; + ic++; + + if (ic % 1000 == 0) { + del = outValue(ic, del); + } + + String[] labs1 = instance.labels; + for (String element : labs1) + mf.register(REL, element); + + String[] w = instance.forms; + for (String element : w) + mf.register(WORD, depReader.normalize(element)); + + w = instance.plemmas; + for (String element : w) + mf.register(WORD, depReader.normalize(element)); + + w = instance.ppos; + for (String element : w) + mf.register(POS, element); + + w = instance.gpos; + for (String element : w) + mf.register(POS, element); + + if (instance.feats != null) { + String fs[][] = instance.feats; + for (String[] element : fs) { + w = element; + if (w == null) + continue; + for (String element2 : w) + mf.register(FEAT, element2); + } + } + + if ((ic - 1) > options.count) + break; + } + del = outValue(ic, del); + + System.out.println(); + ExtractorReranker.initFeatures(); + + ExtractorReranker.maxForm = mf.getFeatureCounter().get(WORD); + + if (options.clusterFile == null) + cl = new Cluster(); + else + cl = new Cluster(options.clusterFile, mf, 6); + + mf.calculateBits(); + ExtractorReranker.initStat(); + + System.out.println("" + mf.toString()); + + extractor.init(); + depReader.startReading(file); + + int num1 = 0; + + is.init(ic, new MFB()); + + Edges.init(mf.getFeatureCounter().get(POS)); + + del = 0; + + del = outValue(num1, del); + System.out.println(); + } + + public static ExecutorService executerService = java.util.concurrent.Executors.newFixedThreadPool(Parser.THREADS); + +} diff --git a/dependencyParser/experimental/mate-tools/src/is2/parserR2/Reranker.java b/dependencyParser/experimental/mate-tools/src/is2/parserR2/Reranker.java new file mode 100644 index 0000000..61650a0 --- /dev/null +++ b/dependencyParser/experimental/mate-tools/src/is2/parserR2/Reranker.java @@ -0,0 +1,991 @@ +package is2.parserR2; + +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.FileNotFoundException; +import java.io.FileOutputStream; +import java.io.IOException; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map.Entry; +import java.util.zip.ZipEntry; +import java.util.zip.ZipInputStream; +import java.util.zip.ZipOutputStream; + +import extractors.Extractor; +import extractors.ExtractorClusterStacked; +import extractors.ExtractorReranker; +import is2.data.Cluster; +import is2.data.DataF; +import is2.data.Edges; +import is2.data.F2SF; +import is2.data.FVR; +import is2.data.Instances; +import is2.data.Long2Int; +import is2.data.Long2IntInterface; +import is2.data.MFB; +import is2.data.Parse; +import is2.data.ParseNBest; +import is2.data.PipeGen; +import is2.data.SentenceData09; +import is2.io.CONLLReader09; +import is2.io.CONLLWriter09; +import is2.tools.Tool; +import is2.util.DB; +import is2.util.OptionsSuper; +import is2.util.ParserEvaluator; + +public class Reranker implements Tool { + + public static int THREADS = 4; + + Long2IntInterface l2i; + + // the parser models + ParametersFloat paramsParsers[]; + + // the re-ranker model + ParametersFloat parametersReranker; + PipeReranker pipeReranker; + Pipe pipe; + Options options; + + HashMap<Integer, Integer> rank = new HashMap<Integer, Integer>(); + int amongxbest = 0, amongxbest_ula = 0, nbest = 0, bestProj = 0, smallestErrorSum = 0, countAllNodes = 0; + static int NBest = 1000; + + /** + * Initialize the parser + * + * @param options + */ + public Reranker(Options options) { + + this.options = options; + + } + + /** + * @param modelFileName + * The file name of the parsing model + */ + public Reranker(String modelFileName) { + this(new Options(new String[] { "-model", modelFileName })); + } + + public Reranker() { + // TODO Auto-generated constructor stub + } + + public static void main(String[] args) throws Exception { + + long start = System.currentTimeMillis(); + Options options = new Options(args); + + NBest = options.best; + + DB.println("n-best " + NBest); + + Runtime runtime = Runtime.getRuntime(); + THREADS = runtime.availableProcessors(); + + if (options.cores < THREADS && options.cores > 0) + THREADS = options.cores; + + DB.println("Found " + runtime.availableProcessors() + " cores use " + THREADS); + + if (options.train) { + + Reranker p = new Reranker(); + p.options = options; + + p.l2i = new Long2Int(options.hsize); + p.pipeReranker = new PipeReranker(options); + p.pipeReranker.extractor = new ExtractorReranker(p.l2i); + + // initialize the parser + p.pipe = new Pipe(options); + + // read parsing models + p.paramsParsers = new ParametersFloat[options.end + 1]; + for (int m = 0; m <= options.end; m++) { + String name = options.prefix_model + m; + p.paramsParsers[m] = new ParametersFloat(0); + p.readModel(name, p.pipe, p.paramsParsers[m]); + } + + // set up the reranker + p.parametersReranker = new ParametersFloat(p.l2i.size()); + + Instances[] iss = new Instances[options.end + 1]; + + for (int m = 0; m <= options.end; m++) { + String name = options.prefix_test + m; + iss[m] = new Instances(); + DB.println("create instances of part " + name); + p.pipe.getInstances(name, iss[m]); + } + + ExtractorReranker.initFeatures(); + p.pipeReranker.extractor.init(); + + ExtractorReranker.initStat(); + + p.train(options, iss); + + p.writeModell(options, p.parametersReranker, null, p.pipe.cl); + } + + if (options.test) { + + Reranker p = new Reranker(); + p.options = options; + + // set up the reranker + p.l2i = new Long2Int(options.hsize); + p.pipeReranker = new PipeReranker(options); + p.pipeReranker.extractor = new ExtractorReranker(p.l2i); + p.parametersReranker = new ParametersFloat(p.l2i.size()); + + // initialize the parser + p.pipe = new Pipe(options); + + // read parsing models + p.paramsParsers = new ParametersFloat[options.end + 1]; + + String nbestName = "n-best+" + + options.testfile.substring(options.testfile.length() - 12, options.testfile.length() - 1); + File fnbest = new File(nbestName); + int read = fnbest.exists() ? 2 : 1; + + if (read != 2) + for (int m = 0; m <= options.end; m++) { + String name = options.prefix_model + m; + p.paramsParsers[m] = new ParametersFloat(0); + p.readModel(name, p.pipe, p.paramsParsers[m]); + } + + p.readModel(options.modelName, p.pipeReranker, p.parametersReranker); + + ExtractorReranker.initFeatures(); + ExtractorReranker.initStat(); + p.pipeReranker.extractor.init(); + + p.rerankedParses(options, p.pipe, p.parametersReranker, false, nbestName); + + } + + System.out.println(); + + if (options.eval) { + System.out.println("\nEVALUATION PERFORMANCE:"); + ParserEvaluator.evaluate(options.goldfile, options.outfile); + } + + long end = System.currentTimeMillis(); + System.out.println("used time " + ((float) ((end - start) / 100) / 10)); + + Decoder.executerService.shutdown(); + Pipe.executerService.shutdown(); + System.out.println("end."); + + } + + /** + * Read the models and mapping + * + * @param options + * @param pipe + * @param prm + * @throws IOException + */ + public void readModel(String modelName, Pipe pipe, Parameters prm) throws IOException { + + DB.println("Reading data started: " + modelName); + + // prepare zipped reader + ZipInputStream zis = new ZipInputStream(new BufferedInputStream(new FileInputStream(modelName))); + zis.getNextEntry(); + DataInputStream dis = new DataInputStream(new BufferedInputStream(zis)); + + pipe.mf.read(dis); + + pipe.cl = new Cluster(dis); + + prm.read(dis); + + Long2Int l2i = new Long2Int(prm.size()); + DB.println("li size " + l2i.size()); + + pipe.extractor = new ExtractorClusterStacked[THREADS]; + + for (int t = 0; t < THREADS; t++) + pipe.extractor[t] = new ExtractorClusterStacked(l2i); + + ExtractorClusterStacked.initFeatures(); + + for (int t = 0; t < THREADS; t++) { + pipe.extractor[t].initStat(); + pipe.extractor[t].init(); + } + + Edges.read(dis); + + options.decodeProjective = dis.readBoolean(); + + ExtractorClusterStacked.maxForm = dis.readInt(); + + boolean foundInfo = false; + try { + String info = null; + int icnt = dis.readInt(); + for (int i = 0; i < icnt; i++) { + info = dis.readUTF(); + System.out.println(info); + } + } catch (Exception e) { + if (!foundInfo) + System.out.println("no info about training"); + } + + dis.close(); + + DB.println("Reading data finnished"); + + Decoder.NON_PROJECTIVITY_THRESHOLD = (float) options.decodeTH; + + // ExtractorClusterStacked.initStat(); + + } + + /** + * Read the models and mapping + * + * @param options + * @param pipe + * @param params + * @throws IOException + */ + public void readModel(String modelName, PipeReranker pipe, Parameters params) throws IOException { + + DB.println("Reading data started: " + modelName); + + // prepare zipped reader + ZipInputStream zis = new ZipInputStream(new BufferedInputStream(new FileInputStream(modelName))); + zis.getNextEntry(); + DataInputStream dis = new DataInputStream(new BufferedInputStream(zis)); + + pipe.mf.read(dis); + + // DB.println("reranker model "+pipe.mf.toString()); + + pipe.cl = new Cluster(dis); + + params.read(dis); + this.l2i = new Long2Int(params.size()); + DB.println("li size " + l2i.size()); + + pipe.extractor = new ExtractorReranker(l2i); + + ExtractorReranker.initFeatures(); + ExtractorReranker.initStat(); + + pipe.extractor.init(); + + Edges.read(dis); + + options.decodeProjective = dis.readBoolean(); + + ExtractorClusterStacked.maxForm = dis.readInt(); + + boolean foundInfo = false; + try { + String info = null; + int icnt = dis.readInt(); + for (int i = 0; i < icnt; i++) { + info = dis.readUTF(); + System.out.println(info); + } + } catch (Exception e) { + if (!foundInfo) + System.out.println("no info about training"); + } + + dis.close(); + + DB.println("Reading data finnished"); + + Decoder.NON_PROJECTIVITY_THRESHOLD = (float) options.decodeTH; + + // ExtractorClusterStacked.initStat(); + + } + + /** + * Do the training + * + * @param instanceLengths + * @param options + * @param pipe + * @param parametersReranker + * @param is + * @param cluster + * @throws IOException + * @throws InterruptedException + * @throws ClassNotFoundException + */ + public void train(OptionsSuper options, Instances[] iss) + throws IOException, InterruptedException, ClassNotFoundException { + + int read = 0; // 0 compute -- 1 compute and write -- 2 read parses + + DB.println("Training Information "); + DB.println("-------------------- "); + + ExtractorReranker.initStat(); + pipeReranker.extractor.init(); + + for (Extractor e : this.pipe.extractor) { + e.init(); + } + + int numInstances = 0; + int maxLenInstances = 0; + // int maxLenSentence=1; + for (Instances is : iss) { + numInstances += is.size(); + for (int i = 0; i < is.size(); i++) + if (maxLenInstances < is.length(i)) + maxLenInstances = is.length(i); + } + + DataF data = new DataF(maxLenInstances, pipe.mf.getFeatureCounter().get(PipeGen.REL).shortValue()); + + int iter = 0; + int del = 0; + float error = 0; + float f1 = 0; + + double upd = (double) (options.count * options.numIters) + options.numIters * 10; + + // float[][] = new float[this.NBest][3]; + FVR act = new FVR(); + + FVR pred = new FVR(); + + FVR f = new FVR(); + long[] vs = new long[ExtractorReranker._FC * maxLenInstances]; + + for (; iter < options.numIters; iter++) { + + System.out.print("Iteration " + iter + ": "); + error = 0; + f1 = 0; + + float las = 0, cnt = 0, averageScore = 0; + + float firstBestTotalError = 0, totalError = 0; + + long start = System.currentTimeMillis(); + + long last = System.currentTimeMillis(); + + long rerankTime = 0; + + String nbest = "n-best"; + File fnbest = new File(nbest); + read = fnbest.exists() ? 2 : 1; + + DataInputStream dis = null; + DataOutputStream dos = null; + + if (read == 1) { + + DB.println("computing and writting nbest list to file: " + nbest); + + ZipOutputStream zos = new ZipOutputStream(new BufferedOutputStream(new FileOutputStream(nbest))); + zos.putNextEntry(new ZipEntry("data")); + dos = new DataOutputStream(new BufferedOutputStream(zos)); + } + + // start reading again + if (read == 2) { + + // DB.println("reading nbest list from file: "+nbest); + + ZipInputStream zis = new ZipInputStream(new BufferedInputStream(new FileInputStream(nbest))); + zis.getNextEntry(); + dis = new DataInputStream(new BufferedInputStream(zis)); + } + + HashMap<Integer, Integer> remapped = new HashMap<Integer, Integer>(); + + int round = 0, instance = 0, length = 0, count = 0, changes = 0; + for (Instances is : iss) { + + F2SF fparser = this.paramsParsers[instance].getFV(); + round++; + + // go over the sentences in the instance + for (int n = 0; n < is.size(); n++) { + count += 1; + length += is.length(n); + upd--; + + if (is.labels[n].length > options.maxLen) + continue; + + List<ParseNBest> parses = null; + + short pos[] = is.pposs[n]; + + // read or write nbest list + if (read == 0 || read == 1 && iter == 0) { + data = pipe.fillVector(fparser, is, n, data, pipe.cl, THREADS, l2i); + parses = Decoder.decode(pos, data, options.decodeProjective, pipe.extractor[0]); + + if (parses.size() > NBest) + parses = parses.subList(0, NBest); + + if (read == 1) { + // write the forest + dos.writeInt(parses.size()); + for (int k = 0; k < parses.size(); k++) { + dos.writeUTF(parses.get(k).signature()); + dos.writeFloat((float) parses.get(k).f1); + } + } + } else if (read == 2) { + parses = new ArrayList<ParseNBest>(); + int parseCount = dis.readInt(); + for (int k = 0; k < parseCount; k++) { + ParseNBest p = new ParseNBest(dis.readUTF(), dis.readFloat()); + if (parses.size() < NBest) + parses.add(p); + } + } + + int best = 0; + float bestScore = -100; + int goldBest = 0; + double goldError = Float.MAX_VALUE; + + long startReranking = System.currentTimeMillis(); + + // score the n-best parses + for (int k = 0; k < parses.size(); k++) { + + ParseNBest p = parses.get(k); + + pipeReranker.extractor.extractFeatures(is, n, p, parses.indexOf(p), vs, pipe.cl); + + int rank = 1 * ExtractorReranker.s_type; + + f.clear(); + + for (long element : vs) { + if (element == Integer.MIN_VALUE) + break; + if (element > 0) + f.add(pipeReranker.extractor.li.l2i(element + rank)); + } + + f.add(pipeReranker.extractor.li.l2i(1 + rank), (float) p.f1); + float score = (parametersReranker.getScore(f)); + if (score > bestScore) { // rankScore[k][2]> + bestScore = score; + best = k; + + } + } + + // get the best parse in the n-best list + for (int k = 0; k < parses.size(); k++) { + + if (parses.get(k).heads.length != is.length(n)) { + DB.println("error " + n + " " + parses.get(k).heads.length + " " + is.length(n)); + continue; + } + double errg = pipe.errors(is, n, parses.get(k)); + if (goldError > errg) { + goldError = errg; + goldBest = k; + } + } + + ParseNBest firstBest = parses.get(0); + ParseNBest predParse = parses.get(best); + ParseNBest goldBestParse = parses.get(goldBest); + + double e = pipe.errors(is, n, predParse); + + Integer ctb = remapped.get(best); + if (ctb == null) + remapped.put(best, 1); + else + remapped.put(best, ctb + 1); + + String info = " 1best-error " + ((length - firstBestTotalError) / length) + " reranked " + + ((length - totalError) / length) + " chd " + changes + " " + " ps las " + (las / cnt) + + " avs " + (averageScore / count) + " "; + + if ((n + 1) % 500 == 0) + del = PipeGen.outValueErr(count, Math.round(error * 1000) / 1000, f1 / count, del, last, upd, + info); + + firstBestTotalError += Decoder.getError(firstBest, is, n, Decoder.LAS); + + totalError += Decoder.getError(predParse, is, n, Decoder.LAS); + + rerankTime += System.currentTimeMillis() - startReranking; + + if (best != 0) { + changes++; + } + + las += is.length(n) - Decoder.getError(goldBestParse, is, n, Decoder.LAS); + cnt += is.length(n); + + averageScore += predParse.f1; + + if (options.count < count) + break; + + if (Decoder.getError(goldBestParse, is, n, Decoder.LAS) >= Decoder.getError(predParse, is, n, + Decoder.LAS)) + continue; + + // get predicted feature vector + pipeReranker.extractor.extractFeatures(is, n, predParse, parses.indexOf(predParse), vs, pipe.cl); + + pred.clear(); + int rank = 1 * ExtractorReranker.s_type; + + for (long element : vs) { + if (element == Integer.MIN_VALUE) + break; + if (element > 0) + pred.add(pipeReranker.extractor.li.l2i(element + rank)); + } + pred.add(pipeReranker.extractor.li.l2i(1 + rank), (float) predParse.f1); + error += 1; + + pipeReranker.extractor.extractFeatures(is, n, goldBestParse, parses.indexOf(goldBestParse), vs, + pipe.cl); + + act.clear(); + rank = 1 * ExtractorReranker.s_type; + for (long element : vs) { + if (element == Integer.MIN_VALUE) + break; + if (element > 0) + act.add(pipeReranker.extractor.li.l2i(element + rank)); + } + + act.add(pipeReranker.extractor.li.l2i(1 + rank), (float) goldBestParse.f1); + float lam_dist = parametersReranker.getScore(act) - (parametersReranker.getScore(pred)); + + parametersReranker.update(act, pred, is, n, null, upd, e, lam_dist); + + } + instance++; + + } + + String info = " td " + ((Decoder.timeDecotder) / 1000000F) + " tr " + ((Decoder.timeRearrange) / 1000000F) + + " te " + ((Pipe.timeExtract) / 1000000F) + " nz " + parametersReranker.countNZ() + " 1best-error " + + ((length - firstBestTotalError) / length) + " reranked-best " + ((length - totalError) / length) + + " rds " + round + " " + " rerank-t " + (rerankTime / count) + " chd " + changes + " " + + " ps las " + (las / cnt) + " avs " + (averageScore / count) + " "; + + // DB.println("remapped "+remapped); + + PipeGen.outValueErr(count, Math.round(error * 1000) / 1000, f1 / count, del, last, upd, info); + del = 0; + long end = System.currentTimeMillis(); + System.out.println(" time:" + (end - start)); + Decoder.timeDecotder = 0; + Decoder.timeRearrange = 0; + Pipe.timeExtract = 0; + + if (dos != null) + dos.close(); + if (dis != null) + dis.close(); + + } + DB.println("sb " + parametersReranker.parameters[this.pipeReranker.extractor.li + .l2i(4090378920L + 1 * ExtractorReranker.s_type)]);// 4090378266 + parametersReranker.average(iter * numInstances); + + } + + /** + * Do the parsing + * + * @param options + * @param pipe + * @param params + * @throws IOException + */ + private void rerankedParses(OptionsSuper options, Pipe pipe, ParametersFloat params, boolean maxInfo, + String nbestName) throws Exception { + + long start = System.currentTimeMillis(); + + ExtractorClusterStacked.initFeatures(); + + DataInputStream dis = null; + DataOutputStream dos = null; + + float olas = 0, olcnt = 0; + + File fnbest = new File(nbestName); + int read = fnbest.exists() ? 2 : 1; + if (read == 1) { + + DB.println("computing and writting nbest list to file: " + nbestName); + + ZipOutputStream zos = new ZipOutputStream(new BufferedOutputStream(new FileOutputStream(nbestName))); + zos.putNextEntry(new ZipEntry("data")); + dos = new DataOutputStream(new BufferedOutputStream(zos)); + } + + if (read == 2) { + + // DB.println("reading nbest list from file: "+nbestName); + + ZipInputStream zis = new ZipInputStream(new BufferedInputStream(new FileInputStream(nbestName))); + zis.getNextEntry(); + dis = new DataInputStream(new BufferedInputStream(zis)); + } + + for (ParametersFloat paramsParser : this.paramsParsers) { + + CONLLReader09 depReader = new CONLLReader09(options.testfile, options.formatTask); + CONLLWriter09 depWriter = new CONLLWriter09(options.outfile, options.formatTask); + + float las = 0, lcnt = 0, averageScore = 0; + int cnt = 0; + int del = 0; + + long last = System.currentTimeMillis(); + + String[] types = new String[pipe.mf.getFeatureCounter().get(PipeGen.REL)]; + for (Entry<String, Integer> e : MFB.getFeatureSet().get(PipeGen.REL).entrySet()) + types[e.getValue()] = e.getKey(); + + System.out.print("Processing Sentence: "); + + FVR f = new FVR(); + + while (true) { + + Instances is = new Instances(); + is.init(1, new MFB(), options.formatTask); + + SentenceData09 instance = pipe.nextInstance(is, depReader); + if (instance == null) + break; + cnt++; + + String[] forms = instance.forms; + + List<ParseNBest> parses = null; + + // read or write nbest list + if (read == 0 || read == 1) { + parses = this.parseNBest(instance, paramsParser); + // data = pipe.fillVector(fparser, is, n, data, + // pipe.cl,THREADS); + // parses = Decoder.decode(pos, data, + // options.decodeProjective); + + if (parses.size() > NBest) + parses = parses.subList(0, NBest); + + if (read == 1) { + // write the forest + dos.writeInt(parses.size()); + for (int k = 0; k < parses.size(); k++) { + dos.writeUTF(parses.get(k).signature()); + dos.writeFloat((float) parses.get(k).f1); + } + } + } else if (read == 2) { + parses = new ArrayList<ParseNBest>(); + int parseCount = dis.readInt(); + for (int k = 0; k < parseCount; k++) { + ParseNBest p = new ParseNBest(dis.readUTF(), dis.readFloat()); + if (parses.size() < NBest) + parses.add(p); + } + } + + nbest += parses.size(); + + // List<ParseNBest> parses = this.parseNBest(instance, + // this.paramsParsers[m]); + + long vs[] = new long[ExtractorReranker._FC * is.length(0)]; + + float bestScore = 0; + int best = 0; + + for (int k = 0; k < parses.size(); k++) { + + ParseNBest p = parses.get(k); + + pipeReranker.extractor.extractFeatures(is, 0, p, k, vs, pipeReranker.cl); + + int rank = 1 * ExtractorReranker.s_type; + f.clear(); + for (long element : vs) { + if (element == Integer.MIN_VALUE) + break; + if (element > 0) + f.add(pipeReranker.extractor.li.l2i(element + rank)); + } + f.add(pipeReranker.extractor.li.l2i(1 + rank), (float) p.f1); + + float score = (parametersReranker.getScore(f)); + if (score > bestScore) { // rankScore[k][2]> + bestScore = score; + best = k; + + } + } + // change to best + ParseNBest d = parses.get(best); + + las += (is.length(0) - 1) - Decoder.getError(d, is, 0, Decoder.LAS); + lcnt += is.length(0) - 1; + + averageScore += d.f1; + + SentenceData09 i09 = new SentenceData09(instance); + + i09.createSemantic(instance); + + for (int j = 0; j < forms.length - 1; j++) { + i09.plabels[j] = types[d.labels[j + 1]]; + i09.pheads[j] = d.heads[j + 1]; + } + + depWriter.write(i09); + String info = "" + (averageScore / cnt) + " "; + + if (cnt % 10 == 0) + del = PipeGen.outValueErr(cnt, lcnt - las, las / lcnt, del, last, 0, info);// outValue(cnt, + // del,last, + // info); + + } + + // pipe.close(); + + depWriter.finishWriting(); + long end = System.currentTimeMillis(); + DB.println("rank\n" + rank + "\n"); + DB.println("x-best-las " + amongxbest + " x-best-ula " + amongxbest_ula + " cnt " + cnt + " x-best-las " + + ((float) amongxbest / cnt) + " x-best-ula " + ((float) amongxbest_ula / cnt) + " nbest " + + ((float) nbest / cnt) + " 1best " + ((float) (rank.get(0) == null ? 0 : rank.get(0)) / cnt) + + " best-proj " + ((float) bestProj / cnt) + " Sum LAS " + + ((float) this.smallestErrorSum / countAllNodes) + " " + "" + (las / lcnt)); + + // DB.println("errors "+error); + olas += las; + olcnt += lcnt; + rank.clear(); + amongxbest = 0; + amongxbest_ula = 0; + cnt = 0; + nbest = 0; + bestProj = 0; + if (maxInfo) + System.out.println("Used time " + (end - start)); + if (maxInfo) + System.out.println("forms count " + Instances.m_count + " unkown " + Instances.m_unkown); + } + + if (dos != null) { + dos.flush(); + dos.close(); + } + if (dis != null) + dis.close(); + + DB.println("\n overall las " + (olas / olcnt)); + } + + public SentenceData09 parse(SentenceData09 instance, ParametersFloat params) { + + String[] types = new String[pipe.mf.getFeatureCounter().get(PipeGen.REL)]; + for (Entry<String, Integer> e : MFB.getFeatureSet().get(PipeGen.REL).entrySet()) + types[e.getValue()] = e.getKey(); + + Instances is = new Instances(); + is.init(1, new MFB(), options.formatTask); + new CONLLReader09().insert(is, instance); + + String[] forms = instance.forms; + + // use for the training ppos + DataF d2; + try { + d2 = pipe.fillVector(params.getFV(), is, 0, null, pipe.cl, THREADS, l2i);// cnt-1 + } catch (Exception e) { + e.printStackTrace(); + return null; + } + short[] pos = is.pposs[0]; + + List<ParseNBest> parses = null; + Parse d = null; + try { + parses = Decoder.decode(pos, d2, options.decodeProjective, pipe.extractor[0]); // cnt-1 + d = parses.get(0); + } catch (Exception e) { + e.printStackTrace(); + } + + if (parses.size() > NBest) + parses = parses.subList(0, NBest); + + int g_las = Decoder.getGoldRank(parses, is, 0, Decoder.LAS); + int g_ula = Decoder.getGoldRank(parses, is, 0, !Decoder.LAS); + + int smallest = Decoder.getSmallestError(parses, is, 0, !Decoder.LAS); + smallestErrorSum += is.length(0) - smallest; + countAllNodes += is.length(0); + + if (g_las >= 0) + amongxbest++; + if (g_ula >= 0) + amongxbest_ula++; + + nbest += parses.size(); + + Integer r = rank.get(g_las); + if (r == null) + rank.put(g_las, 1); + else + rank.put(g_las, r + 1); + + this.pipe.errors(is, 0, d); + + float errBestProj = (float) this.pipe.errors(is, 0, Decoder.bestProj); + + if (errBestProj == 0) + bestProj++; + + SentenceData09 i09 = new SentenceData09(instance); + + i09.createSemantic(instance); + + for (int j = 0; j < forms.length - 1; j++) { + i09.plabels[j] = types[d.labels[j + 1]]; + i09.pheads[j] = d.heads[j + 1]; + } + return i09; + + } + + public List<ParseNBest> parseNBest(SentenceData09 instance, ParametersFloat params) { + + Instances is = new Instances(); + is.init(1, new MFB(), options.formatTask); + new CONLLReader09().insert(is, instance); + + // use for the training ppos + DataF d2; + try { + d2 = pipe.fillVector(params.getFV(), is, 0, null, pipe.cl, THREADS, l2i);// cnt-1 + } catch (Exception e) { + e.printStackTrace(); + return null; + } + short[] pos = is.pposs[0]; + + List<ParseNBest> parses = null; + try { + parses = Decoder.decode(pos, d2, options.decodeProjective, pipe.extractor[0]); // cnt-1 + } catch (Exception e) { + e.printStackTrace(); + } + + if (parses.size() > NBest) + parses = parses.subList(0, NBest); + + return parses; + + } + + /* + * (non-Javadoc) + * + * @see is2.tools.Tool#apply(is2.data.SentenceData09) + */ + @Override + public SentenceData09 apply(SentenceData09 snt09) { + + try { + parse(snt09, this.parametersReranker); + } catch (Exception e) { + e.printStackTrace(); + } + + Decoder.executerService.shutdown(); + Pipe.executerService.shutdown(); + + return snt09; + } + + /** + * Write the parsing model + * + * @param options + * @param params + * @param extension + * @throws FileNotFoundException + * @throws IOException + */ + private void writeModell(OptionsSuper options, ParametersFloat params, String extension, Cluster cs) + throws FileNotFoundException, IOException { + + String name = extension == null ? options.modelName : options.modelName + extension; + DB.println("Writting model: " + name); + ZipOutputStream zos = new ZipOutputStream(new BufferedOutputStream(new FileOutputStream(name))); + zos.putNextEntry(new ZipEntry("data")); + DataOutputStream dos = new DataOutputStream(new BufferedOutputStream(zos)); + + MFB.writeData(dos); + cs.write(dos); + + params.write(dos); + + Edges.write(dos); + + dos.writeBoolean(options.decodeProjective); + + dos.writeInt(ExtractorClusterStacked.maxForm); + + dos.writeInt(5); // Info count + dos.writeUTF("Used parser " + Reranker.class.toString()); + dos.writeUTF("Creation date " + (new SimpleDateFormat("yyyy.MM.dd HH:mm:ss")).format(new Date())); + dos.writeUTF("Training data " + options.trainfile); + dos.writeUTF("Iterations " + options.numIters + " Used sentences " + options.count); + dos.writeUTF("Cluster " + options.clusterFile); + + dos.flush(); + dos.close(); + } + +} diff --git a/dependencyParser/experimental/mate-tools/src/is2/parserR2/package.html b/dependencyParser/experimental/mate-tools/src/is2/parserR2/package.html new file mode 100755 index 0000000..6b06482 --- /dev/null +++ b/dependencyParser/experimental/mate-tools/src/is2/parserR2/package.html @@ -0,0 +1,3 @@ +Package info + - n-best parser +<br> \ No newline at end of file diff --git a/dependencyParser/experimental/mate-tools/src/is2/tag/ExtractorT2.java b/dependencyParser/experimental/mate-tools/src/is2/tag/ExtractorT2.java new file mode 100644 index 0000000..688dc21 --- /dev/null +++ b/dependencyParser/experimental/mate-tools/src/is2/tag/ExtractorT2.java @@ -0,0 +1,766 @@ +package is2.tag; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Map.Entry; + +import is2.data.Cluster; +import is2.data.F2SF; +import is2.data.Instances; +import is2.data.InstancesTagger; +import is2.data.Long2IntInterface; +import is2.data.ParametersFloat; +import is2.data.PipeGen; +import is2.data.SentenceData09; +import is2.io.CONLLReader09; +import is2.tools.IPipe; +import is2.util.OptionsSuper; + +final public class ExtractorT2 extends PipeGen implements IPipe { + + final static int _MAX = 71; + + private static final String STWRD = "STWRD", STPOS = "STPOS"; + + private static short s_pos, s_word, s_char; + protected static short s_type; + private static int _strp; + static int _CEND; + + public String[] types; + + final public MFO mf; + + final MFO.Data4 d1 = new MFO.Data4(), d2 = new MFO.Data4(), d3 = new MFO.Data4(), dw = new MFO.Data4(), + dwp = new MFO.Data4(); + + Cluster cl; + + private OptionsSuper options; + + public ExtractorT2(OptionsSuper options, MFO mf) throws IOException { + this.mf = mf; + this.options = options; + } + + public HashMap<Integer, int[]> _pps = new HashMap<Integer, int[]>(); + + private Lexicon lx; + + public int corpusWrds = 0; + + /* + * (non-Javadoc) + * + * @see is2.tag5.IPipe#createInstances(java.lang.String, java.io.File, + * is2.data.InstancesTagger) + */ + @Override + public Instances createInstances(String file) { + return createInstances(file, -1, -1); + } + + public Instances createInstances(String file, int skipStart, int skipEnd) { + + InstancesTagger is = new InstancesTagger(); + + CONLLReader09 depReader = new CONLLReader09(CONLLReader09.NO_NORMALIZE); + + depReader.startReading(file); + mf.register(POS, "<root-POS>"); + mf.register(WORD, "<root>"); + + System.out.println("Registering feature parts "); + + HashMap<Integer, HashSet<Integer>> pps = new HashMap<Integer, HashSet<Integer>>(); + + int ic = 0; + while (true) { + + SentenceData09 instance1 = depReader.getNext(); + + if (instance1 == null) + break; + ic++; + + String[] w = instance1.forms; + for (String element : w) + mf.register(WORD, element); + for (String element : w) + registerChars(CHAR, element); + for (String element : w) + registerChars(CHAR, element.toLowerCase()); + + w = instance1.plemmas; + for (String element : w) + mf.register(WORD, element); + for (String element : w) + registerChars(CHAR, element); + + w = instance1.gpos; + for (String element : w) { + mf.register(POS, element); + } + for (int i1 = 0; i1 < w.length; i1++) { + HashSet<Integer> ps = pps.get(mf.getValue(POS, w[i1])); + if (ps == null) { + ps = new HashSet<Integer>(); + pps.put(mf.getValue(POS, w[i1]), ps); + } + if (i1 + 1 < w.length) + ps.add(mf.getValue(POS, w[i1 + 1])); + } + + } + + for (Entry<Integer, HashSet<Integer>> e : pps.entrySet()) { + int[] ps = new int[e.getValue().size()]; + int j = 0; + for (int k : e.getValue().toArray(new Integer[0])) { + ps[j++] = k; + } + _pps.put(e.getKey(), ps); + // System.out.println("put "+e.getKey()+" "+ps.length+" pps size + // "+_pps.size()); + } + + System.out.println("words in corpus " + (corpusWrds = mf.getFeatureCounter().get(PipeGen.WORD))); + if (options.clusterFile == null) + cl = new Cluster(); + else + cl = new Cluster(options.clusterFile, mf, 6); + + if (options.lexicon == null) + lx = new Lexicon(new byte[0][0]); + else + lx = new Lexicon(options.lexicon, mf); + + initFeatures(); + + mf.calculateBits(); + initValues(); + + System.out.println("" + mf.toString()); + + depReader.startReading(file); + + int num1 = 0; + + int instanceCount = 0; + + System.out.print("Creating Instances: "); + + is.init(ic, mf); + int del = 0; + + while (true) { + if (num1 % 100 == 0) + del = outValue(num1, del); + + if (num1 >= skipStart && num1 < skipEnd && skipStart >= 0) { + SentenceData09 instance1 = depReader.getNext(); + if (instance1 == null) + break; + num1++; + continue; + } + + SentenceData09 instance1 = depReader.getNext(is); + if (instance1 == null) + break; + + is.fillChars(instance1, instanceCount, _CEND); + for (int k = 0; k < instance1.length(); k++) { + if (instance1.ppos[k].contains("\\|")) + + is.pposs[num1][k] = (short) mf.getValue(FM, instance1.ppos[k].split("\\|")[1]); + } + + if (num1 > options.count) + break; + + num1++; + instanceCount++; + } + outValue(num1, del); + System.out.println(); + + types = MFO.reverse(mf.getFeatureSet().get(POS)); + return is; + } + + private void registerChars(String type, String word) { + for (int i = 0; i < word.length(); i++) + mf.register(type, Character.toString(word.charAt(i))); + } + + /* + * (non-Javadoc) + * + * @see is2.tag5.IPipe#initValues() + */ + @Override + public void initValues() { + s_pos = mf.getFeatureBits(POS); + s_word = mf.getFeatureBits(WORD); + s_type = mf.getFeatureBits(TYPE); + s_char = mf.getFeatureBits(CHAR); + + d1.a0 = s_type; + d1.a1 = s_pos; + d1.a2 = s_word; + d1.a3 = s_word; + d2.a0 = s_type; + d2.a1 = s_pos; + d2.a2 = s_pos; + d2.a3 = s_pos; + d2.a4 = s_pos; + d2.a5 = s_pos; + d2.a6 = s_pos; + d3.a0 = s_type; + d3.a1 = s_pos; + d3.a2 = s_char; + d3.a3 = s_char; + d3.a4 = s_char; + d3.a5 = s_char; + d3.a6 = s_char; + d3.a7 = s_char; + dw.a0 = s_type; + dw.a1 = s_pos; + dw.a2 = s_word; + dw.a3 = s_word; + dw.a4 = s_word; + dw.a5 = s_word; + dw.a6 = s_word; + dw.a7 = s_word; + dwp.a0 = s_type; + dwp.a1 = s_pos; + dwp.a2 = s_word; + dwp.a3 = s_pos; + dwp.a4 = s_word; + + } + + /* + * (non-Javadoc) + * + * @see is2.tag5.IPipe#initFeatures() + */ + @Override + public void initFeatures() { + // 62 + for (int t = 0; t < 67; t++) + mf.register(TYPE, "F" + t); + + mf.register(POS, MID); + _strp = mf.register(POS, STR); + mf.register(POS, END); + + mf.register(WORD, STR); + mf.register(WORD, END); + + _CEND = mf.register(CHAR, END); + + mf.register(WORD, STWRD); + mf.register(POS, STPOS); + + } + + final public void addFeatures(InstancesTagger is, int ic, String fs, int i, short pposs[], int[] forms, + int[] lemmas, long[] vs) { + + int c0 = is.chars[ic][i][0], c1 = is.chars[ic][i][1], c2 = is.chars[ic][i][2], c3 = is.chars[ic][i][3], + c4 = is.chars[ic][i][4], c5 = is.chars[ic][i][5]; + int e0 = is.chars[ic][i][6], e1 = is.chars[ic][i][7], e2 = is.chars[ic][i][8], e3 = is.chars[ic][i][9], + e4 = is.chars[ic][i][10]; + + int f = 1, n = 0; + short upper = 0, number = 1; + for (int k1 = 0; k1 < fs.length(); k1++) { + char c = fs.charAt(k1); + if (Character.isUpperCase(c)) { + if (k1 == 0) + upper = 1; + else { + // first char + another + if (upper == 1) + upper = 3; + // another uppercase in the word + else if (upper == 0) + upper = 2; + } + } + + // first + if (Character.isDigit(c) && k1 == 0) + number = 2; + else if (Character.isDigit(c) && number == 1) + number = 3; + // if(number==2 &&Character.isDigit(c)) number=4; + // if(number==4 && !Character.isDigit(c)) number=5; + } + + // if (i==0 && upper>0) upper+=4; + int form = forms[i], form2 = forms[i] < corpusWrds ? forms[i] : -1; + + int len = forms.length; + long l; + d1.v0 = f++; + d1.v2 = form2; + l = mf.calc3(d1); + vs[n++] = mf.calc3(d1); + + d1.v0 = f++; + d1.v2 = is.formlc[ic][i]; + vs[n++] = mf.calc3(d1); + + d3.v2 = c0; + d3.v3 = c1; + d3.v4 = c2; + d3.v5 = c3; + d3.v6 = c4; + d3.v0 = f++; + vs[n++] = mf.calc3(d3); + d3.v0 = f++; + vs[n++] = mf.calc4(d3); + d3.v0 = f++; + vs[n++] = mf.calc5(d3); + d3.v0 = f++; + vs[n++] = mf.calc6(d3); + d3.v0 = f++; + vs[n++] = mf.calc7(d3); + + if (form != -1) { + d3.v2 = c2; + d3.v3 = c3; + d3.v4 = c4; + d3.v5 = c5; + d3.v6 = cl.getLP(form); + d3.v0 = f; + vs[n++] = mf.calc6(d3); + d3.v0 = f + 1; + vs[n++] = mf.calc7(d3); + } + f += 2; + + if (form > 0) { + d3.v0 = f; + d3.v5 = cl.getLP(form); + vs[n++] = mf.calc6(d3); + d3.v0 = f + 1; + d3.v4 = cl.getLP(form); + vs[n++] = mf.calc5(d3); + d3.v0 = f + 2; + d3.v3 = cl.getLP(form); + vs[n++] = mf.calc4(d3); + } + f += 5; + + d3.v2 = e0; + d3.v3 = e1; + d3.v4 = e2; + d3.v5 = e3; + d3.v6 = e4; + d3.v0 = f++; + vs[n++] = mf.calc3(d3); + d3.v0 = f++; + vs[n++] = l = mf.calc4(d3); + vs[n++] = d3.calcs(3, upper, l); + d3.v0 = f++; + vs[n++] = l = mf.calc5(d3); + vs[n++] = d3.calcs(3, upper, l); + d3.v0 = f++; + vs[n++] = l = mf.calc6(d3); + vs[n++] = d3.calcs(3, upper, l); + d3.v0 = f++; + vs[n++] = l = mf.calc7(d3); + vs[n++] = d3.calcs(3, upper, l); + + if (form > 0) { + d3.v0 = f; + d3.v5 = cl.getLP(form); + vs[n++] = mf.calc6(d3); + d3.v0 = f + 1; + d3.v4 = cl.getLP(form); + vs[n++] = mf.calc5(d3); + d3.v0 = f + 2; + d3.v3 = cl.getLP(form); + vs[n++] = mf.calc4(d3); + + d3.v2 = e0; + d3.v3 = e1; + d3.v4 = e2; + + d3.v0 = f + 3; + d3.v2 = lx.getTag(form); + vs[n++] = mf.calc3(d3); + d3.v0 = f + 4; + d3.v4 = cl.getLP(form); + vs[n++] = mf.calc5(d3); + d3.v0 = f + 5; + d3.v3 = cl.getLP(form); + vs[n++] = mf.calc4(d3); + } + f += 6; + + // sign three-grams + d3.v0 = f++; + d3.v2 = c1; + d3.v3 = c2; + d3.v4 = c3; + vs[n++] = mf.calc5(d3); + d3.v0 = f++; + d3.v2 = c2; + d3.v3 = c3; + d3.v4 = c4; + vs[n++] = mf.calc5(d3); + d3.v0 = f++; + d3.v2 = c3; + d3.v3 = c4; + d3.v4 = c5; + vs[n++] = mf.calc5(d3); + + // sign quad-grams + d3.v0 = f++; + d3.v2 = c1; + d3.v3 = c2; + d3.v4 = c3; + d3.v5 = c4; + vs[n++] = mf.calc6(d3); + d3.v0 = f++; + d3.v2 = c2; + d3.v3 = c3; + d3.v4 = c4; + d3.v5 = c5; + vs[n++] = mf.calc6(d3); // changed to 6 + + if (i + 1 < len && forms[i + 1] < this.corpusWrds) { + dw.v0 = f; + dw.v2 = forms[i + 1]; + dw.v3 = form2; + vs[n++] = mf.calc4(dw); + } + f++; + + if (len > i + 1) { + + if (forms[i + 1] < corpusWrds) { + dw.v0 = f; + dw.v2 = forms[i + 1]; + vs[n++] = mf.calc3(dw); + } + + d3.v0 = f + 1; + d3.v2 = is.chars[ic][i + 1][0]; + vs[n++] = mf.calc3(d3); + d3.v0 = f + 2; + d3.v2 = is.chars[ic][i + 1][6]; + vs[n++] = mf.calc3(d3); + + d3.v2 = e0; + d3.v3 = e1; + + d3.v0 = f + 3; + d3.v4 = is.chars[ic][i + 1][0]; + vs[n++] = mf.calc5(d3); + d3.v0 = f + 4; + d3.v4 = is.chars[ic][i + 1][6]; + vs[n++] = mf.calc5(d3); + + if (is.chars[ic][i + 1][11] > 1) { // instance.forms[i+1].length() + + d3.v0 = f + 5; + d3.v2 = is.chars[ic][i + 1][0]; + d3.v3 = is.chars[ic][i + 1][1]; + vs[n++] = mf.calc4(d3); + d3.v0 = f + 6; + d3.v2 = is.chars[ic][i + 1][6]; + d3.v3 = is.chars[ic][i + 1][7]; + vs[n++] = mf.calc4(d3); + + d3.v2 = e0; + d3.v3 = e1; + + d3.v0 = f + 7; + d3.v4 = is.chars[ic][i + 1][0]; + d3.v5 = is.chars[ic][i + 1][1]; + vs[n++] = mf.calc6(d3); + d3.v0 = f + 8; + d3.v4 = is.chars[ic][i + 1][6]; + d3.v5 = is.chars[ic][i + 1][7]; + vs[n++] = mf.calc6(d3); + + if (forms[i + 1] > 0) { + d3.v0 = f + 9; + d3.v2 = is.chars[ic][i + 1][0]; + d3.v3 = is.chars[ic][i + 1][1]; + d3.v4 = cl.getLP(forms[i + 1]); + vs[n++] = mf.calc5(d3); + d3.v0 = f + 10; + d3.v2 = is.chars[ic][i + 1][6]; + d3.v3 = is.chars[ic][i + 1][7]; + d3.v4 = cl.getLP(forms[i + 1]); + vs[n++] = mf.calc5(d3); + } + } + + if (forms[i + 1] > 0) { + + dw.v0 = f + 11; + dw.v2 = cl.getLP(forms[i + 1]); + dw.v3 = form2; + vs[n++] = mf.calc4(dw); + + // if (forms[i]>0){ + // dw.v0=f+12; dw.v2= cl.getLP(forms[i+1]); + // dw.v3=lx.getTag(form);vs[n++]=mf.calc4(dw); + // dw.v0=f+13; dw.v2= cl.getLP(forms[i]); + // dw.v3=lx.getTag(forms[i+1]);vs[n++]=mf.calc4(dw); + // } + } + + if (len > i + 2) { + if (forms[i + 2] < corpusWrds && forms[i + 1] < corpusWrds) { + dw.v0 = f + 12; + dw.v2 = forms[i + 2]; + dw.v3 = forms[i + 1]; + vs[n++] = mf.calc4(dw); + vs[n++] = mf.calc3(dw); + } + d2.v0 = f + 13; + d2.v2 = pposs[i + 1]; + d2.v3 = pposs[i + 2]; + vs[n++] = mf.calc4(d2); + } + + if (len > i + 3) { + if (forms[i + 3] < this.corpusWrds && forms[i + 2] < this.corpusWrds) { + dw.v0 = f + 14; + dw.v2 = forms[i + 3]; + dw.v3 = forms[i + 2]; + vs[n++] = mf.calc4(dw); + vs[n++] = mf.calc3(dw); + } + } + } + f += 15; + + // length + d2.v0 = f++; + d2.v2 = is.chars[ic][i][11]; + vs[n++] = mf.calc3(d2); + + // contains a number + d2.v0 = f++; + d2.v2 = number; + vs[n++] = mf.calc3(d2); + if (lemmas[i] < corpusWrds) { + d1.v0 = f; + d1.v2 = lemmas[i]; + vs[n++] = mf.calc3(d1); + } + f++; + + if (i != 0 && len > i + 1) { + + if (lemmas[i - 1] < corpusWrds && lemmas[i + 1] < corpusWrds) { + dw.v0 = f; + dw.v2 = lemmas[i - 1]; + dw.v3 = lemmas[i + 1]; + vs[n++] = mf.calc4(dw); + } + + d2.v0 = f + 1; + d2.v2 = pposs[i - 1]; + d2.v3 = pposs[i + 1]; + vs[n++] = mf.calc4(d2); + } + f += 2; + + d2.v0 = f++; + d2.v2 = i >= 1 ? pposs[i - 1] : _strp; + vs[n++] = mf.calc3(d2); + + if (i > 0) { + + dw.v0 = f; + dw.v2 = i >= 1 ? forms[i - 1] < corpusWrds ? forms[i - 1] : -1 : _strp; + vs[n++] = mf.calc3(dw); + f++; + + if (lemmas[i - 1] < corpusWrds) { + dw.v0 = f; + dw.v2 = i >= 1 ? lemmas[i - 1] : _strp; + vs[n++] = mf.calc3(dw); + } + f++; + + // if (len>i+1) {d2.v0=f; d2.v2= pposs[i-1];d2.v3= pposs[i+1]; + // vs[n++]=mf.calc4(d2);} + // f++; + + if (i > 1) { + + d2.v0 = f++; + d2.v2 = i < 2 ? _strp : pposs[i - 2]; + vs[n++] = mf.calc3(d2); + d2.v0 = f++; + d2.v2 = pposs[i - 1]; + d2.v3 = pposs[i - 2]; + vs[n++] = mf.calc4(d2); + + if (forms[i - 2] < corpusWrds) { + dw.v0 = f; + dw.v2 = forms[i - 2]; + vs[n++] = mf.calc3(dw); + } + f++; + if (forms[i - 1] < corpusWrds) { + dwp.v0 = f; + dwp.v2 = forms[i - 1]; + dwp.v3 = pposs[i - 2]; + vs[n++] = mf.calc4(dwp); + } + f++; + if (forms[i - 2] < corpusWrds) { + dwp.v0 = f; + dwp.v2 = forms[i - 2]; + dwp.v3 = pposs[i - 1]; + vs[n++] = mf.calc4(dwp); + } + f++; + + if (i > 2) { + d2.v0 = f++; + d2.v2 = pposs[i - 3]; + vs[n++] = mf.calc3(d2); + d2.v0 = f++; + d2.v2 = pposs[i - 2]; + d2.v3 = pposs[i - 3]; + vs[n++] = mf.calc4(d2); + if (forms[i - 3] < this.corpusWrds && forms[i - 2] < this.corpusWrds) { + dw.v0 = f; + dw.v2 = forms[i - 3]; + dw.v3 = forms[i - 2]; + vs[n++] = mf.calc4(dw); + } + f++; + } + } + } + vs[n] = Integer.MIN_VALUE; + } + + public int fillFeatureVectorsOne(String fs, ParametersFloat params, int w1, InstancesTagger is, int n, short[] pos, + Long2IntInterface li, float[] score) { + + float best = -1000; + int bestType = -1; + + F2SF f = new F2SF(params.parameters); + + long vs[] = new long[_MAX]; + int lemmas[]; + if (options.noLemmas) + lemmas = new int[is.length(n)]; + else + lemmas = is.plemmas[n]; + addFeatures(is, n, fs, w1, pos, is.forms[n], lemmas, vs); + + // for(int t = 0; t < types.length; t++) { + + for (int t = 0; t < types.length; t++) { + + int p = t << s_type; + + f.clear(); + for (int k = 0; vs[k] != Integer.MIN_VALUE; k++) + if (vs[k] > 0) + f.add(li.l2i(vs[k] + p)); + if (f.score > best) { + bestType = t; + score[w1] = best = f.score; + } + } + return bestType; + + } + + public ArrayList<POS> classify(String fs, ParametersFloat params, int w1, InstancesTagger is, int n, short[] pos, + Long2IntInterface li) { + + F2SF f = new F2SF(params.parameters); + + long vs[] = new long[_MAX]; + int lemmas[]; + if (options.noLemmas) + lemmas = new int[is.length(n)]; + else + lemmas = is.plemmas[n]; + addFeatures(is, n, fs, w1, pos, is.forms[n], lemmas, vs); + + ArrayList<POS> best = new ArrayList<POS>(types.length); + + for (int t = 0; t < types.length; t++) { + + int p = t << s_type; + + f.clear(); + f.add(vs, li, p); + POS px = new POS(t, f.score); + best.add(px); + } + Collections.sort(best); + return best; + + } + + /* + * (non-Javadoc) + * + * @see is2.tag5.IPipe#write(java.io.DataOutputStream) + */ + @Override + public void write(DataOutputStream dos) { + try { + this.cl.write(dos); + this.lx.write(dos); + dos.writeInt(this.corpusWrds); + dos.writeInt(_pps.size()); + + for (Entry<Integer, int[]> e : _pps.entrySet()) { + dos.writeInt(e.getValue().length); + for (int k : e.getValue()) + dos.writeInt(k); + dos.writeInt(e.getKey()); + } + } catch (IOException e) { + e.printStackTrace(); + } + } + + public void read(DataInputStream dis) { + try { + this.cl = new Cluster(dis); + this.lx = new Lexicon(dis); + this.corpusWrds = dis.readInt(); + + int pc = dis.readInt(); + for (int j = 0; j < pc; j++) { + int ps[] = new int[dis.readInt()]; + for (int k = 0; k < ps.length; k++) + ps[k] = dis.readInt(); + _pps.put(dis.readInt(), ps); + } + // System.out.println("_pps "+ps.length); + + } catch (IOException e) { + e.printStackTrace(); + } + } +} diff --git a/dependencyParser/experimental/mate-tools/src/is2/tag/Lexicon.java b/dependencyParser/experimental/mate-tools/src/is2/tag/Lexicon.java new file mode 100644 index 0000000..f719f26 --- /dev/null +++ b/dependencyParser/experimental/mate-tools/src/is2/tag/Lexicon.java @@ -0,0 +1,150 @@ +/** + * + */ +package is2.tag; + +import java.io.BufferedReader; +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.FileInputStream; +import java.io.IOException; +import java.io.InputStreamReader; + +import is2.data.IEncoderPlus; +import is2.data.PipeGen; +import is2.util.DB; + +/** + * @author Dr. Bernd Bohnet, 07.01.2011 + * + * + */ +public class Lexicon { + + public static final String FR = "FR", TAG = "TAG"; + + final byte[][] word2tag; + + public Lexicon(byte[][] w2t) { + + word2tag = w2t; + } + + public Lexicon(String clusterFile, IEncoderPlus mf) { + + final String REGEX = "\t"; + + // register words + try { + BufferedReader inputReader = new BufferedReader( + new InputStreamReader(new FileInputStream(clusterFile), "UTF-8"), 32768); + + int cnt = 0; + String line; + while ((line = inputReader.readLine()) != null) { + + try { + String[] split = line.split(REGEX); + // int f = Integer.parseInt(split[2]); + // if (f>2) { + cnt++; + mf.register(PipeGen.WORD, split[0]); + mf.register(TAG, split[1]); // tag + + if (split.length > 1) + mf.register(FR, split[1]); // frequency + // } + } catch (Exception e) { + System.out.println("Error in lexicon line " + cnt + " error: " + e.getMessage()); + } + } + System.out.println("read number of words from lexicon " + cnt); + inputReader.close(); + + } catch (Exception e) { + e.printStackTrace(); + } + + word2tag = new byte[mf.getFeatureCounter().get(PipeGen.WORD)][1]; + // insert words + try { + String line; + BufferedReader inputReader = new BufferedReader( + new InputStreamReader(new FileInputStream(clusterFile), "UTF-8"), 32768); + + while ((line = inputReader.readLine()) != null) { + + String[] split = line.split(REGEX); + int w = mf.getValue(PipeGen.WORD, split[0]); + if (w < 0) + continue; + word2tag[w][0] = (byte) mf.getValue(TAG, split[1]); + // if (split.length>1) word2tag[w][1]= (byte)mf.getValue(FR, + // split[2]); // frequency + } + inputReader.close(); + int fill = 0; + for (byte[] element : word2tag) { + if (element[0] != 0) + fill++; + } + System.out.println("filled " + fill + " of " + word2tag.length); + + } catch (Exception e) { + e.printStackTrace(); + } + } + + /** + * Read the cluster + * + * @param dos + * @throws IOException + */ + public Lexicon(DataInputStream dis) throws IOException { + + word2tag = new byte[dis.readInt()][1]; + for (int i = 0; i < word2tag.length; i++) { + word2tag[i][0] = dis.readByte(); + // word2tag[i][1]=dis.readByte(); + } + DB.println("Read lexicon with " + word2tag.length + " words "); + } + + /** + * Write the cluster + * + * @param dos + * @throws IOException + */ + public void write(DataOutputStream dos) throws IOException { + + dos.writeInt(word2tag.length); + for (byte[] i : word2tag) { + dos.writeByte(i[0]); + // dos.writeByte(i[1]); + } + + } + + /** + * @param form + * @return + */ + public int getTag(int form) { + if (word2tag.length < form || form < 0) + return -1; + return word2tag[form][0]; + } + + /** + * @param form + * @return + */ + public int getConf(int form) { + if (word2tag.length < form || form < 0) + return -1; + return word2tag[form][1]; + } + +} diff --git a/dependencyParser/experimental/mate-tools/src/is2/tag/MFO.java b/dependencyParser/experimental/mate-tools/src/is2/tag/MFO.java new file mode 100644 index 0000000..d8ac62d --- /dev/null +++ b/dependencyParser/experimental/mate-tools/src/is2/tag/MFO.java @@ -0,0 +1,527 @@ +package is2.tag; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; +import java.util.HashMap; +import java.util.Map.Entry; + +import is2.data.IEncoderPlus; +import is2.util.DB; + +/** + * Map Features, do not map long to integer + * + * @author Bernd Bohnet, 20.09.2009 + */ + +final public class MFO implements IEncoderPlus { + + /** The features and its values */ + private final HashMap<String, HashMap<String, Integer>> m_featureSets = new HashMap<String, HashMap<String, Integer>>(); + + /** The feature class and the number of values */ + private final HashMap<String, Integer> m_featureCounters = new HashMap<String, Integer>(); + + /** The number of bits needed to encode a feature */ + final HashMap<String, Integer> m_featureBits = new HashMap<String, Integer>(); + + /** Integer counter for long2int */ + // private int count=0; + + /** Stop growing */ + public boolean stop = false; + + final public static String NONE = "<None>"; + + final public static class Data4 { + public int shift; + public short a0, a1, a2, a3, a4, a5, a6, a7, a8, a9; + public int v0, v1, v2, v3, v4, v5, v6, v7, v8, v9; + + final public long calcs(int b, long v, long l) { + if (l < 0) + return l; + l |= v << shift; + shift += b; + return l; + } + + final public long calc2() { + + if (v0 < 0 || v1 < 0) + return -1; + + long l = v0; + shift = a0; + l |= (long) v1 << shift; + shift += a1; + + return l; + } + + final public long calc3() { + + if (v0 < 0 || v1 < 0 || v2 < 0) + return -1; + // if (v1<0||v2<0) return -1; + + long l = v0; + shift = a0; + l |= (long) v1 << shift; + shift += a1; + l |= (long) v2 << shift; + shift = (short) (shift + a2); + + // shift=; + return l; + } + + final public long calc4() { + if (v0 < 0 || v1 < 0 || v2 < 0 || v3 < 0) + return -1; + + long l = v0; + shift = a0; + l |= (long) v1 << shift; + shift += a1; + l |= (long) v2 << shift; + shift += a2; + l |= (long) v3 << shift; + shift = shift + a3; + + return l; + } + + final public long calc5() { + + if (v0 < 0 || v1 < 0 || v2 < 0 || v3 < 0 || v4 < 0) + return -1; + + long l = v0; + shift = a0; + l |= (long) v1 << shift; + shift += a1; + l |= (long) v2 << shift; + shift += a2; + l |= (long) v3 << shift; + shift += a3; + l |= (long) v4 << shift; + shift = shift + a4; + + return l; + } + + final public long calc6() { + + if (v0 < 0 || v1 < 0 || v2 < 0 || v3 < 0 || v4 < 0 || v5 < 0) + return -1; + + long l = v0; + shift = a0; + l |= (long) v1 << shift; + shift += a1; + l |= (long) v2 << shift; + shift += a2; + l |= (long) v3 << shift; + shift += a3; + l |= (long) v4 << shift; + shift += a4; + l |= (long) v5 << shift; + shift = shift + a5; + + return l; + } + + final public long calc7() { + + if (v0 < 0 || v1 < 0 || v2 < 0 || v3 < 0 || v4 < 0 || v5 < 0 || v6 < 0) + return -1; + + long l = v0; + shift = a0; + l |= (long) v1 << shift; + shift += a1; + l |= (long) v2 << shift; + shift += a2; + l |= (long) v3 << shift; + shift += a3; + l |= (long) v4 << shift; + shift += a4; + l |= (long) v5 << shift; + shift += a5; + l |= (long) v6 << shift; + shift = shift + a6; + + return l; + } + + final public long calc8() { + + if (v0 < 0 || v1 < 0 || v2 < 0 || v3 < 0 || v4 < 0 || v5 < 0 || v6 < 0 || v7 < 0) + return -1; + + long l = v0; + shift = a0; + l |= (long) v1 << shift; + shift += a1; + l |= (long) v2 << shift; + shift += a2; + l |= (long) v3 << shift; + shift += a3; + l |= (long) v4 << shift; + shift += a4; + l |= (long) v5 << shift; + shift += a5; + l |= (long) v6 << shift; + shift += a6; + l |= (long) v7 << shift; + shift = shift + a7; + + return l; + } + + } + + public MFO() { + } + + // public int size() {return count;} + + final public void stop() { + stop = true; + } + + final public void start() { + stop = false; + } + + /** + * Register an attribute class, if it not exists and add a possible value + * + * @param type + * @param type2 + */ + @Override + final public int register(String a, String v) { + + HashMap<String, Integer> fs = getFeatureSet().get(a); + if (fs == null) { + fs = new HashMap<String, Integer>(); + getFeatureSet().put(a, fs); + fs.put(NONE, 0); + getFeatureCounter().put(a, 1); + } + Integer c = getFeatureCounter().get(a); + + Integer i = fs.get(v); + if (i == null) { + fs.put(v, c); + c++; + getFeatureCounter().put(a, c); + return c - 1; + } else + return i; + } + + /** + * Calculates the number of bits needed to encode a feature + */ + public void calculateBits() { + + for (Entry<String, Integer> e : getFeatureCounter().entrySet()) { + int bits = (int) Math.ceil((Math.log(e.getValue() + 1) / Math.log(2))); + m_featureBits.put(e.getKey(), bits); + } + + // System.out.println("total number of needed bits "+total); + } + + @Override + public String toString() { + + StringBuffer content = new StringBuffer(); + for (Entry<String, Integer> e : getFeatureCounter().entrySet()) { + content.append(e.getKey() + " " + e.getValue()); + content.append(':'); + // HashMap<String,Integer> vs = getFeatureSet().get(e.getKey()); + content.append(getFeatureBits(e.getKey())); + + /* + * if (vs.size()<120) for(Entry<String,Integer> e2 : vs.entrySet()) + * { content.append(e2.getKey()+" ("+e2.getValue()+") "); } + */ + content.append('\n'); + + } + return content.toString(); + } + + static final public long calcs(Data4 d, int b, long v, long l) { + if (l < 0) + return l; + l |= v << d.shift; + d.shift += b; + return l; + } + + final public short getFeatureBits(String a) { + return (short) m_featureBits.get(a).intValue(); + } + + /** + * Get the integer place holder of the string value v of the type a + * + * @param t + * the type + * @param v + * the value + * @return the integer place holder of v + */ + @Override + final public int getValue(String t, String v) { + + if (m_featureSets.get(t) == null) + return -1; + Integer vi = m_featureSets.get(t).get(v); + if (vi == null) + return -1; // stop && + return vi.intValue(); + } + + /** + * Static version of getValue + * + * @see getValue + */ + final public int getValueS(String a, String v) { + + if (m_featureSets.get(a) == null) + return -1; + Integer vi = m_featureSets.get(a).get(v); + if (vi == null) + return -1; // stop && + return vi.intValue(); + } + + public int hasValue(String a, String v) { + + Integer vi = m_featureSets.get(a).get(v); + if (vi == null) + return -1; + return vi.intValue(); + } + + final public long calc2(Data4 d) { + + if (d.v0 < 0 || d.v1 < 0) + return -1; + // if (d.v1<0||d.v2<0) return -1; + + long l = d.v0; + short shift = d.a0; + l |= (long) d.v1 << shift; + shift += d.a1; + // l |= (long)d.v2<<shift; + d.shift = shift; + + // d.shift=; + return l; + } + + final public long calc3(Data4 d) { + + if (d.v0 < 0 || d.v1 < 0 || d.v2 < 0) + return -1; + + long l = d.v0; + short shift = d.a0; + l |= (long) d.v1 << shift; + shift += d.a1; + l |= (long) d.v2 << shift; + d.shift = shift + d.a2; + return l; + } + + final public long calc4(Data4 d) { + if (d.v0 < 0 || d.v1 < 0 || d.v2 < 0 || d.v3 < 0) + return -1; + + long l = d.v0; + int shift = d.a0; + l |= (long) d.v1 << shift; + shift += d.a1; + l |= (long) d.v2 << shift; + shift += d.a2; + l |= (long) d.v3 << shift; + d.shift = shift + d.a3; + + return l; + } + + final public long calc5(Data4 d) { + + if (d.v0 < 0 || d.v1 < 0 || d.v2 < 0 || d.v3 < 0 || d.v4 < 0) + return -1; + + long l = d.v0; + int shift = d.a0; + l |= (long) d.v1 << shift; + shift += d.a1; + l |= (long) d.v2 << shift; + shift += d.a2; + l |= (long) d.v3 << shift; + shift += d.a3; + l |= (long) d.v4 << shift; + d.shift = shift + d.a4; + + return l; + } + + final public long calc6(Data4 d) { + + if (d.v0 < 0 || d.v1 < 0 || d.v2 < 0 || d.v3 < 0 || d.v4 < 0 || d.v5 < 0) + return -1; + + long l = d.v0; + int shift = d.a0; + l |= (long) d.v1 << shift; + shift += d.a1; + l |= (long) d.v2 << shift; + shift += d.a2; + l |= (long) d.v3 << shift; + shift += d.a3; + l |= (long) d.v4 << shift; + shift += d.a4; + l |= (long) d.v5 << shift; + d.shift = shift + d.a5; + + return l; + } + + final public long calc7(Data4 d) { + + if (d.v0 < 0 || d.v1 < 0 || d.v2 < 0 || d.v3 < 0 || d.v4 < 0 || d.v5 < 0 || d.v6 < 0) + return -1; + + long l = d.v0; + int shift = d.a0; + l |= (long) d.v1 << shift; + shift += d.a1; + l |= (long) d.v2 << shift; + shift += d.a2; + l |= (long) d.v3 << shift; + shift += d.a3; + l |= (long) d.v4 << shift; + shift += d.a4; + l |= (long) d.v5 << shift; + shift += d.a5; + l |= (long) d.v6 << shift; + d.shift = shift + d.a6; + + return l; + } + + final public long calc8(Data4 d) { + + if (d.v0 < 0 || d.v1 < 0 || d.v2 < 0 || d.v3 < 0 || d.v4 < 0 || d.v5 < 0 || d.v6 < 0 || d.v7 < 0) + return -1; + + long l = d.v0; + int shift = d.a0; + l |= (long) d.v1 << shift; + shift += d.a1; + l |= (long) d.v2 << shift; + shift += d.a2; + l |= (long) d.v3 << shift; + shift += d.a3; + l |= (long) d.v4 << shift; + shift += d.a4; + l |= (long) d.v5 << shift; + shift += d.a5; + l |= (long) d.v6 << shift; + shift += d.a6; + l |= (long) d.v7 << shift; + d.shift = shift + d.a7; + + return l; + } + + /** + * Maps a long to a integer value. This is very useful to save memory for + * sparse data long values + * + * @param node + * @return the integer + */ + static public int misses = 0; + static public int good = 0; + + /** + * Write the data + * + * @param dos + * @throws IOException + */ + public void writeData(DataOutputStream dos) throws IOException { + dos.writeInt(getFeatureSet().size()); + for (Entry<String, HashMap<String, Integer>> e : getFeatureSet().entrySet()) { + dos.writeUTF(e.getKey()); + dos.writeInt(e.getValue().size()); + + for (Entry<String, Integer> e2 : e.getValue().entrySet()) { + + if (e2.getKey() == null) + DB.println("key " + e2.getKey() + " value " + e2.getValue() + " e -key " + e.getKey()); + dos.writeUTF(e2.getKey()); + dos.writeInt(e2.getValue()); + + } + + } + } + + public void read(DataInputStream din) throws IOException { + + int size = din.readInt(); + for (int i = 0; i < size; i++) { + String k = din.readUTF(); + int size2 = din.readInt(); + + HashMap<String, Integer> h = new HashMap<String, Integer>(); + getFeatureSet().put(k, h); + for (int j = 0; j < size2; j++) { + h.put(din.readUTF(), din.readInt()); + } + getFeatureCounter().put(k, size2); + } + + calculateBits(); + } + + /** + * Clear the data + */ + public void clearData() { + getFeatureSet().clear(); + m_featureBits.clear(); + getFeatureSet().clear(); + } + + @Override + public HashMap<String, Integer> getFeatureCounter() { + return m_featureCounters; + } + + public HashMap<String, HashMap<String, Integer>> getFeatureSet() { + return m_featureSets; + } + + static public String[] reverse(HashMap<String, Integer> v) { + String[] set = new String[v.size()]; + for (Entry<String, Integer> e : v.entrySet()) { + set[e.getValue()] = e.getKey(); + } + return set; + } +} diff --git a/dependencyParser/experimental/mate-tools/src/is2/tag/Options.java b/dependencyParser/experimental/mate-tools/src/is2/tag/Options.java new file mode 100644 index 0000000..0998c70 --- /dev/null +++ b/dependencyParser/experimental/mate-tools/src/is2/tag/Options.java @@ -0,0 +1,132 @@ +package is2.tag; + +import java.io.File; + +import is2.util.OptionsSuper; + +public final class Options extends OptionsSuper { + + public Options(String[] args) { + + for (int i = 0; i < args.length; i++) { + String[] pair = args[i].split(":"); + + if (pair[0].equals("--help")) + explain(); + else if (pair[0].equals("-train")) { + train = true; + trainfile = args[i + 1]; + } else if (pair[0].equals("-eval")) { + eval = true; + goldfile = args[i + 1]; + i++; + } else if (pair[0].equals("-test")) { + test = true; + testfile = args[i + 1]; + i++; + } else if (pair[0].equals("-i")) { + numIters = Integer.parseInt(args[i + 1]); + i++; + } else if (pair[0].equals("-out")) { + outfile = args[i + 1]; + i++; + } else if (pair[0].equals("-decode")) { + decodeProjective = args[i + 1].equals("proj"); + i++; + } else if (pair[0].equals("-confidence")) { + + conf = true; + } + + else if (pair[0].equals("-count")) { + count = Integer.parseInt(args[i + 1]); + i++; + } else if (pair[0].equals("-model")) { + modelName = args[i + 1]; + i++; + } else if (pair[0].equals("-tmp")) { + tmp = args[i + 1]; + i++; + } else if (pair[0].equals("-format")) { + // format = args[i+1]; + formatTask = Integer.parseInt(args[i + 1]); + i++; + } else if (pair[0].equals("-allfeatures")) { + allFeatures = true; + } else if (pair[0].equals("-nonormalize")) { + normalize = false; + } else if (pair[0].equals("-nframes")) { + // format = args[i+1]; + nbframes = args[i + 1]; + i++; + + } else if (pair[0].equals("-pframes")) { + // format = args[i+1]; + pbframes = args[i + 1]; + i++; + } else if (pair[0].equals("-nopred")) { + nopred = true; + } else if (pair[0].equals("-divide")) { + keep = true; + } else if (pair[0].equals("-lexicon")) { + lexicon = args[i + 1]; + i++; + + } else + super.addOption(args, i); + + } + + try { + + if (trainfile != null) { + + if (keep && tmp != null) { + trainforest = new File(tmp); + if (!trainforest.exists()) + keep = false; + + } else if (tmp != null) { + trainforest = File.createTempFile("train", ".tmp", new File(tmp)); + trainforest.deleteOnExit(); + } else { + trainforest = File.createTempFile("train", ".tmp"); // ,new + // File("F:\\") + trainforest.deleteOnExit(); + } + + } + + } catch (java.io.IOException e) { + System.out.println("Unable to create tmp files for feature forests!"); + System.out.println(e); + System.exit(0); + } + } + + private void explain() { + System.out.println("Usage: "); + System.out.println("java -class mate.jar is2.parser.Parser [Options]"); + System.out.println(); + System.out.println("Example: "); + System.out.println( + " java -class mate.jar is2.parser.Parser -model eps3.model -train corpora/conll08st/train/train.closed -test corpora/conll08st/devel/devel.closed -out b3.test -eval corpora/conll08st/devel/devel.closed -count 2000 -i 6"); + System.out.println(""); + System.out.println("Options:"); + System.out.println(""); + System.out.println(" -train <file> the corpus a model is trained on; default " + this.trainfile); + System.out.println(" -test <file> the input corpus for testing; default " + this.testfile); + System.out.println(" -out <file> the output corpus (result) of a test run; default " + this.outfile); + System.out.println(" -model <file> the parsing model for traing the model is stored in the files"); + System.out.println( + " and for parsing the model is load from this file; default " + this.modelName); + System.out.println( + " -i <number> the number of training iterations; good numbers are 10 for smaller corpora and 6 for bigger; default " + + this.numIters); + System.out.println(" -count <number> the n first sentences of the corpus are take for the training default " + + this.count); + System.out.println(" -format <number> conll format of the year 8 or 9; default " + this.formatTask); + + System.exit(0); + } +} diff --git a/dependencyParser/experimental/mate-tools/src/is2/tag/POS.java b/dependencyParser/experimental/mate-tools/src/is2/tag/POS.java new file mode 100644 index 0000000..30f1e41 --- /dev/null +++ b/dependencyParser/experimental/mate-tools/src/is2/tag/POS.java @@ -0,0 +1,30 @@ +package is2.tag; + +public class POS implements Comparable<POS> { + + // pos tag + public int p; + + // score of the tag + public float s; + + // the position of the word in the sentence + public int w; + + public POS(int p, float s) { + this.p = p; + this.s = s; + } + + @Override + public int compareTo(POS o) { + + return s > o.s ? -1 : s == o.s ? 0 : 1; + } + + @Override + public String toString() { + return "" + p + ":" + s; + } + +} diff --git a/dependencyParser/experimental/mate-tools/src/is2/tag/Tagger.java b/dependencyParser/experimental/mate-tools/src/is2/tag/Tagger.java new file mode 100644 index 0000000..2ea146e --- /dev/null +++ b/dependencyParser/experimental/mate-tools/src/is2/tag/Tagger.java @@ -0,0 +1,506 @@ +package is2.tag; + +import java.io.BufferedInputStream; +import java.io.BufferedOutputStream; +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.FileOutputStream; +import java.io.IOException; +import java.util.ArrayList; +import java.util.Map.Entry; +import java.util.zip.ZipEntry; +import java.util.zip.ZipInputStream; +import java.util.zip.ZipOutputStream; + +import is2.data.F2SF; +import is2.data.FV; +import is2.data.Instances; +import is2.data.InstancesTagger; +import is2.data.Long2Int; +import is2.data.Long2IntInterface; +import is2.data.ParametersFloat; +import is2.data.PipeGen; +import is2.data.SentenceData09; +import is2.io.CONLLReader09; +import is2.io.CONLLWriter09; +import is2.io.IOGenerals; +import is2.tools.IPipe; +import is2.tools.Tool; +import is2.tools.Train; +import is2.util.DB; +import is2.util.Evaluator; +import is2.util.OptionsSuper; + +public class Tagger implements Tool, Train { + + public ExtractorT2 pipe; + public ParametersFloat params; + public Long2IntInterface li; + public MFO mf; + + /** + * Initialize + * + * @param options + */ + public Tagger(Options options) { + + // load the model + try { + readModel(options); + } catch (Exception e) { + e.printStackTrace(); + } + } + + public Tagger() { + } + + /** + * @param modelFileName + * the file name of the model + */ + public Tagger(String modelFileName) { + this(new Options(new String[] { "-model", modelFileName })); + } + + public static void main(String[] args) throws FileNotFoundException, Exception { + + long start = System.currentTimeMillis(); + Options options = new Options(args); + + Tagger tagger = new Tagger(); + + if (options.train) { + + // depReader.normalizeOn=false; + + tagger.li = new Long2Int(options.hsize); + tagger.pipe = new ExtractorT2(options, tagger.mf = new MFO()); + + // tagger.pipe.li =tagger.li; + + InstancesTagger is = (InstancesTagger) tagger.pipe.createInstances(options.trainfile); + + tagger.params = new ParametersFloat(tagger.li.size()); + + tagger.train(options, tagger.pipe, tagger.params, is); + tagger.writeModel(options, tagger.pipe, tagger.params); + + } + + if (options.test) { + + tagger.readModel(options); + + tagger.out(options, tagger.pipe, tagger.params); + } + + System.out.println(); + + if (options.eval) { + System.out.println("\nEVALUATION PERFORMANCE:"); + Evaluator.evaluateTagger(options.goldfile, options.outfile, options.format); + } + long end = System.currentTimeMillis(); + System.out.println("used time " + ((float) ((end - start) / 100) / 10)); + } + + @Override + public void readModel(OptionsSuper options) { + + try { + pipe = new ExtractorT2(options, mf = new MFO()); + // load the model + ZipInputStream zis = new ZipInputStream(new BufferedInputStream(new FileInputStream(options.modelName))); + zis.getNextEntry(); + DataInputStream dis = new DataInputStream(new BufferedInputStream(zis)); + + pipe.mf.read(dis); + pipe.initValues(); + pipe.initFeatures(); + + params = new ParametersFloat(0); + params.read(dis); + li = new Long2Int(params.parameters.length); + pipe.read(dis); + + dis.close(); + + pipe.types = new String[pipe.mf.getFeatureCounter().get(PipeGen.POS)]; + for (Entry<String, Integer> e : pipe.mf.getFeatureSet().get(PipeGen.POS).entrySet()) + pipe.types[e.getValue()] = e.getKey(); + + DB.println("Loading data finished. "); + } catch (Exception e) { + e.printStackTrace(); + } + } + + /** + * Do the training + * + * @param instanceLengths + * @param options + * @param pipe + * @param params + * @throws IOException + * @throws InterruptedException + * @throws ClassNotFoundException + */ + @Override + public void train(OptionsSuper options, IPipe pipe, ParametersFloat params, Instances is2) { + + InstancesTagger is = (InstancesTagger) is2; + String wds[] = MFO.reverse(this.pipe.mf.getFeatureSet().get(PipeGen.WORD)); + + int pd[] = new int[this.pipe.types.length]; + for (int k = 0; k < pd.length; k++) + pd[k] = k; + + int del = 0; + F2SF f = new F2SF(params.parameters); + long vs[] = new long[ExtractorT2._MAX]; + + int types = this.pipe.types.length; + + double upd = options.numIters * is.size() + 1; + + for (int i = 0; i < options.numIters; i++) { + + long start = System.currentTimeMillis(); + + int numInstances = is.size(); + + long last = System.currentTimeMillis(); + FV pred = new FV(), gold = new FV(); + + int correct = 0, count = 0; + System.out.print("Iteration " + i + ": "); + + for (int n = 0; n < numInstances; n++) { + + if ((n + 1) % 500 == 0) + del = PipeGen.outValueErr(n + 1, (count - correct), (float) correct / (float) count, del, last, + upd); + + int length = is.length(n); + + upd--; + + for (int w = 1; w < length; w++) { + + double best = -1000; + short bestType = -1; + + int[] lemmas; // = is.lemmas[n]; + if (options.noLemmas) + lemmas = new int[is.length(n)]; + else + lemmas = is.plemmas[n]; + + this.pipe.addFeatures(is, n, wds[is.forms[n][w]], w, is.gpos[n], is.forms[n], lemmas, vs); + + for (short t = 0; t < types; t++) { + + // the hypotheses of a part of speech tag + long p = t << ExtractorT2.s_type; + f.clear(); + + // add the features to the vector + for (int k1 = 0; vs[k1] != Integer.MIN_VALUE; k1++) { + if (vs[k1] > 0) + f.add(this.li.l2i(vs[k1] | p)); + } + + if (f.score > best) { + bestType = t; + best = f.score; + } + } + + count++; + if (bestType == is.gpos[n][w]) { + correct++; + continue; + } + + pred.clear(); + for (int k1 = 0; vs[k1] != Integer.MIN_VALUE; k1++) + if (vs[k1] > 0) + pred.add(this.li.l2i(vs[k1] | bestType << ExtractorT2.s_type)); + + gold.clear(); + for (int k1 = 0; vs[k1] != Integer.MIN_VALUE; k1++) + if (vs[k1] > 0) + gold.add(this.li.l2i(vs[k1] | is.gpos[n][w] << ExtractorT2.s_type)); + + params.update(pred, gold, (float) upd, 1.0F); + } + } + + long end = System.currentTimeMillis(); + String info = "time " + (end - start); + PipeGen.outValueErr(numInstances, (count - correct), (float) correct / (float) count, del, last, upd, info); + System.out.println(); + del = 0; + } + + params.average(options.numIters * is.size()); + + } + + /** + * Tag a sentence + * + * @param options + * @param pipe + * @param params + * @throws IOException + */ + @Override + public void out(OptionsSuper options, IPipe pipe, ParametersFloat params) { + + try { + + long start = System.currentTimeMillis(); + // change this backe!!! + // CONLLReader09 depReader = new CONLLReader09(options.testfile, + // CONLLReader09.NO_NORMALIZE); + CONLLReader09 depReader = new CONLLReader09(options.testfile); + + CONLLWriter09 depWriter = new CONLLWriter09(options.outfile); + + System.out.print("Processing Sentence: "); + pipe.initValues(); + + int cnt = 0; + int del = 0; + while (true) { + + InstancesTagger is = new InstancesTagger(); + is.init(1, mf); + SentenceData09 instance = depReader.getNext(is); + if (instance == null || instance.forms == null) + break; + + is.fillChars(instance, 0, ExtractorT2._CEND); + + cnt++; + + tag(is, instance); + + SentenceData09 i09 = new SentenceData09(instance); + i09.createSemantic(instance); + depWriter.write(i09); + + if (cnt % 100 == 0) + del = PipeGen.outValue(cnt, del); + + } + del = PipeGen.outValue(cnt, del); + depWriter.finishWriting(); + + // int r[] = new int[14]; + /* + * for(Entry<Float, Integer> e : map.entrySet()) { + * if(e.getKey()<min)min=e.getKey(); + * if(e.getKey()>max)max=e.getKey(); + * + * if(e.getKey()<0.2) r[0]++; else if(e.getKey()<0.5) + * r[1]+=e.getValue(); else if(e.getKey()<0.7) r[2]+=e.getValue(); + * else if(e.getKey()<0.8) r[3]+=e.getValue(); else + * if(e.getKey()<0.9) r[4]+=e.getValue(); else if(e.getKey()<1.0) + * r[5]+=e.getValue(); else if(e.getKey()<1.2) r[6]+=e.getValue(); + * else if(e.getKey()<1.3) r[7]+=e.getValue(); else + * if(e.getKey()<1.4) r[8]+=e.getValue(); else if(e.getKey()<1.5) + * r[9]+=e.getValue(); else if(e.getKey()<1.9) r[10]+=e.getValue(); + * else if(e.getKey()<2.2) r[11]+=e.getValue(); else + * if(e.getKey()<2.5) r[12]+=e.getValue(); else if(e.getKey()>=2.5) + * r[13]+=e.getValue(); } + */ + // for(int k=0;k<r.length;k++) System.out.println(k+" "+r[k][0]+" + // "+((float)r[k][1]/(float)r[k][0])+" good "+r[k][1]); + // System.out.println("min "+min+" "+max); + + long end = System.currentTimeMillis(); + System.out.println(PipeGen.getSecondsPerInstnace(cnt, (end - start))); + System.out.println(PipeGen.getUsedTime(end - start)); + } catch (Exception e) { + e.printStackTrace(); + } + } + + public SentenceData09 tag(SentenceData09 instance) { + InstancesTagger is = new InstancesTagger(); + is.init(1, pipe.mf); + new CONLLReader09().insert(is, instance); + is.fillChars(instance, 0, ExtractorT2._CEND); + tag(is, instance); + + return instance; + } + + private void tag(InstancesTagger is, SentenceData09 instance) { + + int length = instance.ppos.length; + + short[] pos = new short[instance.gpos.length]; + + float sc[] = new float[instance.ppos.length]; + + instance.ppos[0] = IOGenerals.ROOT_POS; + pos[0] = (short) pipe.mf.getValue(PipeGen.POS, IOGenerals.ROOT_POS); + + for (int j = 1; j < length; j++) { + + short bestType = (short) pipe.fillFeatureVectorsOne(instance.forms[j], params, j, is, 0, pos, this.li, sc); + pos[j] = bestType; + instance.ppos[j] = pipe.types[bestType]; + } + + for (int j = 1; j < length; j++) { + + short bestType = (short) pipe.fillFeatureVectorsOne(instance.forms[j], params, j, is, 0, pos, this.li, sc); + instance.ppos[j] = pipe.types[bestType]; + pos[j] = bestType; + } + } + + /** + * Tag a single word and return a n-best list of Part-of-Speech tags. + * + * @param is + * set of sentences + * @param instanceIndex + * index to the sentence in question + * @param word + * word to be tagged + * @return n-best list of Part-of-Speech tags + */ + public ArrayList<POS> tag(InstancesTagger is, int instanceIndex, int word, String wordForm) { + + return pipe.classify(wordForm, params, word, is, instanceIndex, is.pposs[instanceIndex], li); + + } + + public ArrayList<String> tagStrings(InstancesTagger is, int instanceIndex, int word, String wordForm) { + + ArrayList<POS> plist = pipe.classify(wordForm, params, word, is, instanceIndex, is.pposs[instanceIndex], li); + String pos[] = MFO.reverse(this.pipe.mf.getFeatureSet().get(PipeGen.POS)); + + ArrayList<String> postags = null; + for (POS p : plist) { + try { + postags.add(pos[p.p]); + } catch (Exception e) { + e.printStackTrace(); + } + } + return postags; + + } + + /** + * Tag a sentence + * + * @param options + * @param pipe + * @param parametersReranker + * @throws IOException + */ + public String[] tag(String[] words, String[] lemmas) { + + String[] pposs = new String[words.length]; + + try { + pipe.initValues(); + + int length = words.length + 1; + + InstancesTagger is = new InstancesTagger(); + is.init(1, pipe.mf); + is.createInstance09(length); + + SentenceData09 instance = new SentenceData09(); + instance.forms = new String[length]; + instance.forms[0] = IOGenerals.ROOT; + + instance.plemmas = new String[length]; + instance.plemmas[0] = IOGenerals.ROOT_LEMMA; + + for (int j = 0; j < words.length; j++) { + instance.forms[j + 1] = words[j]; + instance.plemmas[j + 1] = lemmas[j]; + } + + for (int j = 0; j < length; j++) { + is.setForm(0, j, instance.forms[j]); + is.setLemma(0, j, instance.plemmas[j]); + } + + instance.ppos = new String[length]; + + is.fillChars(instance, 0, ExtractorT2._CEND); + + this.tag(is, instance); + + for (int j = 0; j < words.length; j++) { + pposs[j] = instance.ppos[j + 1]; + } + } catch (Exception e) { + e.printStackTrace(); + } + + return pposs; + + } + + /* + * (non-Javadoc) + * + * @see is2.tools.Tool#apply(is2.data.SentenceData09) + */ + @Override + public SentenceData09 apply(SentenceData09 snt) { + + SentenceData09 it = new SentenceData09(); + it.createWithRoot(snt); + it = tag(it); + SentenceData09 i09 = new SentenceData09(it); + i09.createSemantic(it); + return i09; + } + + /* + * (non-Javadoc) + * + * @see is2.tools.Train#writeModel(is2.util.OptionsSuper, is2.mtag2.Pipe, + * is2.data.ParametersFloat) + */ + @Override + public void writeModel(OptionsSuper options, IPipe pipe, is2.data.ParametersFloat params) { + try { + ZipOutputStream zos = new ZipOutputStream( + new BufferedOutputStream(new FileOutputStream(options.modelName))); + zos.putNextEntry(new ZipEntry("data")); + DataOutputStream dos = new DataOutputStream(new BufferedOutputStream(zos)); + + this.pipe.mf.writeData(dos); + + DB.println("number of parameters " + params.parameters.length); + dos.flush(); + + params.write(dos); + pipe.write(dos); + dos.flush(); + dos.close(); + + } catch (Exception e) { + e.printStackTrace(); + } + } + +} diff --git a/dependencyParser/experimental/mate-tools/src/is2/tag/package.html b/dependencyParser/experimental/mate-tools/src/is2/tag/package.html new file mode 100644 index 0000000..469fdf6 --- /dev/null +++ b/dependencyParser/experimental/mate-tools/src/is2/tag/package.html @@ -0,0 +1,4 @@ +Package info +<br><br> +This parser includes a tagger into the dependency parser +<br> \ No newline at end of file diff --git a/dependencyParser/experimental/mate-tools/src/is2/tools/IPipe.java b/dependencyParser/experimental/mate-tools/src/is2/tools/IPipe.java new file mode 100644 index 0000000..b6e0e02 --- /dev/null +++ b/dependencyParser/experimental/mate-tools/src/is2/tools/IPipe.java @@ -0,0 +1,28 @@ +/** + * + */ +package is2.tools; + +import java.io.DataOutputStream; + +import is2.data.Instances; + +/** + * @author Dr. Bernd Bohnet, 25.12.2010 + * + * + */ +public interface IPipe { + + public abstract Instances createInstances(String file); + + public abstract void initValues(); + + /** + * Initialize the features types. + */ + public abstract void initFeatures(); + + public abstract void write(DataOutputStream dos); + +} \ No newline at end of file diff --git a/dependencyParser/experimental/mate-tools/src/is2/tools/Retrainable.java b/dependencyParser/experimental/mate-tools/src/is2/tools/Retrainable.java new file mode 100644 index 0000000..86fbfcc --- /dev/null +++ b/dependencyParser/experimental/mate-tools/src/is2/tools/Retrainable.java @@ -0,0 +1,30 @@ +package is2.tools; + +import is2.data.SentenceData09; + +/** + * Provides Methods for the retraining + * + * @author bohnetbd + * + */ +public interface Retrainable { + + /** + * Retrains with a update factor (upd). The retraining stops when the model + * was successful adapted or it gave up after the maximal iterations. + * + * @param sentence + * the data container of the new example. + * @param upd + * the update factor, e.g. 0.01 + * @param iterations + * maximal number of iterations that are tried to adapt the + * system. + * @return success = true -- else false + */ + public boolean retrain(SentenceData09 sentence, float upd, int iterations); + + boolean retrain(SentenceData09 sentence, float upd, int iterations, boolean print); + +} diff --git a/dependencyParser/experimental/mate-tools/src/is2/tools/Tool.java b/dependencyParser/experimental/mate-tools/src/is2/tools/Tool.java new file mode 100644 index 0000000..41ead53 --- /dev/null +++ b/dependencyParser/experimental/mate-tools/src/is2/tools/Tool.java @@ -0,0 +1,25 @@ +/** + * + */ +package is2.tools; + +import is2.data.SentenceData09; + +/** + * @author Bernd Bohnet, 27.10.2010 + * + * Interface to all tools + */ +public interface Tool { + + /** + * Uses the tool and applies it on the input sentence. The input is altered + * and has to include a root (token). + * + * @param i + * the input sentence + * @return The result of the performance without the root. + */ + SentenceData09 apply(SentenceData09 snt09); + +} diff --git a/dependencyParser/experimental/mate-tools/src/is2/tools/ToolIO.java b/dependencyParser/experimental/mate-tools/src/is2/tools/ToolIO.java new file mode 100644 index 0000000..d7b67fe --- /dev/null +++ b/dependencyParser/experimental/mate-tools/src/is2/tools/ToolIO.java @@ -0,0 +1,15 @@ +/** + * + */ +package is2.tools; + +/** + * @author Bernd Bohnet, 27.10.2010 + * + * Interface to all tools + */ +public interface ToolIO { + + void readModel(); + +} diff --git a/dependencyParser/experimental/mate-tools/src/is2/tools/Train.java b/dependencyParser/experimental/mate-tools/src/is2/tools/Train.java new file mode 100644 index 0000000..31a7ad8 --- /dev/null +++ b/dependencyParser/experimental/mate-tools/src/is2/tools/Train.java @@ -0,0 +1,25 @@ +/** + * + */ +package is2.tools; + +import is2.data.Instances; +import is2.data.ParametersFloat; +import is2.util.OptionsSuper; + +/** + * @author Dr. Bernd Bohnet, 24.12.2010 + * + * + */ +public interface Train { + + public abstract void writeModel(OptionsSuper options, IPipe pipe, ParametersFloat params); + + public abstract void readModel(OptionsSuper options); + + public abstract void train(OptionsSuper options, IPipe pipe, ParametersFloat params, Instances is); + + public abstract void out(OptionsSuper options, IPipe pipe, ParametersFloat params); + +} \ No newline at end of file diff --git a/dependencyParser/experimental/mate-tools/src/is2/util/Convert.java b/dependencyParser/experimental/mate-tools/src/is2/util/Convert.java new file mode 100644 index 0000000..b9c820f --- /dev/null +++ b/dependencyParser/experimental/mate-tools/src/is2/util/Convert.java @@ -0,0 +1,453 @@ +/** + * + */ +package is2.util; + +import java.io.BufferedReader; +import java.io.BufferedWriter; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.InputStreamReader; +import java.io.OutputStreamWriter; +import java.nio.charset.Charset; +import java.util.ArrayList; + +import is2.data.SentenceData09; +import is2.io.CONLLReader06; +import is2.io.CONLLReader08; +import is2.io.CONLLReader09; +import is2.io.CONLLWriter06; +import is2.io.CONLLWriter09; + +/** + * @author Dr. Bernd Bohnet, 01.03.2010 + * + * + */ +public class Convert { + + public static void main(String args[]) throws Exception { + + if (args.length < 2) { + + System.out.println("Usage"); + System.out.println(" java is2.util.Convert <in> <out> [-w06|-w0809|-yue] [-wordsonly]"); + + } + + int todo = 9; + boolean wordsOnly = false; + for (String a : args) { + if (a != null && a.equals("-w06")) + todo = 6; + else if (a != null && a.equals("-w0809")) + todo = 89; + else if (a != null && a.equals("-yue")) + todo = 99; + else if (a != null && a.equals("-utf8")) + todo = 8; + + if (a != null && a.equals("-wordsonly")) + wordsOnly = true; + + } + + if (todo == 9) + convert(args[0], args[1]); + else if (todo == 6) + convert0906(args[0], args[1]); + else if (todo == 8) + convert8(args[0], args[1], args[2]); + else if (todo == 89) + convert0809(args[0], args[1]); + else if (todo == 99) { + convertChnYue(args[0], args[1], wordsOnly); + } + + } + + private static void convert8(String infile, String outfile, String format) { + try { + + System.out.println("availableCharsets: " + Charset.availableCharsets()); + + BufferedReader in = new BufferedReader(new InputStreamReader(new FileInputStream(infile), format)); + BufferedWriter out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outfile), "UTF8")); + ; + int ch; + + int count = 0, wcount = 0; + ; + while ((ch = in.read()) > -1) { + count++; + + if (Character.isDefined(ch)) { + + out.write(ch); + wcount++; + } + } + in.close(); + out.close(); + System.out.println("read " + count + " chars and wrote " + wcount + " utf8 chars"); + } catch (Exception e) { + e.printStackTrace(); + } + + } + + public static void convert(String source, String target) throws Exception { + + CONLLReader06 reader = new CONLLReader06(source); + CONLLWriter09 writer = new CONLLWriter09(target); + + int str = 0; + while (true) { + SentenceData09 i = reader.getNext(); + str++; + if (i == null) + break; + + String[] formsNoRoot = new String[i.length() - 1]; + String[] posNoRoot = new String[formsNoRoot.length]; + String[] lemmas = new String[formsNoRoot.length]; + + String[] org_lemmas = new String[formsNoRoot.length]; + + String[] of = new String[formsNoRoot.length]; + String[] pf = new String[formsNoRoot.length]; + + String[] pposs = new String[formsNoRoot.length]; + String[] labels = new String[formsNoRoot.length]; + String[] fillp = new String[formsNoRoot.length]; + + int[] heads = new int[formsNoRoot.length]; + + for (int j = 0; j < formsNoRoot.length; j++) { + formsNoRoot[j] = i.forms[j + 1]; + if (formsNoRoot[j].length() == 0 || formsNoRoot[j].equals("")) { + System.out.println("error forms " + str); + // System.exit(0); + formsNoRoot[j] = " "; + } + posNoRoot[j] = i.gpos[j + 1]; + if (posNoRoot[j].length() == 0 || posNoRoot[j].equals(" ")) { + System.out.println("error pos " + str); + // System.exit(0); + } + pposs[j] = i.ppos[j + 1]; + if (pposs[j].length() == 0 || pposs[j].equals(" ")) { + System.out.println("error pos " + str); + // System.exit(0); + } + + labels[j] = i.labels[j + 1]; + if (labels[j].length() == 0 || labels[j].equals(" ")) { + System.out.println("error lab " + str); + // System.exit(0); + } + heads[j] = i.heads[j + 1]; + if (heads[j] > posNoRoot.length) { + System.out.println("head out of range " + heads[j] + " " + heads.length + " " + str); + heads[j] = posNoRoot.length; + } + + lemmas[j] = i.plemmas[j + 1]; + if (lemmas[j].length() == 0 || lemmas[j].equals(" ")) { + System.out.println("error lab " + str); + // System.exit(0); + } + org_lemmas[j] = i.lemmas[j + 1]; + if (org_lemmas[j].length() == 0 || org_lemmas[j].equals(" ")) { + System.out.println("error lab " + str); + // System.exit(0); + } + of[j] = i.ofeats[j + 1]; + pf[j] = i.pfeats[j + 1]; + if (str == 6099) { + // System.out.println(formsNoRoot[j]+"\t"+posNoRoot[j]+"\t"+pposs[j]+"\t"+labels[j]+"\t"+heads[j]); + } + + // (instance.fillp!=null) fillp[j] = instance.fillp[j+1]; + } + + SentenceData09 i09 = new SentenceData09(formsNoRoot, formsNoRoot, formsNoRoot, pposs, pposs, labels, heads, + fillp, of, pf); + + // public SentenceData09(String[] forms, String[] lemmas, String[] + // olemmas,String[] gpos, String[] ppos, String[] labs, int[] heads, + // String[] fillpred) { + // SentenceData09 + // SentenceData09 i2 = new SentenceData09(i.forms, + // i.lemmas,i.org_lemmas,); + + writer.write(i09); + + } + writer.finishWriting(); + + } + + public static void convertChnYue(String source, String target, boolean wordsOnly) throws Exception { + + BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(source), "UTF-8"), 32768); + + CONLLWriter09 writer = new CONLLWriter09(target); + + int str = 0; + while (true) { + + ArrayList<String[]> lines = new ArrayList<String[]>(); + + String line; + while ((line = reader.readLine()) != null) { + + if (line.length() < 2) + break; + String split[] = line.split("\t"); + lines.add(split); + } + if (line == null) + break; + + str++; + + String[] formsNoRoot = new String[lines.size()]; + String[] posNoRoot = new String[formsNoRoot.length]; + String[] lemmas = new String[formsNoRoot.length]; + + String[] org_lemmas = new String[formsNoRoot.length]; + + String[] of = new String[formsNoRoot.length]; + String[] pf = new String[formsNoRoot.length]; + + String[] pposs = new String[formsNoRoot.length]; + String[] labels = new String[formsNoRoot.length]; + String[] fillp = new String[formsNoRoot.length]; + + int[] heads = new int[formsNoRoot.length]; + + for (int j = 0; j < formsNoRoot.length; j++) { + formsNoRoot[j] = lines.get(j)[0]; + if (formsNoRoot[j].length() == 0 || formsNoRoot[j].equals("")) { + System.out.println("error forms " + str); + // System.exit(0); + formsNoRoot[j] = "_"; + } + + posNoRoot[j] = lines.get(j)[1]; + if (posNoRoot[j].length() == 0 || posNoRoot[j].equals(" ")) { + System.out.println("error pos " + str); + // System.exit(0); + } + pposs[j] = "_"; + + labels[j] = lines.get(j)[3]; + if (labels[j].length() == 0 || labels[j].equals(" ")) { + System.out.println("error lab " + str); + labels[j] = "_"; + // System.exit(0); + } + heads[j] = Integer.parseInt(lines.get(j)[2]) + 1; + if (heads[j] > posNoRoot.length) { + System.out.println("head out of range " + heads[j] + " " + heads.length + " " + str); + heads[j] = posNoRoot.length; + } + + // 0 is root and not -1 + if (heads[j] == -1) + heads[j] = 0; + + lemmas[j] = "_"; + + org_lemmas[j] = "_"; + + of[j] = "_"; + pf[j] = "_"; + + if (wordsOnly) { + posNoRoot[j] = "_"; + heads[j] = 0; + labels[j] = "_"; + } + + // (instance.fillp!=null) fillp[j] = instance.fillp[j+1]; + } + + SentenceData09 i09 = new SentenceData09(formsNoRoot, lemmas, org_lemmas, posNoRoot, posNoRoot, labels, + heads, fillp, of, pf); + + // public SentenceData09(String[] forms, String[] lemmas, String[] + // olemmas,String[] gpos, String[] ppos, String[] labs, int[] heads, + // String[] fillpred) { + // SentenceData09 + // SentenceData09 i2 = new SentenceData09(i.forms, + // i.lemmas,i.org_lemmas,); + + writer.write(i09); + + } + reader.close(); + writer.finishWriting(); + + } + + /** + * Convert the 0 + * + * @param source + * @param target + * @throws Exception + */ + public static void convert0809(String source, String target) throws Exception { + + CONLLReader08 reader = new CONLLReader08(source); + CONLLWriter09 writer = new CONLLWriter09(target); + + int str = 0; + while (true) { + SentenceData09 i = reader.getNext(); + str++; + if (i == null) + break; + + String[] formsNoRoot = new String[i.length() - 1]; + String[] posNoRoot = new String[formsNoRoot.length]; + String[] lemmas = new String[formsNoRoot.length]; + + String[] org_lemmas = new String[formsNoRoot.length]; + + String[] of = new String[formsNoRoot.length]; + String[] pf = new String[formsNoRoot.length]; + + String[] pposs = new String[formsNoRoot.length]; + String[] labels = new String[formsNoRoot.length]; + String[] fillp = new String[formsNoRoot.length]; + + int[] heads = new int[formsNoRoot.length]; + + for (int j = 0; j < formsNoRoot.length; j++) { + formsNoRoot[j] = i.forms[j + 1]; + if (formsNoRoot[j].length() == 0 || formsNoRoot[j].equals("")) { + System.out.println("error forms " + str); + // System.exit(0); + formsNoRoot[j] = " "; + } + posNoRoot[j] = i.gpos[j + 1]; + if (posNoRoot[j].length() == 0 || posNoRoot[j].equals(" ")) { + System.out.println("error pos " + str); + // System.exit(0); + } + pposs[j] = i.ppos[j + 1]; + if (pposs[j].length() == 0 || pposs[j].equals(" ")) { + System.out.println("error pos " + str); + // System.exit(0); + } + + labels[j] = i.labels[j + 1]; + if (labels[j].length() == 0 || labels[j].equals(" ")) { + System.out.println("error lab " + str); + // System.exit(0); + } + heads[j] = i.heads[j + 1]; + if (heads[j] > posNoRoot.length) { + System.out.println("head out of range " + heads[j] + " " + heads.length + " " + str); + heads[j] = posNoRoot.length; + } + + lemmas[j] = i.plemmas[j + 1]; + if (lemmas[j].length() == 0 || lemmas[j].equals(" ")) { + System.out.println("error lab " + str); + // System.exit(0); + } + org_lemmas[j] = i.lemmas[j + 1]; + // if (org_lemmas[j].length()==0 ||org_lemmas[j].equals(" ")) { + // System.out.println("error lab "+str); + // // System.exit(0); + // } + // of[j] = i.ofeats[j+1]; + // pf[j] = i.pfeats[j+1]; + if (str == 6099) { + // System.out.println(formsNoRoot[j]+"\t"+posNoRoot[j]+"\t"+pposs[j]+"\t"+labels[j]+"\t"+heads[j]); + } + + // (instance.fillp!=null) fillp[j] = instance.fillp[j+1]; + } + + SentenceData09 i09 = new SentenceData09(formsNoRoot, org_lemmas, lemmas, pposs, pposs, labels, heads, fillp, + of, pf); + + // public SentenceData09(String[] forms, String[] lemmas, String[] + // olemmas,String[] gpos, String[] ppos, String[] labs, int[] heads, + // String[] fillpred) { + // SentenceData09 + // SentenceData09 i2 = new SentenceData09(i.forms, + // i.lemmas,i.org_lemmas,); + + writer.write(i09); + + } + writer.finishWriting(); + + } + + public static void convert0906(String source, String target) throws Exception { + + CONLLReader09 reader = new CONLLReader09(source); + CONLLWriter06 writer = new CONLLWriter06(target); + + while (true) { + SentenceData09 i = reader.getNext(); + + if (i == null) + break; + + String[] formsNoRoot = new String[i.length() - 1]; + String[] posNoRoot = new String[formsNoRoot.length]; + String[] lemmas = new String[formsNoRoot.length]; + + String[] org_lemmas = new String[formsNoRoot.length]; + + String[] of = new String[formsNoRoot.length]; + String[] pf = new String[formsNoRoot.length]; + + String[] pposs = new String[formsNoRoot.length]; + String[] labels = new String[formsNoRoot.length]; + String[] fillp = new String[formsNoRoot.length]; + + int[] heads = new int[formsNoRoot.length]; + + for (int j = 0; j < formsNoRoot.length; j++) { + formsNoRoot[j] = i.forms[j + 1]; + posNoRoot[j] = i.gpos[j + 1]; + pposs[j] = i.gpos[j + 1]; + + labels[j] = i.labels[j + 1]; + heads[j] = i.heads[j + 1]; + lemmas[j] = i.plemmas[j + 1]; + + org_lemmas[j] = i.lemmas[j + 1]; + of[j] = i.ofeats[j + 1]; + pf[j] = i.pfeats[j + 1]; + + // (instance.fillp!=null) fillp[j] = instance.fillp[j+1]; + } + + SentenceData09 i09 = new SentenceData09(formsNoRoot, lemmas, org_lemmas, posNoRoot, pposs, labels, heads, + fillp, of, pf); + + // public SentenceData09(String[] forms, String[] lemmas, String[] + // olemmas,String[] gpos, String[] ppos, String[] labs, int[] heads, + // String[] fillpred) { + // SentenceData09 + // SentenceData09 i2 = new SentenceData09(i.forms, + // i.lemmas,i.org_lemmas,); + + writer.write(i09); + + } + writer.finishWriting(); + + } + +} diff --git a/dependencyParser/experimental/mate-tools/src/is2/util/Convert0409.java b/dependencyParser/experimental/mate-tools/src/is2/util/Convert0409.java new file mode 100644 index 0000000..b735ad8 --- /dev/null +++ b/dependencyParser/experimental/mate-tools/src/is2/util/Convert0409.java @@ -0,0 +1,176 @@ +/** + * + */ +package is2.util; + +import is2.data.SentenceData09; +import is2.io.CONLLReader04; +import is2.io.CONLLReader09; +import is2.io.CONLLWriter06; +import is2.io.CONLLWriter09; + +/** + * @author Dr. Bernd Bohnet, 01.03.2010 + * + * + */ +public class Convert0409 { + + public static void main(String args[]) throws Exception { + + convert(args[0], args[1]); + + } + + public static void convert(String source, String target) throws Exception { + + CONLLReader04 reader = new CONLLReader04(source); + CONLLWriter09 writer = new CONLLWriter09(target); + + int str = 0; + while (true) { + SentenceData09 i = reader.getNext(); + str++; + if (i == null) + break; + + String[] formsNoRoot = new String[i.length() - 1]; + String[] posNoRoot = new String[formsNoRoot.length]; + String[] lemmas = new String[formsNoRoot.length]; + + String[] org_lemmas = new String[formsNoRoot.length]; + + String[] of = new String[formsNoRoot.length]; + String[] pf = new String[formsNoRoot.length]; + + String[] pposs = new String[formsNoRoot.length]; + String[] labels = new String[formsNoRoot.length]; + String[] fillp = new String[formsNoRoot.length]; + + int[] heads = new int[formsNoRoot.length]; + + for (int j = 0; j < formsNoRoot.length; j++) { + formsNoRoot[j] = i.forms[j + 1]; + if (formsNoRoot[j].length() == 0 || formsNoRoot[j].equals("")) { + System.out.println("error forms " + str); + // System.exit(0); + formsNoRoot[j] = " "; + } + posNoRoot[j] = i.gpos[j + 1]; + if (posNoRoot[j].length() == 0 || posNoRoot[j].equals(" ")) { + System.out.println("error pos " + str); + // System.exit(0); + } + pposs[j] = i.ppos[j + 1]; + if (pposs[j].length() == 0 || pposs[j].equals(" ")) { + System.out.println("error pos " + str); + // System.exit(0); + } + + labels[j] = i.labels[j + 1]; + if (labels[j].length() == 0 || labels[j].equals(" ")) { + System.out.println("error lab " + str); + // System.exit(0); + } + heads[j] = i.heads[j + 1]; + if (heads[j] > posNoRoot.length) { + System.out.println("head out of range " + heads[j] + " " + heads.length + " " + str); + heads[j] = posNoRoot.length; + } + + lemmas[j] = i.plemmas[j + 1]; + if (lemmas[j].length() == 0 || lemmas[j].equals(" ")) { + System.out.println("error lab " + str); + // System.exit(0); + } + org_lemmas[j] = i.lemmas[j + 1]; + if (org_lemmas[j].length() == 0 || org_lemmas[j].equals(" ")) { + System.out.println("error lab " + str); + // System.exit(0); + } + of[j] = i.ofeats[j + 1]; + pf[j] = i.pfeats[j + 1]; + if (str == 6099) { + // System.out.println(formsNoRoot[j]+"\t"+posNoRoot[j]+"\t"+pposs[j]+"\t"+labels[j]+"\t"+heads[j]); + } + + // (instance.fillp!=null) fillp[j] = instance.fillp[j+1]; + } + + SentenceData09 i09 = new SentenceData09(formsNoRoot, lemmas, org_lemmas, pposs, pposs, labels, heads, fillp, + of, pf); + + // public SentenceData09(String[] forms, String[] lemmas, String[] + // olemmas,String[] gpos, String[] ppos, String[] labs, int[] heads, + // String[] fillpred) { + // SentenceData09 + // SentenceData09 i2 = new SentenceData09(i.forms, + // i.lemmas,i.org_lemmas,); + + writer.write(i09); + + } + writer.finishWriting(); + + } + + public static void convert0906(String source, String target) throws Exception { + + CONLLReader09 reader = new CONLLReader09(source); + CONLLWriter06 writer = new CONLLWriter06(target); + + while (true) { + SentenceData09 i = reader.getNext(); + + if (i == null) + break; + + String[] formsNoRoot = new String[i.length() - 1]; + String[] posNoRoot = new String[formsNoRoot.length]; + String[] lemmas = new String[formsNoRoot.length]; + + String[] org_lemmas = new String[formsNoRoot.length]; + + String[] of = new String[formsNoRoot.length]; + String[] pf = new String[formsNoRoot.length]; + + String[] pposs = new String[formsNoRoot.length]; + String[] labels = new String[formsNoRoot.length]; + String[] fillp = new String[formsNoRoot.length]; + + int[] heads = new int[formsNoRoot.length]; + + for (int j = 0; j < formsNoRoot.length; j++) { + formsNoRoot[j] = i.forms[j + 1]; + posNoRoot[j] = i.gpos[j + 1]; + pposs[j] = i.ppos[j + 1]; + + labels[j] = i.labels[j + 1]; + heads[j] = i.heads[j + 1]; + lemmas[j] = i.plemmas[j + 1]; + + org_lemmas[j] = i.lemmas[j + 1]; + of[j] = i.ofeats[j + 1]; + pf[j] = i.pfeats[j + 1]; + + // (instance.fillp!=null) fillp[j] = instance.fillp[j+1]; + } + + SentenceData09 i09 = new SentenceData09(formsNoRoot, lemmas, org_lemmas, posNoRoot, pposs, labels, heads, + fillp, of, pf); + + // public SentenceData09(String[] forms, String[] lemmas, String[] + // olemmas,String[] gpos, String[] ppos, String[] labs, int[] heads, + // String[] fillpred) { + // SentenceData09 + // SentenceData09 i2 = new SentenceData09(i.forms, + // i.lemmas,i.org_lemmas,); + + writer.write(i09); + + } + writer.finishWriting(); + + } + +} diff --git a/dependencyParser/experimental/mate-tools/src/is2/util/ConvertADJ.java b/dependencyParser/experimental/mate-tools/src/is2/util/ConvertADJ.java new file mode 100644 index 0000000..e6ca6c1 --- /dev/null +++ b/dependencyParser/experimental/mate-tools/src/is2/util/ConvertADJ.java @@ -0,0 +1,121 @@ +/** + * + */ +package is2.util; + +import is2.data.SentenceData09; +import is2.io.CONLLReader09; +import is2.io.CONLLWriter06; + +/** + * @author Dr. Bernd Bohnet, 01.03.2010 + * + * + */ +public class ConvertADJ { + + public static void main(String args[]) throws Exception { + + convert(args[0], args[1]); + + } + + public static void convert(String source, String target) throws Exception { + + CONLLReader09 reader = new CONLLReader09(source); + // CONLLWriter09 writer = new CONLLWriter09(target); + int adj = 0, argadj = 0; + int rb = 0, argrb = 0; + while (true) { + SentenceData09 i = reader.getNext(); + if (i == null) + break; + + for (int k = 0; k < i.length(); k++) { + + if (i.gpos[k].startsWith("JJ")) + adj++; + if (i.gpos[k].startsWith("RB")) + rb++; + + if (i.argposition != null) { + for (int[] element : i.argposition) { + if (element != null) + for (int a = 0; a < element.length; a++) { + if (element[a] == k && i.gpos[k].startsWith("JJ")) + argadj++; + if (element[a] == k && i.gpos[k].startsWith("RB")) + argrb++; + } + + } + } + // (instance.fillp!=null) fillp[j] = instance.fillp[j+1]; + } + + } + System.out.println("adj " + adj + " " + argadj); + System.out.println("rb " + rb + " " + argrb); + + } + + public static void convert0906(String source, String target) throws Exception { + + CONLLReader09 reader = new CONLLReader09(source); + CONLLWriter06 writer = new CONLLWriter06(target); + + while (true) { + SentenceData09 i = reader.getNext(); + + if (i == null) + break; + + String[] formsNoRoot = new String[i.length() - 1]; + String[] posNoRoot = new String[formsNoRoot.length]; + String[] lemmas = new String[formsNoRoot.length]; + + String[] org_lemmas = new String[formsNoRoot.length]; + + String[] of = new String[formsNoRoot.length]; + String[] pf = new String[formsNoRoot.length]; + + String[] pposs = new String[formsNoRoot.length]; + String[] labels = new String[formsNoRoot.length]; + String[] fillp = new String[formsNoRoot.length]; + + int[] heads = new int[formsNoRoot.length]; + + for (int j = 0; j < formsNoRoot.length; j++) { + formsNoRoot[j] = i.forms[j + 1]; + posNoRoot[j] = i.gpos[j + 1]; + pposs[j] = i.ppos[j + 1]; + + labels[j] = i.labels[j + 1]; + heads[j] = i.heads[j + 1]; + lemmas[j] = i.plemmas[j + 1]; + + org_lemmas[j] = i.lemmas[j + 1]; + of[j] = i.ofeats[j + 1]; + pf[j] = i.pfeats[j + 1]; + + // (instance.fillp!=null) fillp[j] = instance.fillp[j+1]; + } + + SentenceData09 i09 = new SentenceData09(formsNoRoot, lemmas, org_lemmas, posNoRoot, pposs, labels, heads, + fillp, of, pf); + + // public SentenceData09(String[] forms, String[] lemmas, String[] + // olemmas,String[] gpos, String[] ppos, String[] labs, int[] heads, + // String[] fillpred) { + // SentenceData09 + // SentenceData09 i2 = new SentenceData09(i.forms, + // i.lemmas,i.org_lemmas,); + + writer.write(i09); + + } + writer.finishWriting(); + + } + +} diff --git a/dependencyParser/experimental/mate-tools/src/is2/util/ConvertLowerCase0909.java b/dependencyParser/experimental/mate-tools/src/is2/util/ConvertLowerCase0909.java new file mode 100644 index 0000000..e5842d6 --- /dev/null +++ b/dependencyParser/experimental/mate-tools/src/is2/util/ConvertLowerCase0909.java @@ -0,0 +1,76 @@ +/** + * + */ +package is2.util; + +import is2.data.SentenceData09; +import is2.io.CONLLReader09; +import is2.io.CONLLWriter09; + +/** + * @author Dr. Bernd Bohnet, 01.03.2010 + * + * + */ +public class ConvertLowerCase0909 { + + public static void main(String args[]) throws Exception { + + CONLLReader09 reader = new CONLLReader09(args[0]); + CONLLWriter09 writer = new CONLLWriter09(args[1]); + + while (true) { + SentenceData09 i = reader.getNext(); + if (i == null) + break; + + SentenceData09 i09 = new SentenceData09(i); + i09.createSemantic(i); + + for (int k = 0; k < i09.length(); k++) { + i09.lemmas[k] = i09.lemmas[k].toLowerCase(); + i09.plemmas[k] = i09.plemmas[k].toLowerCase(); + + } + + writer.write(i09); + + } + writer.finishWriting(); + + } + + public static void convert(String source, String target) throws Exception { + + CONLLReader09 reader = new CONLLReader09(source); + CONLLWriter09 writer = new CONLLWriter09(target); + + while (true) { + SentenceData09 i = reader.getNext(); + if (i == null) + break; + + SentenceData09 i09 = new SentenceData09(i); + i09.createSemantic(i); + + for (int k = 0; k < i09.length(); k++) { + i09.lemmas[k] = i09.lemmas[k].toLowerCase(); + i09.plemmas[k] = i09.plemmas[k].toLowerCase(); + + } + + // public SentenceData09(String[] forms, String[] lemmas, String[] + // olemmas,String[] gpos, String[] ppos, String[] labs, int[] heads, + // String[] fillpred) { + // SentenceData09 + // SentenceData09 i2 = new SentenceData09(i.forms, + // i.lemmas,i.org_lemmas,); + + writer.write(i09); + + } + writer.finishWriting(); + + } + +} diff --git a/dependencyParser/experimental/mate-tools/src/is2/util/ConvertTiger2CoNLL.java b/dependencyParser/experimental/mate-tools/src/is2/util/ConvertTiger2CoNLL.java new file mode 100644 index 0000000..e650737 --- /dev/null +++ b/dependencyParser/experimental/mate-tools/src/is2/util/ConvertTiger2CoNLL.java @@ -0,0 +1,120 @@ +/** + * + */ +package is2.util; + +import java.io.BufferedReader; +import java.io.BufferedWriter; +import java.io.FileInputStream; +import java.io.IOException; +import java.io.InputStreamReader; +import java.util.StringTokenizer; + +/** + * @author Dr. Bernd Bohnet, 17.01.2010 + * + * This class removes all information from a conll 2009 file except of + * columns 1 and 2 that contain the word id and the word form. + */ +public class ConvertTiger2CoNLL { + + public static void main(String[] args) throws IOException { + + OptionsSuper options = new OptionsSuper(args, null); + + if (options.trainfile != null) { + System.err.println( + "included sentences " + clean(options.trainfile, options.outfile, options.start, options.count)); + } else + System.err.println("Please proivde the file name -train <file-name>"); + + } + + /** + * @param trainfile + * @throws IOException + */ + private static int clean(String file, String outFile, int start, int numberOfSentences) throws IOException { + + System.err.println("writting to " + outFile); + System.err.println("start " + start + " to " + (start + numberOfSentences)); + int state = 0; + + BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(file), "UTF-8"), 32768); + BufferedWriter writer = new BufferedWriter( + new java.io.OutputStreamWriter(new java.io.FileOutputStream(outFile), "UTF-8"), 32768); + String l = null; + try { + + int id = 1, snt = 0, cnt = 0; + + while ((l = reader.readLine()) != null) { + + if (l.startsWith("#BOS")) { + state = 1; // BOS + id = 1; + snt++; + continue; + } + if (l.startsWith("#EOS") && state == 1) { + state = 2; // BOS + cnt++; + + writer.newLine(); + } + + if (start > snt || (start + numberOfSentences) <= snt) { + state = 3; + } + + if (l.startsWith("#5") || l.startsWith("#6") || l.startsWith("#7")) + continue; + if ((start + numberOfSentences) <= snt) + break; + + if (state == 3) + continue; + + if (state == 1) { + + l = l.replace("\t\t", "\t"); + l = l.replace("\t\t", "\t"); + + StringTokenizer t = new StringTokenizer(l, "\t"); + int count = 0; + + writer.write("" + id + "\t"); + + while (t.hasMoreTokens()) { + if (count == 0) { + writer.write(t.nextToken() + "\t"); + } else if (count == 1) { + writer.write(t.nextToken() + "\t_\t"); + } else if (count == 2) { + writer.write(t.nextToken() + "\t_\t"); + } else if (count == 3) { + writer.write(t.nextToken().replace(".", "|") + "\t_\t"); + } else { + t.nextToken(); + } + count++; + } + writer.write("_\t_\t_\t_\t_\t_\t_\t_\t_"); + writer.newLine(); + } + id++; + } + writer.flush(); + writer.close(); + reader.close(); + + return cnt; + } catch (IOException e) { + e.printStackTrace(); + } + + return -1; + + } + +} diff --git a/dependencyParser/experimental/mate-tools/src/is2/util/DB.java b/dependencyParser/experimental/mate-tools/src/is2/util/DB.java new file mode 100755 index 0000000..30fd231 --- /dev/null +++ b/dependencyParser/experimental/mate-tools/src/is2/util/DB.java @@ -0,0 +1,78 @@ +package is2.util; + +import java.util.Calendar; +import java.util.GregorianCalendar; + +public class DB { + + private static final String ARROW = " -> "; + private static final String LEER = " "; + private static final String BIG = " "; + + private static boolean debug = true; + + final static public void println(Object err) { + + if (!debug) + return; + + StackTraceElement[] ste = new Exception().getStackTrace(); + + StringBuffer msg = new StringBuffer(); + msg.append((getDate().append(LEER).substring(0, 10))); + msg.append(' '); + msg.append(ste[1].getClassName() + " " + ste[1].getLineNumber()); + msg.append(':'); + msg.append(ste[1].getMethodName()); + msg.append(ARROW); + + int l = 55 - msg.length(); + if (l < 0) + l = 0; + msg.append(BIG.substring(0, l)); + + // if ((m_depth >= 0) && (m_depth < (BIG.length()) )) { + // vDebugMessage.append(BIG.substring(0, m_depth*2)); + // } + + msg.append(err); + + System.err.println(msg); + + } + + final static public void prints(Object err) { + + if (!debug) + return; + System.err.println(err); + + } + + final private static StringBuffer getDate() { + // if (Preferences.s_debug <= BDebug.FAIL) return s_sb; + + GregorianCalendar s_cal = new GregorianCalendar(); + StringBuffer sb = new StringBuffer(); + // sb.append(s_cal.get(Calendar.HOUR_OF_DAY)); + // sb.append('_'); + sb.append(s_cal.get(Calendar.MINUTE)); + sb.append('.'); + sb.append(s_cal.get(Calendar.SECOND)); + sb.append('.'); + sb.append(s_cal.get(Calendar.MILLISECOND)); + + return sb; + } + + public static void setDebug(boolean b) { + debug = b; + + } + + public static boolean getDebug() { + + return debug; + } + +} diff --git a/dependencyParser/experimental/mate-tools/src/is2/util/Edges.java b/dependencyParser/experimental/mate-tools/src/is2/util/Edges.java new file mode 100644 index 0000000..2457cae --- /dev/null +++ b/dependencyParser/experimental/mate-tools/src/is2/util/Edges.java @@ -0,0 +1,197 @@ +/** + * + */ +package is2.util; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; +import java.util.Comparator; +import java.util.HashMap; +import java.util.Map.Entry; + +/** + * @author Dr. Bernd Bohnet, 13.05.2009; + * + * + */ +public final class Edges { + + private static short[][][] edges; + private static HashMap<Short, Integer> labelCount = new HashMap<Short, Integer>(); + + private static HashMap<String, Integer> slabelCount = new HashMap<String, Integer>(); + + static short[] def = new short[1]; + + private Edges() { + } + + /** + * @param length + */ + public static void init(int length) { + edges = new short[length][length][]; + } + + public static void findDefault() { + + int best = 0; + + for (Entry<Short, Integer> e : labelCount.entrySet()) { + + if (best < e.getValue()) { + best = e.getValue(); + def[0] = e.getKey(); + } + } + + // labelCount=null; + // String[] types = new String[mf.getFeatureCounter().get(PipeGen.REL)]; + // for (Entry<String, Integer> e : + // MFO.getFeatureSet().get(PipeGen.REL).entrySet()) types[e.getValue()] + // = e.getKey(); + + is2.util.DB.println("set default label to " + def[0] + " "); + + // System.out.println("found default "+def[0]); + + } + + final static public void put(int pos1, int pos2, short label) { + putD(pos1, pos2, label); + // putD(pos2, pos1,!dir, label); + } + + final static public void putD(int pos1, int pos2, short label) { + + Integer lc = labelCount.get(label); + if (lc == null) + labelCount.put(label, 1); + else + labelCount.put(label, lc + 1); + + String key = pos1 + "-" + pos2 + label; + Integer lcs = slabelCount.get(key); + if (lcs == null) + slabelCount.put(key, 1); + else + slabelCount.put(key, lcs + 1); + + if (edges[pos1][pos2] == null) { + edges[pos1][pos2] = new short[1]; + edges[pos1][pos2][0] = label; + + // edgesh[pos1][pos2][dir?0:1] = new TIntHashSet(2); + // edgesh[pos1][pos2][dir?0:1].add(label); + } else { + short labels[] = edges[pos1][pos2]; + for (short l : labels) { + // contains label already? + if (l == label) + return; + } + + short[] nlabels = new short[labels.length + 1]; + System.arraycopy(labels, 0, nlabels, 0, labels.length); + nlabels[labels.length] = label; + edges[pos1][pos2] = nlabels; + + // edgesh[pos1][pos2][dir?0:1].add(label); + } + } + + final static public short[] get(int pos1, int pos2) { + + if (pos1 < 0 || pos2 < 0 || edges[pos1][pos2] == null) + return def; + return edges[pos1][pos2]; + } + + /** + * @param dis + */ + static public void write(DataOutputStream d) throws IOException { + + int len = edges.length; + d.writeShort(len); + + for (int p1 = 0; p1 < len; p1++) { + for (int p2 = 0; p2 < len; p2++) { + if (edges[p1][p2] == null) + d.writeShort(0); + else { + d.writeShort(edges[p1][p2].length); + for (int l = 0; l < edges[p1][p2].length; l++) { + d.writeShort(edges[p1][p2][l]); + } + + } + } + } + + d.writeShort(def[0]); + + } + + /** + * @param dis + */ + public static void read(DataInputStream d) throws IOException { + int len = d.readShort(); + + edges = new short[len][len][]; + for (int p1 = 0; p1 < len; p1++) { + for (int p2 = 0; p2 < len; p2++) { + int ll = d.readShort(); + if (ll == 0) { + edges[p1][p2] = null; + } else { + edges[p1][p2] = new short[ll]; + for (int l = 0; l < ll; l++) { + edges[p1][p2][l] = d.readShort(); + } + } + } + } + + def[0] = d.readShort(); + + } + + public static class C implements Comparator<Short> { + + public C() { + super(); + } + + String _key; + + public C(String key) { + super(); + _key = key; + } + + /* + * (non-Javadoc) + * + * @see java.util.Comparator#compare(java.lang.Object, java.lang.Object) + */ + @Override + public int compare(Short l1, Short l2) { + + // int c1 = labelCount.get(l1); + // int c2 = labelCount.get(l2); + // if (true) return c1==c2?0:c1>c2?-1:1; + + int x1 = slabelCount.get(_key + l1.shortValue()); + int x2 = slabelCount.get(_key + l2.shortValue()); + // System.out.println(x1+" "+x2); + + return x1 == x2 ? 0 : x1 > x2 ? -1 : 1; + + } + + } + +} diff --git a/dependencyParser/experimental/mate-tools/src/is2/util/Evaluator.java b/dependencyParser/experimental/mate-tools/src/is2/util/Evaluator.java new file mode 100644 index 0000000..f75fc54 --- /dev/null +++ b/dependencyParser/experimental/mate-tools/src/is2/util/Evaluator.java @@ -0,0 +1,603 @@ +package is2.util; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.Comparator; +import java.util.HashMap; +import java.util.Hashtable; +import java.util.Map.Entry; + +//import org.apache.commons.math.stat.inference.TestUtils; + +import is2.data.Parse; +import is2.data.SentenceData09; +import is2.io.CONLLReader09; + +public class Evaluator { + + public static void main(String[] args) { + + Options options = new Options(args); + + if (options.eval && options.significant1 == null) { + + evaluate(options.goldfile, options.outfile); + + } + /* + * else if (options.significant1!=null && options.significant2!=null ) { + * + * System.out.println("compare1 "+options.significant1); + * System.out.println("compare2 "+options.significant2); + * System.out.println("gold "+options.goldfile); + * + * Results r1 = evaluate(options.goldfile, options.significant1,false); + * + * System.out.println("file 1 done "); + * + * Results r2 = evaluate(options.goldfile, options.significant2,false); + * + * double[] s1 = new double[r1.correctHead.size()]; double[] s2 = new + * double[r1.correctHead.size()]; + * + * for(int k=0;k<r1.correctHead.size();k++) { s1[k] = + * r1.correctHead.get(k); s2[k] = r2.correctHead.get(k); } + * + * try { double p = TestUtils.pairedTTest(s1, s2); + * System.out.print("significant to "+p); } catch (Exception e) { + * e.printStackTrace(); } + * + * // significant(options.significant1, options.significant2) ; + * + * + * } + */ + else if (options.significant1 != null) { + evaluate(options.goldfile, options.outfile, true); + + } + + } + + /** + * + * @param act_file + * @param pred_file + * @param what + * top, pos, length, mor + */ + public static void evaluateTagger(String act_file, String pred_file, String what) { + + CONLLReader09 goldReader = new CONLLReader09(act_file); + + CONLLReader09 predictedReader = new CONLLReader09(); + predictedReader.startReading(pred_file); + + Hashtable<String, Integer> errors = new Hashtable<String, Integer>(); + Hashtable<String, StringBuffer> words = new Hashtable<String, StringBuffer>(); + + int total = 0, numsent = 0, corrT = 0; + SentenceData09 goldInstance = goldReader.getNext(); + SentenceData09 predInstance = predictedReader.getNext(); + + HashMap<Integer, int[]> correctL = new HashMap<Integer, int[]>(); + HashMap<String, int[]> pos = new HashMap<String, int[]>(); + HashMap<String, int[]> mor = new HashMap<String, int[]>(); + + float correctM = 0; + ; + + while (goldInstance != null) { + + int instanceLength = goldInstance.length(); + + if (instanceLength != predInstance.length()) + System.out.println("Lengths do not match on sentence " + numsent); + + String gold[] = goldInstance.gpos; + String pred[] = predInstance.ppos; + + String goldM[] = goldInstance.ofeats; + String predM[] = predInstance.pfeats; + + // NOTE: the first item is the root info added during + // nextInstance(), so we skip it. + + for (int i = 1; i < instanceLength; i++) { + + int[] cwr = correctL.get(i); + if (cwr == null) { + cwr = new int[2]; + correctL.put(i, cwr); + } + cwr[1]++; + int[] correctPos = pos.get(gold[i]); + if (correctPos == null) { + correctPos = new int[2]; + pos.put(gold[i], correctPos); + } + correctPos[1]++; + + int[] correctMor = mor.get(goldM[i]); + if (correctMor == null) { + correctMor = new int[2]; + mor.put(goldM[i], correctMor); + } + + if ((goldM[i].equals("_") && predM[i] == null) || goldM[i].equals(predM[i])) { + correctM++; + correctMor[0]++; + } + correctMor[1]++; + + if (gold[i].equals(pred[i])) { + corrT++; + cwr[0]++; + correctPos[0]++; + } else { + String key = "gold: '" + gold[i] + "' pred: '" + pred[i] + "'"; + Integer cnt = errors.get(key); + StringBuffer errWrd = words.get(key); + if (cnt == null) { + errors.put(key, 1); + words.put(key, new StringBuffer().append(goldInstance.forms[i])); + } else { + errors.put(key, cnt + 1); + errWrd.append(" " + goldInstance.forms[i]); + } + } + + } + total += instanceLength - 1; // Subtract one to not score fake root + // token + + numsent++; + + goldInstance = goldReader.getNext(); + predInstance = predictedReader.getNext(); + } + + // System.out.println("error gold:"+goldPos[i]+" pred:"+predPos[i]+" + // "+goldInstance.forms[i]+" snt "+numsent+" i:"+i); + ArrayList<Entry<String, Integer>> opsl = new ArrayList<Entry<String, Integer>>(); + for (Entry<String, Integer> e : errors.entrySet()) { + opsl.add(e); + } + + Collections.sort(opsl, new Comparator<Entry<String, Integer>>() { + + @Override + public int compare(Entry<String, Integer> o1, Entry<String, Integer> o2) { + + return o1.getValue() == o2.getValue() ? 0 : o1.getValue() > o2.getValue() ? -1 : 1; + } + + }); + + if (what.contains("top")) { + System.out.println("top most errors:"); + for (Entry<String, Integer> e : opsl) { + if (e.getValue() > 10) + System.out.println(e.getKey() + " " + e.getValue() + " context: " + words.get(e.getKey())); + } + } + + if (what.contains("length")) { + for (int k = 0; k < 60; k++) { + int[] cwr = correctL.get(k); + if (cwr == null) + continue; + System.out.print(k + ":" + cwr[0] + ":" + cwr[1] + ":" + + (((float) Math.round(10000 * (cwr[0]) / cwr[1])) / 100) + " "); + } + System.out.println(); + } + + if (what.contains("pos")) { + for (Entry<String, int[]> e : pos.entrySet()) { + + System.out.print(e.getKey() + ":" + e.getValue()[0] + ":" + e.getValue()[1] + ":" + + (((float) Math.round(10000 * ((float) e.getValue()[0]) / (e.getValue()[1]))) / 100) + " "); + + } + System.out.print(""); + } + System.out.println(); + if (what.contains("mor")) { + for (Entry<String, int[]> e : mor.entrySet()) { + + System.out.print(e.getKey() + ":" + e.getValue()[0] + ":" + e.getValue()[1] + ":" + + (((float) Math.round(10000 * ((float) e.getValue()[0]) / (e.getValue()[1]))) / 100) + " "); + + } + System.out.print(""); + } + System.out.println("\nTokens: " + total + " Correct: " + corrT + " " + (float) corrT / total + " Correct M.:" + + (int) correctM + " morphology " + (correctM / total)); + } + + public static int errors(SentenceData09 s, boolean uas) { + + int errors = 0; + for (int k = 1; k < s.length(); k++) { + + if (s.heads[k] != s.pheads[k] && (uas || !s.labels[k].equals(s.plabels[k]))) { + errors++; + } + } + return errors; + } + + public static int errors(SentenceData09 s1, SentenceData09 s2, HashMap<String, Integer> r1, + HashMap<String, Integer> r2) { + + int errors = 0; + for (int k = 1; k < s1.length(); k++) { + + if (s1.heads[k] != s1.pheads[k] || (!s1.labels[k].equals(s1.plabels[k]))) { + + if (s2.heads[k] != s2.pheads[k] || (!s2.labels[k].equals(s2.plabels[k]))) { + + // equal do nothing + + } else { + + Integer cnt = r1.get(s1.labels[k]); + if (cnt == null) + cnt = 0; + cnt++; + r1.put(s1.labels[k], cnt); + + } + + } + + if (s2.heads[k] != s2.pheads[k] || (!s2.labels[k].equals(s2.plabels[k]))) { + + if (s1.heads[k] != s1.pheads[k] || (!s1.labels[k].equals(s1.plabels[k]))) { + + // equal do nothing + + } else { + + Integer cnt = r2.get(s2.labels[k]); + if (cnt == null) + cnt = 0; + cnt++; + r2.put(s2.labels[k], cnt); + + } + + } + } + return errors; + } + + public static final String PUNCT = "!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~"; + + public static class Results { + + public int total; + public int corr; + public float las; + public float ula; + public float lpas; + public float upla; + + ArrayList<Double> correctHead; + } + + public static Results evaluate(String act_file, String pred_file) { + return evaluate(act_file, pred_file, true); + } + + public static Results evaluate(String act_file, String pred_file, boolean printEval) { + return evaluate(act_file, pred_file, printEval, false); + } + + public static Results evaluate(String act_file, String pred_file, boolean printEval, boolean sig) { + + CONLLReader09 goldReader = new CONLLReader09(act_file, -1); + CONLLReader09 predictedReader = new CONLLReader09(pred_file, -1); + + int total = 0, corr = 0, corrL = 0, Ptotal = 0, Pcorr = 0, PcorrL = 0, BPtotal = 0, BPcorr = 0, BPcorrL = 0, + corrLableAndPos = 0, corrHeadAndPos = 0; + int corrLableAndPosP = 0, corrLableAndPosC = 0; + int numsent = 0, corrsent = 0, corrsentL = 0, Pcorrsent = 0, PcorrsentL = 0; + ; + int proj = 0, nonproj = 0, pproj = 0, pnonproj = 0, nonProjOk = 0, nonProjWrong = 0; + + int correctChnWoPunc = 0, correctLChnWoPunc = 0, CPtotal = 0; + SentenceData09 goldInstance = goldReader.getNext(); + + SentenceData09 predInstance = predictedReader.getNext(); + HashMap<String, Integer> label = new HashMap<String, Integer>(); + HashMap<String, Integer> labelCount = new HashMap<String, Integer>(); + HashMap<String, Integer> labelCorrect = new HashMap<String, Integer>(); + HashMap<String, Integer> falsePositive = new HashMap<String, Integer>(); + + // does the node have the correct head? + ArrayList<Double> correctHead = new ArrayList<Double>(); + + while (goldInstance != null) { + + int instanceLength = goldInstance.length(); + + if (instanceLength != predInstance.length()) + System.out.println("Lengths do not match on sentence " + numsent); + + int[] goldHeads = goldInstance.heads; + String[] goldLabels = goldInstance.labels; + int[] predHeads = predInstance.pheads; + String[] predLabels = predInstance.plabels; + + boolean whole = true; + boolean wholeL = true; + + boolean Pwhole = true; + boolean PwholeL = true; + + int corrLabels = 0; + + // NOTE: the first item is the root info added during + // nextInstance(), so we skip it. + + int punc = 0, bpunc = 0, totalChnWoPunc = 0; + for (int i = 1; i < instanceLength; i++) { + + Parse p = new Parse(predHeads.length); + for (int k = 0; k < p.heads.length; k++) + p.heads[k] = (short) predHeads[k]; + + Parse g = new Parse(predHeads.length); + for (int k = 0; k < g.heads.length; k++) + g.heads[k] = (short) goldHeads[k]; + + { + Integer count = labelCount.get(goldLabels[i]); + if (count == null) + count = 0; + + count++; + + labelCount.put(goldLabels[i], count); + + if (goldLabels[i].equals(predLabels[i])) { + Integer correct = labelCorrect.get(goldLabels[i]); + if (correct == null) + correct = 0; + correct++; + labelCorrect.put(goldLabels[i], correct); + + } else { + Integer fp = falsePositive.get(predLabels[i]); + if (fp == null) + fp = 0; + fp++; + falsePositive.put(predLabels[i], fp); + } + + } + + { + + } + + if (goldLabels[i].startsWith("PMOD")) { + } + + boolean tlas = false; + if (predHeads[i] == goldHeads[i]) { + corr++; + + if (goldInstance.gpos[i].equals(predInstance.ppos[i])) + corrHeadAndPos++; + if (goldLabels[i].equals(predLabels[i])) { + corrL++; + // if (predLabels[i].startsWith("PMOD")) + corrLabels++; + // else correctHead.add(0); + if (goldInstance.gpos[i].equals(predInstance.ppos[i])) { + tlas = true; + corrLableAndPos++; + } + } else { + // correctHead.add(0); + // System.out.println(numsent+" error gold + // "+goldLabels[i]+" "+predLabels[i]+" head + // "+goldHeads[i]+" child "+i); + wholeL = false; + } + } else { + + // correctHead.add(0); + + // System.out.println(numsent+"error gold "+goldLabels[i]+" + // "+predLabels[i]+" head "+goldHeads[i]+" child "+i); + whole = false; + wholeL = false; + + Integer count = label.get(goldLabels[i]); + + if (count == null) + count = 0; + count++; + label.put(goldLabels[i], count); + + Math.abs(goldInstance.heads[i] - i); + } + + if (!("!\"#$%&''()*+,-./:;<=>?@[\\]^_{|}~``".contains(goldInstance.forms[i]))) { + + if (predHeads[i] == goldHeads[i]) { + BPcorr++; + + if (goldLabels[i].equals(predLabels[i])) { + BPcorrL++; + } else { + // System.out.println(numsent+" error gold + // "+goldLabels[i]+" "+predLabels[i]+" head + // "+goldHeads[i]+" child "+i); + // PwholeL = false; + } + } else { + // System.out.println(numsent+"error gold + // "+goldLabels[i]+" "+predLabels[i]+" head + // "+goldHeads[i]+" child "+i); + // Pwhole = false; wholeL = false; + } + + } else + bpunc++; + + if (!(",.:''``".contains(goldInstance.forms[i]))) { + + if (predHeads[i] == goldHeads[i]) { + if (goldInstance.gpos[i].equals(predInstance.ppos[i])) { + } + Pcorr++; + + if (goldLabels[i].equals(predLabels[i])) { + PcorrL++; + if (goldInstance.gpos[i].equals(predInstance.ppos[i])) + corrLableAndPosP++; + + } else { + // System.out.println(numsent+" error gold + // "+goldLabels[i]+" "+predLabels[i]+" head + // "+goldHeads[i]+" child "+i); + PwholeL = false; + } + } else { + // System.out.println(numsent+"error gold + // "+goldLabels[i]+" "+predLabels[i]+" head + // "+goldHeads[i]+" child "+i); + Pwhole = false; + PwholeL = false; + } + + } else + punc++; + + if (!(goldInstance.gpos[i].toLowerCase().startsWith("pu"))) { + if (predHeads[i] == goldHeads[i]) { + correctChnWoPunc++; + + if (goldLabels[i].equals(predLabels[i])) { + correctLChnWoPunc++; + if (goldInstance.gpos[i].equals(predInstance.ppos[i])) + corrLableAndPosC++; + } else { + // System.out.println(numsent+" error gold + // "+goldLabels[i]+" "+predLabels[i]+" head + // "+goldHeads[i]+" child "+i); + // PwholeL = false; + } + } else { + // System.out.println(numsent+"error gold + // "+goldLabels[i]+" "+predLabels[i]+" head + // "+goldHeads[i]+" child "+i); + // Pwhole = false; PwholeL = false; + } + + } else + totalChnWoPunc++; + + if (sig) { + if (tlas) + System.out.println("1\t"); + else + System.out.println("0\t"); + } + + } + total += ((instanceLength - 1)); // Subtract one to not score fake + // root token + + Ptotal += ((instanceLength - 1) - punc); + BPtotal += ((instanceLength - 1) - bpunc); + CPtotal += ((instanceLength - 1) - totalChnWoPunc); + if (whole) + corrsent++; + if (wholeL) + corrsentL++; + if (Pwhole) + Pcorrsent++; + if (PwholeL) + PcorrsentL++; + numsent++; + + goldInstance = goldReader.getNext(); + predInstance = predictedReader.getNext(); + correctHead.add((double) corrLabels / (instanceLength - 1)); + // System.out.println(""+((double)corrLabels/(instanceLength - 1))); + } + + Results r = new Results(); + + r.correctHead = correctHead; + int mult = 100000, diff = 1000; + + r.total = total; + r.corr = corr; + r.las = (float) Math.round(((double) corrL / total) * mult) / diff; + r.ula = (float) Math.round(((double) corr / total) * mult) / diff; + r.lpas = (float) Math.round(((double) corrLableAndPos / total) * mult) / diff; + r.upla = (float) Math.round(((double) corrHeadAndPos / total) * mult) / diff; + float tlasp = (float) Math.round(((double) corrLableAndPosP / Ptotal) * mult) / diff; + float tlasc = (float) Math.round(((double) corrLableAndPosC / Ptotal) * mult) / diff; + + // System.out.print("Total: " + total+" \tCorrect: " + corr+" "); + System.out.print(" LAS/Total/UAS/Total: " + r.las + "/" + + (double) Math.round(((double) corrsentL / numsent) * mult) / diff + "/" + r.ula + "/" + + (double) Math.round(((double) corrsent / numsent) * mult) / diff + " LPAS/UPAS " + r.lpas + "/" + + r.upla); + + System.out.println("; without . " + (double) Math.round(((double) PcorrL / Ptotal) * mult) / diff + "/" + + (double) Math.round(((double) PcorrsentL / numsent) * mult) / diff + "/" + + (double) Math.round(((double) Pcorr / Ptotal) * mult) / diff + "/" + + (double) Math.round(((double) Pcorrsent / numsent) * mult) / diff + " TLAS " + tlasp + " V2 LAS/UAS " + + (double) Math.round(((double) BPcorrL / BPtotal) * mult) / diff + "/" + + (double) Math.round(((double) BPcorr / BPtotal) * mult) / diff + " CHN LAS/UAS " + + (double) Math.round(((double) correctLChnWoPunc / CPtotal) * mult) / diff + "/" + + (double) Math.round(((double) correctChnWoPunc / CPtotal) * mult) / diff + " TLAS " + tlasc); + + float precisionNonProj = (nonProjOk) / ((float) nonProjOk + nonProjWrong); + float recallNonProj = ((float) nonProjOk) / ((float) (nonproj)); + System.out.println("proj " + proj + " nonp " + nonproj + "; predicted proj " + pproj + " non " + pnonproj + + "; nonp correct " + nonProjOk + " nonp wrong " + nonProjWrong + + " precision=(nonProjOk)/(non-projOk+nonProjWrong): " + precisionNonProj + " recall=nonProjOk/nonproj=" + + recallNonProj + " F=" + (2 * precisionNonProj * recallNonProj) / (precisionNonProj + recallNonProj)); + + if (!printEval) + return r; + + new HashMap<String, Integer>(); + new HashMap<String, Integer>(); + + System.out.println("label\ttp\tcount\trecall\t\ttp\tfp+tp\tprecision\t F-Score "); + + for (Entry<String, Integer> e : labelCount.entrySet()) { + + int tp = labelCorrect.get(e.getKey()) == null ? 0 : labelCorrect.get(e.getKey()).intValue(); + Integer count = labelCount.get(e.getKey()); + int fp = falsePositive.get(e.getKey()) == null ? 0 : falsePositive.get(e.getKey()).intValue(); + System.out.println(e.getKey() + "\t" + tp + "\t" + count + "\t" + roundPercent((float) tp / count) + "\t\t" + + tp + "\t" + (fp + tp) + "\t" + roundPercent((float) tp / (fp + tp)) + "\t\t" + + roundPercent((((float) tp / count)) + (float) tp / (fp + tp)) / 2F); // +totalD + } + + return r; + } + + public static float round(double v) { + + return Math.round(v * 10000F) / 10000F; + } + + public static float roundPercent(double v) { + + return Math.round(v * 10000F) / 100F; + } + +} diff --git a/dependencyParser/experimental/mate-tools/src/is2/util/EvaluatorTagger.java b/dependencyParser/experimental/mate-tools/src/is2/util/EvaluatorTagger.java new file mode 100644 index 0000000..c1f88f4 --- /dev/null +++ b/dependencyParser/experimental/mate-tools/src/is2/util/EvaluatorTagger.java @@ -0,0 +1,707 @@ +package is2.util; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.Comparator; +import java.util.HashMap; +import java.util.Hashtable; +import java.util.Map.Entry; + +import org.apache.commons.math.stat.inference.TestUtils; + +import is2.data.Parse; +import is2.data.SentenceData09; +import is2.io.CONLLReader09; + +public class EvaluatorTagger { + + public static int TAGGER = 1; + public static int what = 0; + + public static void main(String[] args) { + + Options options = new Options(args); + + what = options.tt; + + if (options.eval && options.significant1 == null) { + + evaluate(options.goldfile, options.outfile); + + } else if (options.significant1 != null && options.significant2 != null) { + + System.out.println("compare1 " + options.significant1); + System.out.println("compare2 " + options.significant2); + System.out.println("gold " + options.goldfile); + + check(options.significant1, options.significant2, options.testfile); + + Results r1 = evaluate(options.goldfile, options.significant1, false); + + System.out.println("file 1 done "); + + Results r2 = evaluate(options.goldfile, options.significant2, false); + + double[] s1 = new double[r1.correctHead.size()]; + double[] s2 = new double[r1.correctHead.size()]; + + for (int k = 0; k < r1.correctHead.size(); k++) { + s1[k] = r1.correctHead.get(k); + s2[k] = r2.correctHead.get(k); + } + + try { + double p = TestUtils.pairedTTest(s1, s2); + System.out.print("significant to " + p); + } catch (Exception e) { + e.printStackTrace(); + } + + // significant(options.significant1, options.significant2) ; + + } else if (options.significant1 != null) { + evaluate(options.goldfile, options.outfile, true); + + } + + } + + private static void check(String s1, String s2, String pos) { + CONLLReader09 s1reader = new CONLLReader09(s1, -1); + SentenceData09 s1i = s1reader.getNext(); + CONLLReader09 s2reader = new CONLLReader09(s2, -1); + SentenceData09 s2i = s2reader.getNext(); + + HashMap<String, HashMap<String, Integer>> labchanged = new HashMap<String, HashMap<String, Integer>>(); + + int snt = 0; + + while (s1i != null) { + + snt++; + int good = 0, wrong = 0; + + for (int w = 1; w < s1i.length(); w++) { + + // p(s1:head-pos wrong s2:head-pos good => dep-wrong => + // dep-good) + + if (s1i.gpos[s1i.heads[w]].equals(pos) && !!s1i.ppos[s1i.heads[w]].equals(s1i.gpos[s1i.heads[w]]) + && s2i.ppos[s2i.heads[w]].equals(s2i.gpos[s2i.heads[w]])) { + + HashMap<String, Integer> changed = labchanged.get(s2i.labels[w]); + if (changed == null) { + changed = new HashMap<String, Integer>(); + labchanged.put(s2i.labels[w], changed); + } + if (!(s1i.plabels[w].equals(s1i.labels[w]) && s1i.pheads[w] == s1i.heads[w]) + && (s2i.plabels[w].equals(s2i.labels[w]) && s2i.pheads[w] == s2i.heads[w])) { + good++; + Integer goodL = changed.get("G"); + if (goodL == null) + goodL = 0; + goodL += 1; + changed.put("G", goodL); + } else { + wrong++; + Integer wrongL = changed.get("W"); + if (wrongL == null) + wrongL = 0; + wrongL += 1; + changed.put("W", wrongL); + } + + } + + } + + if (good != 0 || wrong != 0) + System.out.println(snt + " changed yes:" + good + " no:" + wrong); + s1i = s1reader.getNext(); + s2i = s2reader.getNext(); + } + System.out.println("" + labchanged); + + } + + /** + * + * @param act_file + * @param pred_file + * @param what + * top, pos, length, mor + */ + public static void evaluateTagger(String act_file, String pred_file, String what) { + + CONLLReader09 goldReader = new CONLLReader09(act_file); + + CONLLReader09 predictedReader = new CONLLReader09(); + predictedReader.startReading(pred_file); + + Hashtable<String, Integer> errors = new Hashtable<String, Integer>(); + Hashtable<String, StringBuffer> words = new Hashtable<String, StringBuffer>(); + + int total = 0, numsent = 0, corrT = 0; + SentenceData09 goldInstance = goldReader.getNext(); + SentenceData09 predInstance = predictedReader.getNext(); + + HashMap<Integer, int[]> correctL = new HashMap<Integer, int[]>(); + HashMap<String, int[]> pos = new HashMap<String, int[]>(); + HashMap<String, int[]> mor = new HashMap<String, int[]>(); + + float correctM = 0; + ; + + while (goldInstance != null) { + + int instanceLength = goldInstance.length(); + + if (instanceLength != predInstance.length()) + System.out.println("Lengths do not match on sentence " + numsent); + + String gold[] = goldInstance.gpos; + String pred[] = predInstance.ppos; + + String goldM[] = goldInstance.ofeats; + String predM[] = predInstance.pfeats; + + // NOTE: the first item is the root info added during + // nextInstance(), so we skip it. + + for (int i = 1; i < instanceLength; i++) { + + int[] cwr = correctL.get(i); + if (cwr == null) { + cwr = new int[2]; + correctL.put(i, cwr); + } + cwr[1]++; + int[] correctPos = pos.get(gold[i]); + if (correctPos == null) { + correctPos = new int[2]; + pos.put(gold[i], correctPos); + } + correctPos[1]++; + + int[] correctMor = mor.get(goldM[i]); + if (correctMor == null) { + correctMor = new int[2]; + mor.put(goldM[i], correctMor); + } + + if ((goldM[i].equals("_") && predM[i] == null) || goldM[i].equals(predM[i])) { + correctM++; + correctMor[0]++; + } + correctMor[1]++; + + if (gold[i].equals(pred[i])) { + corrT++; + cwr[0]++; + correctPos[0]++; + } else { + String key = "gold: '" + gold[i] + "' pred: '" + pred[i] + "'"; + Integer cnt = errors.get(key); + StringBuffer errWrd = words.get(key); + if (cnt == null) { + errors.put(key, 1); + words.put(key, new StringBuffer().append(goldInstance.forms[i])); + } else { + errors.put(key, cnt + 1); + errWrd.append(" " + goldInstance.forms[i]); + } + } + + } + total += instanceLength - 1; // Subtract one to not score fake root + // token + + numsent++; + + goldInstance = goldReader.getNext(); + predInstance = predictedReader.getNext(); + } + + // System.out.println("error gold:"+goldPos[i]+" pred:"+predPos[i]+" + // "+goldInstance.forms[i]+" snt "+numsent+" i:"+i); + ArrayList<Entry<String, Integer>> opsl = new ArrayList<Entry<String, Integer>>(); + for (Entry<String, Integer> e : errors.entrySet()) { + opsl.add(e); + } + + Collections.sort(opsl, new Comparator<Entry<String, Integer>>() { + + @Override + public int compare(Entry<String, Integer> o1, Entry<String, Integer> o2) { + + return o1.getValue() == o2.getValue() ? 0 : o1.getValue() > o2.getValue() ? -1 : 1; + } + + }); + + if (what.contains("top")) { + System.out.println("top most errors:"); + for (Entry<String, Integer> e : opsl) { + if (e.getValue() > 10) + System.out.println(e.getKey() + " " + e.getValue() + " context: " + words.get(e.getKey())); + } + } + + if (what.contains("length")) { + for (int k = 0; k < 60; k++) { + int[] cwr = correctL.get(k); + if (cwr == null) + continue; + System.out.print(k + ":" + cwr[0] + ":" + cwr[1] + ":" + + (((float) Math.round(10000 * (cwr[0]) / cwr[1])) / 100) + " "); + } + System.out.println(); + } + + if (what.contains("pos")) { + for (Entry<String, int[]> e : pos.entrySet()) { + + System.out.print(e.getKey() + ":" + e.getValue()[0] + ":" + e.getValue()[1] + ":" + + (((float) Math.round(10000 * ((float) e.getValue()[0]) / (e.getValue()[1]))) / 100) + " "); + + } + System.out.print(""); + } + System.out.println(); + if (what.contains("mor")) { + for (Entry<String, int[]> e : mor.entrySet()) { + + System.out.print(e.getKey() + ":" + e.getValue()[0] + ":" + e.getValue()[1] + ":" + + (((float) Math.round(10000 * ((float) e.getValue()[0]) / (e.getValue()[1]))) / 100) + " "); + + } + System.out.print(""); + } + System.out.println("\nTokens: " + total + " Correct: " + corrT + " " + (float) corrT / total + " Correct M.:" + + (int) correctM + " morphology " + (correctM / total)); + } + + public static int errors(SentenceData09 s, boolean uas) { + + int errors = 0; + for (int k = 1; k < s.length(); k++) { + + if (s.heads[k] != s.pheads[k] && (uas || !s.labels[k].equals(s.plabels[k]))) { + errors++; + } + } + return errors; + } + + public static int errors(SentenceData09 s1, SentenceData09 s2, HashMap<String, Integer> r1, + HashMap<String, Integer> r2) { + + int errors = 0; + for (int k = 1; k < s1.length(); k++) { + + if (s1.heads[k] != s1.pheads[k] || (!s1.labels[k].equals(s1.plabels[k]))) { + + if (s2.heads[k] != s2.pheads[k] || (!s2.labels[k].equals(s2.plabels[k]))) { + + // equal do nothing + + } else { + + Integer cnt = r1.get(s1.labels[k]); + if (cnt == null) + cnt = 0; + cnt++; + r1.put(s1.labels[k], cnt); + + } + + } + + if (s2.heads[k] != s2.pheads[k] || (!s2.labels[k].equals(s2.plabels[k]))) { + + if (s1.heads[k] != s1.pheads[k] || (!s1.labels[k].equals(s1.plabels[k]))) { + + // equal do nothing + + } else { + + Integer cnt = r2.get(s2.labels[k]); + if (cnt == null) + cnt = 0; + cnt++; + r2.put(s2.labels[k], cnt); + + } + + } + } + return errors; + } + + public static final String PUNCT = "!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~"; + + public static class Results { + + public int total; + public int corr; + public float las; + public float ula; + public float lpas; + public float upla; + + ArrayList<Double> correctHead; + } + + public static Results evaluate(String act_file, String pred_file) { + return evaluate(act_file, pred_file, true); + } + + public static Results evaluate(String act_file, String pred_file, boolean printEval) { + return evaluate(act_file, pred_file, printEval, false); + } + + public static Results evaluate(String act_file, String pred_file, boolean printEval, boolean sig) { + + CONLLReader09 goldReader = new CONLLReader09(act_file, -1); + CONLLReader09 predictedReader = new CONLLReader09(pred_file, -1); + + int total = 0, corr = 0, corrL = 0, Ptotal = 0, Pcorr = 0, PcorrL = 0, BPtotal = 0, BPcorr = 0, BPcorrL = 0, + corrLableAndPos = 0, corrHeadAndPos = 0; + int corrLableAndPosP = 0, corrLableAndPosC = 0; + int numsent = 0, corrsent = 0, corrsentL = 0, Pcorrsent = 0, PcorrsentL = 0; + ; + int proj = 0, nonproj = 0, pproj = 0, pnonproj = 0, nonProjOk = 0, nonProjWrong = 0; + + int correctChnWoPunc = 0, correctLChnWoPunc = 0, CPtotal = 0; + SentenceData09 goldInstance = goldReader.getNext(); + + SentenceData09 predInstance = predictedReader.getNext(); + HashMap<String, Integer> label = new HashMap<String, Integer>(); + HashMap<String, Integer> labelCount = new HashMap<String, Integer>(); + HashMap<String, Integer> labelCorrect = new HashMap<String, Integer>(); + HashMap<String, Integer> falsePositive = new HashMap<String, Integer>(); + HashMap<String, HashMap<String, Integer>> confusion = new HashMap<String, HashMap<String, Integer>>(); + + HashMap<String, HashMap<String, Integer>> posLabelAssign = new HashMap<String, HashMap<String, Integer>>(); + + // does the node have the correct head? + ArrayList<Double> correctHead = new ArrayList<Double>(); + + while (goldInstance != null) { + + int instanceLength = goldInstance.length(); + + if (instanceLength != predInstance.length()) + System.out.println("Lengths do not match on sentence " + numsent); + + int[] goldHeads = goldInstance.heads; + + String[] goldLabels, predLabels; + if (what == TAGGER) { + goldLabels = goldInstance.gpos; + predLabels = predInstance.ppos; + } else { + goldLabels = goldInstance.labels; + predLabels = predInstance.plabels; + } + + int[] predHeads = predInstance.pheads; + + boolean whole = true; + boolean wholeL = true; + + boolean Pwhole = true; + boolean PwholeL = true; + + int corrLabels = 0; + + // NOTE: the first item is the root info added during + // nextInstance(), so we skip it. + + int punc = 0, bpunc = 0, totalChnWoPunc = 0; + for (int i = 1; i < instanceLength; i++) { + + Parse p = new Parse(predHeads.length); + for (int k = 0; k < p.heads.length; k++) + p.heads[k] = (short) predHeads[k]; + + Parse g = new Parse(predHeads.length); + for (int k = 0; k < g.heads.length; k++) + g.heads[k] = (short) goldHeads[k]; + + HashMap<String, Integer> labelsNum = posLabelAssign.get(goldInstance.gpos[goldInstance.heads[i]]); + if (labelsNum == null) { + labelsNum = new HashMap<String, Integer>(); + posLabelAssign.put(goldInstance.gpos[goldInstance.heads[i]], labelsNum); + } + + Integer num = labelsNum.get(goldInstance.labels[i]); + if (num == null) + num = 0; + num++; + labelsNum.put(goldInstance.labels[i], num); + + Integer count = labelCount.get(goldLabels[i]); + if (count == null) + count = 0; + + count++; + + labelCount.put(goldLabels[i], count); + + if (goldLabels[i].equals(predLabels[i]) && (what == TAGGER || predHeads[i] == goldHeads[i])) { + Integer correct = labelCorrect.get(goldLabels[i]); + if (correct == null) + correct = 0; + correct++; + labelCorrect.put(goldLabels[i], correct); + + } else { + + Integer fp = falsePositive.get(predLabels[i]); + if (fp == null) + fp = 0; + fp++; + falsePositive.put(predLabels[i], fp); + + HashMap<String, Integer> conf = confusion.get(goldLabels[i]); + if (conf == null) + confusion.put(goldLabels[i], conf = new HashMap<String, Integer>()); + + conf.put(predLabels[i], conf.get(predLabels[i]) == null ? 1 : conf.get(predLabels[i]) + 1); + + } + + boolean tlas = false; + if (predHeads[i] == goldHeads[i]) { + corr++; + + if (goldInstance.gpos[i].equals(predInstance.ppos[i])) + corrHeadAndPos++; + if (goldLabels[i].equals(predLabels[i])) { + corrL++; + // if (predLabels[i].startsWith("PMOD")) + corrLabels++; + // else correctHead.add(0); + if (goldInstance.gpos[i].equals(predInstance.ppos[i])) { + tlas = true; + corrLableAndPos++; + } + } else { + // correctHead.add(0); + // System.out.println(numsent+" error gold + // "+goldLabels[i]+" "+predLabels[i]+" head + // "+goldHeads[i]+" child "+i); + wholeL = false; + } + } else { + + // correctHead.add(0); + + // System.out.println(numsent+"error gold "+goldLabels[i]+" + // "+predLabels[i]+" head "+goldHeads[i]+" child "+i); + whole = false; + wholeL = false; + + count = label.get(goldLabels[i]); + + if (count == null) + count = 0; + count++; + label.put(goldLabels[i], count); + + Math.abs(goldInstance.heads[i] - i); + } + + if (!("!\"#$%&''()*+,-./:;<=>?@[\\]^_{|}~``".contains(goldInstance.forms[i]))) { + + if (predHeads[i] == goldHeads[i]) { + BPcorr++; + + if (goldLabels[i].equals(predLabels[i])) { + BPcorrL++; + } else { + // System.out.println(numsent+" error gold + // "+goldLabels[i]+" "+predLabels[i]+" head + // "+goldHeads[i]+" child "+i); + // PwholeL = false; + } + } else { + // System.out.println(numsent+"error gold + // "+goldLabels[i]+" "+predLabels[i]+" head + // "+goldHeads[i]+" child "+i); + // Pwhole = false; wholeL = false; + } + + } else + bpunc++; + + if (!(",.:''``".contains(goldInstance.forms[i]))) { + + if (predHeads[i] == goldHeads[i]) { + if (goldInstance.gpos[i].equals(predInstance.ppos[i])) { + } + Pcorr++; + + if (goldLabels[i].equals(predLabels[i])) { + PcorrL++; + if (goldInstance.gpos[i].equals(predInstance.ppos[i])) + corrLableAndPosP++; + + } else { + // System.out.println(numsent+" error gold + // "+goldLabels[i]+" "+predLabels[i]+" head + // "+goldHeads[i]+" child "+i); + PwholeL = false; + } + } else { + // System.out.println(numsent+"error gold + // "+goldLabels[i]+" "+predLabels[i]+" head + // "+goldHeads[i]+" child "+i); + Pwhole = false; + PwholeL = false; + } + + } else + punc++; + + if (!(goldInstance.gpos[i].toLowerCase().startsWith("pu"))) { + if (predHeads[i] == goldHeads[i]) { + correctChnWoPunc++; + + if (goldLabels[i].equals(predLabels[i])) { + correctLChnWoPunc++; + if (goldInstance.gpos[i].equals(predInstance.ppos[i])) + corrLableAndPosC++; + } else { + // System.out.println(numsent+" error gold + // "+goldLabels[i]+" "+predLabels[i]+" head + // "+goldHeads[i]+" child "+i); + // PwholeL = false; + } + } else { + // System.out.println(numsent+"error gold + // "+goldLabels[i]+" "+predLabels[i]+" head + // "+goldHeads[i]+" child "+i); + // Pwhole = false; PwholeL = false; + } + + } else + totalChnWoPunc++; + + if (sig) { + if (tlas) + System.out.println("1\t"); + else + System.out.println("0\t"); + } + + } + total += ((instanceLength - 1)); // Subtract one to not score fake + // root token + + Ptotal += ((instanceLength - 1) - punc); + BPtotal += ((instanceLength - 1) - bpunc); + CPtotal += ((instanceLength - 1) - totalChnWoPunc); + if (whole) + corrsent++; + if (wholeL) + corrsentL++; + if (Pwhole) + Pcorrsent++; + if (PwholeL) + PcorrsentL++; + numsent++; + + goldInstance = goldReader.getNext(); + predInstance = predictedReader.getNext(); + correctHead.add((double) corrLabels / (instanceLength - 1)); + // System.out.println(""+((double)corrLabels/(instanceLength - 1))); + } + + Results r = new Results(); + + r.correctHead = correctHead; + int mult = 100000, diff = 1000; + + r.total = total; + r.corr = corr; + r.las = (float) Math.round(((double) corrL / total) * mult) / diff; + r.ula = (float) Math.round(((double) corr / total) * mult) / diff; + r.lpas = (float) Math.round(((double) corrLableAndPos / total) * mult) / diff; + r.upla = (float) Math.round(((double) corrHeadAndPos / total) * mult) / diff; + float tlasp = (float) Math.round(((double) corrLableAndPosP / Ptotal) * mult) / diff; + float tlasc = (float) Math.round(((double) corrLableAndPosC / Ptotal) * mult) / diff; + + // System.out.print("Total: " + total+" \tCorrect: " + corr+" "); + System.out.print(" LAS/Total/UAS/Total: " + r.las + "/" + + (double) Math.round(((double) corrsentL / numsent) * mult) / diff + "/" + r.ula + "/" + + (double) Math.round(((double) corrsent / numsent) * mult) / diff + " LPAS/UPAS " + r.lpas + "/" + + r.upla); + + System.out.println("; without . " + (double) Math.round(((double) PcorrL / Ptotal) * mult) / diff + "/" + + (double) Math.round(((double) PcorrsentL / numsent) * mult) / diff + "/" + + (double) Math.round(((double) Pcorr / Ptotal) * mult) / diff + "/" + + (double) Math.round(((double) Pcorrsent / numsent) * mult) / diff + " TLAS " + tlasp + " V2 LAS/UAS " + + (double) Math.round(((double) BPcorrL / BPtotal) * mult) / diff + "/" + + (double) Math.round(((double) BPcorr / BPtotal) * mult) / diff + " CHN LAS/UAS " + + (double) Math.round(((double) correctLChnWoPunc / CPtotal) * mult) / diff + "/" + + (double) Math.round(((double) correctChnWoPunc / CPtotal) * mult) / diff + " TLAS " + tlasc); + + float precisionNonProj = (nonProjOk) / ((float) nonProjOk + nonProjWrong); + float recallNonProj = ((float) nonProjOk) / ((float) (nonproj)); + System.out.println("proj " + proj + " nonp " + nonproj + "; predicted proj " + pproj + " non " + pnonproj + + "; nonp correct " + nonProjOk + " nonp wrong " + nonProjWrong + + " precision=(nonProjOk)/(non-projOk+nonProjWrong): " + precisionNonProj + " recall=nonProjOk/nonproj=" + + recallNonProj + " F=" + (2 * precisionNonProj * recallNonProj) / (precisionNonProj + recallNonProj)); + + if (!printEval) + return r; + + new HashMap<String, Integer>(); + new HashMap<String, Integer>(); + + System.out.println("label\ttp\tcount\trecall\t\ttp\tfp+tp\tprecision\t F-Score "); + + for (Entry<String, Integer> e : labelCount.entrySet()) { + + int tp = labelCorrect.get(e.getKey()) == null ? 0 : labelCorrect.get(e.getKey()).intValue(); + Integer count = labelCount.get(e.getKey()); + int fp = falsePositive.get(e.getKey()) == null ? 0 : falsePositive.get(e.getKey()).intValue(); + System.out.println(e.getKey() + "\t" + tp + "\t" + count + "\t" + roundPercent((float) tp / count) + "\t\t" + + tp + "\t" + (fp + tp) + "\t" + roundPercent((float) tp / (fp + tp)) + "\t\t" + + roundPercent((((float) tp / count)) + (float) tp / (fp + tp)) / 2F); // +totalD + } + + for (Entry<String, HashMap<String, Integer>> e : confusion.entrySet()) { + HashMap<String, Integer> values = e.getValue(); + ArrayList<Entry<String, Integer>> entries = new ArrayList<Entry<String, Integer>>(values.entrySet()); + Collections.sort(entries, new Comparator<Entry<String, Integer>>() { + + @Override + public int compare(Entry<String, Integer> o1, Entry<String, Integer> o2) { + + return o2.getValue().compareTo(o1.getValue()); + } + + }); + + System.out.println(e.getKey() + "\t" + entries); + + } + System.out.println("" + posLabelAssign); + + return r; + } + + public static float round(double v) { + + return Math.round(v * 10000F) / 10000F; + } + + public static float roundPercent(double v) { + + return Math.round(v * 10000F) / 100F; + } + +} diff --git a/dependencyParser/experimental/mate-tools/src/is2/util/ExtractParagraphs.java b/dependencyParser/experimental/mate-tools/src/is2/util/ExtractParagraphs.java new file mode 100644 index 0000000..aa65d8d --- /dev/null +++ b/dependencyParser/experimental/mate-tools/src/is2/util/ExtractParagraphs.java @@ -0,0 +1,74 @@ +package is2.util; + +import java.io.BufferedReader; +import java.io.BufferedWriter; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStreamReader; +import java.io.OutputStreamWriter; + +public class ExtractParagraphs { + + /** + * + * @param args + * @throws IOException + */ + public static void main(String args[]) throws IOException { + + if (args.length < 1) { + System.out.println("Please provide a file name."); + System.exit(0); + } + + File file = new File(args[0]); + file.isDirectory(); + String[] dirs = file.list(); + + BufferedWriter write = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(args[1]), "UTF-8"), + 32768); + int cnt = 0; + + for (String fileName : dirs) { + BufferedReader reader = new BufferedReader( + new InputStreamReader(new FileInputStream(args[0] + fileName), "UTF-8"), 32768); + + int state = 0; + + String s; + while ((s = reader.readLine()) != null) { + + if (s.startsWith("<P>") || s.startsWith("<p>")) { + state = 1; // paragraph start + continue; + } + + if (s.startsWith("</P>") || s.startsWith("</p>")) { + state = 2; // paragraph end + write.newLine(); + } + + if (state == 1) { + String sp[] = s.split("\\. "); + for (String p : sp) { + write.write(p); + // if (sp.length>1) write.newLine(); + } + cnt++; + } + } + + // if (cnt>5000) break; + + reader.close(); + } + write.flush(); + write.close(); + + System.out.println("Extract " + cnt + " lines "); + + } + +} diff --git a/dependencyParser/experimental/mate-tools/src/is2/util/IntStack.java b/dependencyParser/experimental/mate-tools/src/is2/util/IntStack.java new file mode 100644 index 0000000..b291d16 --- /dev/null +++ b/dependencyParser/experimental/mate-tools/src/is2/util/IntStack.java @@ -0,0 +1,90 @@ +/** + * + */ +package is2.util; + +/** + * @author Dr. Bernd Bohnet, 01.06.2011 + * + * + */ +final public class IntStack { + + final public int[] stack; + public int position = -1; + + public IntStack(int size) { + if (size <= 0) + stack = new int[1]; + else + stack = new int[size + 1]; + } + + public IntStack(IntStack s) { + stack = s.stack; + position = s.position; + } + + public int peek() { + return position == -1 ? -1 : stack[position]; + } + + public void push(int i) { + // if (i ==2)new Exception().printStackTrace(); + stack[++position] = i; + } + + public int pop() { + return position == -1 ? -1 : stack[position--]; + } + + public int size() { + return position + 1; + } + + public boolean isEmpty() { + return position == -1 ? true : false; + } + + public int get(int p) { + return stack[p]; + } + + public void clear() { + position = -1; + } + + /** + * @param b + */ + public void addAll(IntStack b) { + + position = b.position; + if (position < 0) + return; + + for (int k = 0; k <= position; k++) + stack[k] = b.stack[k]; + + } + + public boolean contains(int s) { + ; + + for (int k = 0; k <= position; k++) + if (stack[k] == s) + return true; + + return false; + } + + @Override + public String toString() { + StringBuffer s = new StringBuffer(); + for (int k = position; k >= 0; k--) { + s.append(k).append(":").append(this.stack[k]).append(" "); + } + return s.toString(); + } + +} diff --git a/dependencyParser/experimental/mate-tools/src/is2/util/Long2Int.java b/dependencyParser/experimental/mate-tools/src/is2/util/Long2Int.java new file mode 100644 index 0000000..e6ef45c --- /dev/null +++ b/dependencyParser/experimental/mate-tools/src/is2/util/Long2Int.java @@ -0,0 +1,81 @@ +package is2.util; + +import is2.data.Long2IntInterface; + +/** + * @author Bernd Bohnet, 01.09.2009 + * + * Maps for the Hash Kernel the long values to the int values. + */ +final public class Long2Int implements Long2IntInterface { + + public Long2Int() { + size = 115911564; + } + + public Long2Int(int s) { + size = s; + } + + /** Integer counter for long2int */ + final private int size; // 0x03ffffff //0x07ffffff + + /* + * (non-Javadoc) + * + * @see is2.sp09k9992.Long2IntIterface#size() + */ + @Override + public int size() { + return size; + } + + /* + * (non-Javadoc) + * + * @see is2.sp09k9992.Long2IntIterface#start() has no meaning for this + * implementation + */ + final public void start() { + } + + /* + * (non-Javadoc) + * + * @see is2.sp09k9992.Long2IntIterface#l2i(long) + */ + @Override + final public int l2i(long l) { + if (l < 0) + return -1; + + // this works well LAS 88.138 + // int r= (int)(( l ^ (l&0xffffffff00000000L) >>> 29 ));//0x811c9dc5 ^ + // // 29 + // return Math.abs(r % size); + // this works a bit better and good with 0x03ffffff + // + /* + * long r= l;//26 l = (l>>12)&0xfffffffffffff000L; r ^= l;//38 l = + * (l>>11)&0xffffffffffffc000L; r ^= l;//49 l = (l>>9)& + * 0xffffffffffff0000L; //53 r ^= l;//58 l = (l>>7)&0xfffffffffffc0000L; + * //62 r ^=l;//65 int x = (int)r; x = x % size; // return x >= 0 ? x : + * -x ;// Math.abs(r % size); + * + */ + // 26 0x03ffffff + // together with 0x07ffffff 27 88.372 + long r = l;// 27 + l = (l >> 13) & 0xffffffffffffe000L; + r ^= l; // 40 + l = (l >> 11) & 0xffffffffffff0000L; + r ^= l; // 51 + l = (l >> 9) & 0xfffffffffffc0000L; // 53 + r ^= l; // 60 + l = (l >> 7) & 0xfffffffffff00000L; // 62 + r ^= l; // 67 + int x = ((int) r) % size; + + return x >= 0 ? x : -x; + } +} diff --git a/dependencyParser/experimental/mate-tools/src/is2/util/Options.java b/dependencyParser/experimental/mate-tools/src/is2/util/Options.java new file mode 100644 index 0000000..30b53b0 --- /dev/null +++ b/dependencyParser/experimental/mate-tools/src/is2/util/Options.java @@ -0,0 +1,133 @@ +package is2.util; + +import java.io.File; + +public final class Options extends OptionsSuper { + + public Options(String[] args) { + + for (int i = 0; i < args.length; i++) { + String[] pair = args[i].split(":"); + + if (pair[0].equals("--help")) + explain(); + else if (pair[0].equals("-train")) { + train = true; + trainfile = args[i + 1]; + } else if (pair[0].equals("-eval")) { + eval = true; + goldfile = args[i + 1]; + i++; + } else if (pair[0].equals("-test")) { + test = true; + testfile = args[i + 1]; + i++; + } else if (pair[0].equals("-i")) { + numIters = Integer.parseInt(args[i + 1]); + i++; + } else if (pair[0].equals("-out")) { + outfile = args[i + 1]; + i++; + } else if (pair[0].equals("-decode")) { + decodeProjective = args[i + 1].equals("proj"); + i++; + } else if (pair[0].equals("-confidence")) { + + conf = true; + } + + else if (pair[0].equals("-count")) { + count = Integer.parseInt(args[i + 1]); + i++; + } else if (pair[0].equals("-model")) { + modelName = args[i + 1]; + i++; + } else if (pair[0].equals("-device")) { + device = args[i + 1]; + i++; + } else if (pair[0].equals("-tmp")) { + tmp = args[i + 1]; + i++; + } else if (pair[0].equals("-format")) { + // format = args[i+1]; + formatTask = Integer.parseInt(args[i + 1]); + i++; + } else if (pair[0].equals("-allfeatures")) { + allFeatures = true; + } else if (pair[0].equals("-nonormalize")) { + normalize = false; + } else if (pair[0].equals("-nframes")) { + // format = args[i+1]; + nbframes = args[i + 1]; + i++; + + } else if (pair[0].equals("-pframes")) { + // format = args[i+1]; + pbframes = args[i + 1]; + i++; + } else if (pair[0].equals("-nopred")) { + nopred = true; + } else if (pair[0].equals("-divide")) { + keep = true; + } else if (pair[0].equals("-lexicon")) { + lexicon = args[i + 1]; + i++; + + } else + super.addOption(args, i); + + } + + try { + + if (trainfile != null) { + + if (keep && tmp != null) { + trainforest = new File(tmp); + if (!trainforest.exists()) + keep = false; + + } else if (tmp != null) { + trainforest = File.createTempFile("train", ".tmp", new File(tmp)); + trainforest.deleteOnExit(); + } else { + trainforest = File.createTempFile("train", ".tmp"); // ,new + // File("F:\\") + trainforest.deleteOnExit(); + } + + } + + } catch (java.io.IOException e) { + System.out.println("Unable to create tmp files for feature forests!"); + System.out.println(e); + System.exit(0); + } + } + + private void explain() { + System.out.println("Usage: "); + System.out.println("java -class mate.jar is2.parser.Parser [Options]"); + System.out.println(); + System.out.println("Example: "); + System.out.println( + " java -class mate.jar is2.parser.Parser -model eps3.model -train corpora/conll08st/train/train.closed -test corpora/conll08st/devel/devel.closed -out b3.test -eval corpora/conll08st/devel/devel.closed -count 2000 -i 6"); + System.out.println(""); + System.out.println("Options:"); + System.out.println(""); + System.out.println(" -train <file> the corpus a model is trained on; default " + this.trainfile); + System.out.println(" -test <file> the input corpus for testing; default " + this.testfile); + System.out.println(" -out <file> the output corpus (result) of a test run; default " + this.outfile); + System.out.println(" -model <file> the parsing model for traing the model is stored in the files"); + System.out.println( + " and for parsing the model is load from this file; default " + this.modelName); + System.out.println( + " -i <number> the number of training iterations; good numbers are 10 for smaller corpora and 6 for bigger; default " + + this.numIters); + System.out.println(" -count <number> the n first sentences of the corpus are take for the training default " + + this.count); + System.out.println(" -format <number> conll format of the year 8 or 9; default " + this.formatTask); + + System.exit(0); + } +} diff --git a/dependencyParser/experimental/mate-tools/src/is2/util/OptionsSuper.java b/dependencyParser/experimental/mate-tools/src/is2/util/OptionsSuper.java new file mode 100755 index 0000000..f6370f7 --- /dev/null +++ b/dependencyParser/experimental/mate-tools/src/is2/util/OptionsSuper.java @@ -0,0 +1,231 @@ +package is2.util; + +import java.io.File; + +public class OptionsSuper { + + public String trainfile = null; + public String testfile = null; + public File trainforest = null; + + public String nbframes = null; + public String pbframes = null; + + public boolean nopred = false; + public boolean upper = false; + + public boolean train = false; + public boolean eval = false; + public boolean test = false; + public boolean keep = false; + public boolean flt = false; + public boolean loadTaggerModels = false; + + public String modelName = "prs.mdl"; + public String modelTaggerName = null; + + public String useMapping = null; + public String device = "C:"; + public String tmp = null; + public boolean createForest = true; + public boolean decodeProjective = false; + public double decodeTH = 0.3d; + public String format = "CONLL"; + public int formatTask = 9; + public int numIters = 10; + public int best = 1000; + public String outfile = "dp.conll"; + public String charset = "UTF-8"; + public String phraseTrain = null; + public String phraseTest = null; + public String goldfile = null; + public String gout = "sec23.gld"; + public String features = null; + public String lexicon = null; + public int hsize = 0x07ffffff; + public int maxLen = 2000; + public int maxForms = Integer.MAX_VALUE; + public int beam = 4; + public float prune = -100000000; + + public String third = ""; + public String second = ""; + public String first = ""; + + public int cross = 10; + + // public boolean secondOrder = true; + public boolean useRelationalFeatures = false; + public int count = 10000000; + public int cores = Integer.MAX_VALUE; + public int start = 0; + public int minOccureForms = 0; + public int tt = 30; // tagger averaging + public boolean allFeatures = false; + public boolean normalize = false; + public boolean no2nd = false; + public boolean noLemmas = false; + public boolean few2nd = false, noLinear = false, noMorph = false; + public String clusterFile; + + // output confidence values + public boolean conf = false; + public String phraseFormat = "penn"; // tiger | penn + public boolean average = true; + public boolean label = false; + public boolean stack = false; + public boolean oneRoot = false; + + public String significant1 = null, significant2 = null; + + // horizontal stacking + public int minLength = 0, maxLength = Integer.MAX_VALUE; + public boolean overwritegold = false; + + public static final int MULTIPLICATIVE = 1, SHIFT = 2; + public int featureCreation = MULTIPLICATIVE; + + public OptionsSuper(String[] args, String dummy) { + + for (int i = 0; i < args.length; i++) { + i = addOption(args, i); + } + + } + + public OptionsSuper() { + } + + public int addOption(String args[], int i) { + + if (args[i].equals("-train")) { + train = true; + trainfile = args[i + 1]; + } else if (args[i].equals("-eval")) { + eval = true; + goldfile = args[i + 1]; + i++; + } else if (args[i].equals("-gout")) { + gout = args[i + 1]; + i++; + } else if (args[i].equals("-test")) { + test = true; + testfile = args[i + 1]; + i++; + } else if (args[i].equals("-sig1")) { + significant1 = args[i + 1]; + i++; + } else if (args[i].equals("-sig2")) { + significant2 = args[i + 1]; + i++; + } else if (args[i].equals("-i")) { + numIters = Integer.parseInt(args[i + 1]); + i++; + } else if (args[i].equals("-out")) { + outfile = args[i + 1]; + i++; + } else if (args[i].equals("-cluster")) { + clusterFile = args[i + 1]; + i++; + } + + else if (args[i].equals("-count")) { + count = Integer.parseInt(args[i + 1]); + i++; + } else if (args[i].equals("-model")) { + modelName = args[i + 1]; + i++; + } else if (args[i].equals("-tmodel")) { + this.modelTaggerName = args[i + 1]; + i++; + } else if (args[i].equals("-nonormalize")) { + normalize = false; + } else if (args[i].equals("-float")) { + flt = true; + } else if (args[i].equals("-hsize")) { + hsize = Integer.parseInt(args[i + 1]); + i++; + } else if (args[i].equals("-charset")) { + charset = args[++i]; + } else if (args[i].equals("-pstrain")) { + this.phraseTrain = args[i + 1]; + i++; + } else if (args[i].equals("-pstest")) { + this.phraseTest = args[i + 1]; + i++; + } else if (args[i].equals("-len")) { + maxLen = Integer.parseInt(args[i + 1]); + i++; + } else if (args[i].equals("-cores")) { + cores = Integer.parseInt(args[i + 1]); + i++; + } else if (args[i].equals("-start")) { + start = Integer.parseInt(args[i + 1]); + i++; + } else if (args[i].equals("-max")) { + maxLength = Integer.parseInt(args[i + 1]); + i++; + } else if (args[i].equals("-min")) { + minLength = Integer.parseInt(args[i + 1]); + i++; + } else if (args[i].equals("-noLemmas")) { + noLemmas = true; + } else if (args[i].equals("-noavg")) { + this.average = false; + } else if (args[i].equals("-label")) { + label = true; + } else if (args[i].equals("-stack")) { + stack = true; + } else if (args[i].equals("-overwritegold")) { + overwritegold = true; + } else if (args[i].equals("-format")) { + formatTask = Integer.parseInt(args[++i]); + } else if (args[i].equals("-tt")) { + tt = Integer.parseInt(args[++i]); + } else if (args[i].equals("-min-occure-forms")) { + minOccureForms = Integer.parseInt(args[++i]); + } else if (args[i].equals("-loadTaggerModels")) { + this.loadTaggerModels = true; + ; + + } else if (args[i].equals("-feature_creation")) { + this.featureCreation = args[++i].equals("shift") ? SHIFT : MULTIPLICATIVE; + } + + return i; + + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("FLAGS ["); + sb.append("train-file: " + trainfile); + sb.append(" | "); + sb.append("test-file: " + testfile); + sb.append(" | "); + sb.append("gold-file: " + goldfile); + sb.append(" | "); + sb.append("output-file: " + outfile); + sb.append(" | "); + sb.append("model-name: " + modelName); + sb.append(" | "); + sb.append("train: " + train); + sb.append(" | "); + sb.append("test: " + test); + sb.append(" | "); + sb.append("eval: " + eval); + sb.append(" | "); + sb.append("training-iterations: " + numIters); + sb.append(" | "); + sb.append("decode-type: " + decodeProjective); + sb.append(" | "); + sb.append("create-forest: " + createForest); + sb.append(" | "); + sb.append("format: " + format); + + sb.append("]\n"); + return sb.toString(); + } + +} \ No newline at end of file diff --git a/dependencyParser/experimental/mate-tools/src/is2/util/ParserEvaluator.java b/dependencyParser/experimental/mate-tools/src/is2/util/ParserEvaluator.java new file mode 100644 index 0000000..95e8949 --- /dev/null +++ b/dependencyParser/experimental/mate-tools/src/is2/util/ParserEvaluator.java @@ -0,0 +1,100 @@ +package is2.util; + +import is2.data.SentenceData09; +import is2.io.CONLLReader09; + +public class ParserEvaluator { + + public static final String PUNCT = "!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~"; + + public static class Results { + + public int total; + public int corr; + public float las; + public float ula; + + } + + public static Results evaluate(String act_file, String pred_file) throws Exception { + + CONLLReader09 goldReader = new CONLLReader09(act_file, -1); + CONLLReader09 predictedReader = new CONLLReader09(pred_file, -1); + + int total = 0, corr = 0, corrL = 0; + int numsent = 0, corrsent = 0, corrsentL = 0; + SentenceData09 goldInstance = goldReader.getNext(); + SentenceData09 predInstance = predictedReader.getNext(); + + while (goldInstance != null) { + + int instanceLength = goldInstance.length(); + + if (instanceLength != predInstance.length()) + System.out.println("Lengths do not match on sentence " + numsent); + + int[] goldHeads = goldInstance.heads; + String[] goldLabels = goldInstance.labels; + int[] predHeads = predInstance.pheads; + String[] predLabels = predInstance.plabels; + + boolean whole = true; + boolean wholeL = true; + + // NOTE: the first item is the root info added during + // nextInstance(), so we skip it. + + int punc = 0; + for (int i = 1; i < instanceLength; i++) { + if (predHeads[i] == goldHeads[i]) { + corr++; + + if (goldLabels[i].equals(predLabels[i])) + corrL++; + else { + // System.out.println(numsent+" error gold + // "+goldLabels[i]+" "+predLabels[i]+" head + // "+goldHeads[i]+" child "+i); + wholeL = false; + } + } else { + // System.out.println(numsent+"error gold "+goldLabels[i]+" + // "+predLabels[i]+" head "+goldHeads[i]+" child "+i); + whole = false; + wholeL = false; + } + } + total += ((instanceLength - 1) - punc); // Subtract one to not score + // fake root token + + if (whole) + corrsent++; + if (wholeL) + corrsentL++; + numsent++; + + goldInstance = goldReader.getNext(); + predInstance = predictedReader.getNext(); + } + + Results r = new Results(); + + r.total = total; + r.corr = corr; + r.las = (float) Math.round(((double) corrL / total) * 100000) / 1000; + r.ula = (float) Math.round(((double) corr / total) * 100000) / 1000; + System.out.print("Total: " + total + " \tCorrect: " + corr + " "); + System.out.println("LAS: " + (double) Math.round(((double) corrL / total) * 100000) / 1000 + " \tTotal: " + + (double) Math.round(((double) corrsentL / numsent) * 100000) / 1000 + " \tULA: " + + (double) Math.round(((double) corr / total) * 100000) / 1000 + " \tTotal: " + + (double) Math.round(((double) corrsent / numsent) * 100000) / 1000); + + return r; + } + + public static float round(double v) { + + return Math.round(v * 10000F) / 10000F; + } + +} diff --git a/dependencyParser/experimental/mate-tools/src/is2/util/Split.java b/dependencyParser/experimental/mate-tools/src/is2/util/Split.java new file mode 100755 index 0000000..ea1151b --- /dev/null +++ b/dependencyParser/experimental/mate-tools/src/is2/util/Split.java @@ -0,0 +1,89 @@ +package is2.util; + +import java.io.BufferedReader; +import java.io.FileInputStream; +import java.io.IOException; +import java.io.Reader; +import java.nio.channels.Channels; +import java.nio.channels.FileChannel; +import java.nio.charset.Charset; +import java.nio.charset.CharsetDecoder; +import java.util.StringTokenizer; + +public class Split { + + /** + * Splits a tokenized sentences into one word per line format: + * + * Input > I am an text . > Sentence two ... + * + * Output: I _ _ _ ... am _ _ _ ... ... + * + * @param args + * @throws IOException + */ + public static void main(String args[]) throws IOException { + + if (args.length != 1) { + System.out.println("Please provide a file name."); + System.exit(0); + } + + String filename = args[0]; + // Charset charset = Charset.forName("UTF-8"); + + FileInputStream in = new FileInputStream(filename); + FileChannel channel = in.getChannel(); + CharsetDecoder decoder = Charset.defaultCharset().newDecoder();// charset.newDecoder(); + Reader infile = Channels.newReader(channel, decoder, 16 * 1024); + BufferedReader bInfile = new BufferedReader(infile); + + // DataOutputStream dos = new DataOutputStream(new + // BufferedOutputStream(new FileOutputStream(options.modelName))); + + String s; + while ((s = bInfile.readLine()) != null) { + + // do the first tokens contain a colon? + int colon = 0; + for (int k = 0; k < 12; k++) { + if (s.length() <= k) + break; + if (s.charAt(k) == ':') { + + colon++; + break; + } + if (s.charAt(k) == ' ') + break; + } + + String prefix = colon > 0 ? s.substring(0, s.indexOf(":")) + "_" : ""; + + if (colon > 0) { + s = s.substring(s.indexOf(":") + 1); + } + + StringTokenizer t = new StringTokenizer(s); + int i = 1; + boolean found = false; + while (t.hasMoreTokens()) { + found = true; + String tk = t.nextToken(); + if (tk.contains("=")) + continue; + System.out.print(prefix + i + "\t"); + System.out.print(tk); + System.out.println("\t_\t_\t_\t_\t_\t_\t_\t_\t_\t_\t_\t_\t_"); + i++; + } + if (found) + System.out.println(); + + } + bInfile.close(); + in.close(); + + } + +} diff --git a/dependencyParser/experimental/mate-tools/src/is2/util/Split2.java b/dependencyParser/experimental/mate-tools/src/is2/util/Split2.java new file mode 100644 index 0000000..4ed4004 --- /dev/null +++ b/dependencyParser/experimental/mate-tools/src/is2/util/Split2.java @@ -0,0 +1,56 @@ +package is2.util; + +import java.io.BufferedReader; +import java.io.BufferedWriter; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStreamReader; +import java.io.OutputStreamWriter; +import java.util.StringTokenizer; + +public class Split2 { + + /** + * Splits a tokenized sentences into one word per line format: + * + * Input > I am an text . > Sentence two ... + * + * Output: I _ _ _ ... am _ _ _ ... ... + * + * @param args + * @throws IOException + */ + public static void main(String args[]) throws IOException { + + if (args.length < 1) { + System.out.println("Please provide a file name."); + System.exit(0); + } + + BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(args[0]), "UTF-8"), 32768); + BufferedWriter write = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(args[1]), "ISO-8859-1")); + + String s; + int cnt = 0; + while ((s = reader.readLine()) != null) { + StringTokenizer t = new StringTokenizer(s); + while (t.hasMoreTokens()) { + String tk = t.nextToken(); + for (int c : tk.toCharArray()) { + if (c < 0 && c >= 255) + System.out.println("contain sign " + c + " " + cnt); + } + write.write(tk); + write.newLine(); + cnt++; + } + write.newLine(); + } + reader.close(); + write.flush(); + write.close(); + + } + +} diff --git a/dependencyParser/experimental/mate-tools/src/is2/util/Split3.java b/dependencyParser/experimental/mate-tools/src/is2/util/Split3.java new file mode 100644 index 0000000..2cf7cf2 --- /dev/null +++ b/dependencyParser/experimental/mate-tools/src/is2/util/Split3.java @@ -0,0 +1,51 @@ +package is2.util; + +import java.io.BufferedReader; +import java.io.BufferedWriter; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStreamReader; +import java.io.OutputStreamWriter; +import java.util.StringTokenizer; + +public class Split3 { + + /** + * Splits a tokenized sentences into one word per line format: + * + * Input > I am an text . > Sentence two ... + * + * Output: I _ _ _ ... am _ _ _ ... ... + * + * @param args + * @throws IOException + */ + public static void main(String args[]) throws IOException { + + if (args.length < 1) { + System.out.println("Please provide a file name."); + System.exit(0); + } + + BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(args[0]), "UTF-8"), 32768); + BufferedWriter write = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(args[1]), "UTF-8"), + 32768); + + String s; + while ((s = reader.readLine()) != null) { + StringTokenizer t = new StringTokenizer(s); + while (t.hasMoreTokens()) { + String tk = t.nextToken(); + write.write(tk); + write.newLine(); + } + write.newLine(); + } + reader.close(); + write.flush(); + write.close(); + + } + +} diff --git a/dependencyParser/mate-tools/.classpath b/dependencyParser/mate-tools/.classpath deleted file mode 100644 index 4d8fea6..0000000 --- a/dependencyParser/mate-tools/.classpath +++ /dev/null @@ -1,8 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<classpath> - <classpathentry kind="src" path="src"/> - <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/> - <classpathentry kind="lib" path="lib/commons-math-2.2.jar"/> - <classpathentry kind="lib" path="/home/masterofu/workspace/mate-tools/lib/trove-2.0.4.jar"/> - <classpathentry kind="output" path="classes"/> -</classpath> diff --git a/dependencyParser/mate-tools/.externalToolBuilders/New_Builder.launch b/dependencyParser/mate-tools/.externalToolBuilders/New_Builder.launch deleted file mode 100644 index eca73f7..0000000 --- a/dependencyParser/mate-tools/.externalToolBuilders/New_Builder.launch +++ /dev/null @@ -1,8 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<launchConfiguration type="org.eclipse.ui.externaltools.ProgramBuilderLaunchConfigurationType"> -<booleanAttribute key="org.eclipse.debug.ui.ATTR_LAUNCH_IN_BACKGROUND" value="false"/> -<stringAttribute key="org.eclipse.ui.externaltools.ATTR_LOCATION" value="${workspace_loc:/mate-tools/.project}"/> -<stringAttribute key="org.eclipse.ui.externaltools.ATTR_RUN_BUILD_KINDS" value="full,incremental,"/> -<booleanAttribute key="org.eclipse.ui.externaltools.ATTR_TRIGGERS_CONFIGURED" value="true"/> -<stringAttribute key="org.eclipse.ui.externaltools.ATTR_WORKING_DIRECTORY" value="${workspace_loc:/mate-tools}"/> -</launchConfiguration> diff --git a/dependencyParser/mate-tools/.externalToolBuilders/ana.launch b/dependencyParser/mate-tools/.externalToolBuilders/ana.launch deleted file mode 100644 index 09df90d..0000000 --- a/dependencyParser/mate-tools/.externalToolBuilders/ana.launch +++ /dev/null @@ -1,20 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<launchConfiguration type="org.eclipse.ant.AntBuilderLaunchConfigurationType"> -<booleanAttribute key="org.eclipse.ant.ui.ATTR_TARGETS_UPDATED" value="true"/> -<booleanAttribute key="org.eclipse.ant.ui.DEFAULT_VM_INSTALL" value="false"/> -<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS"> -<listEntry value="/mate-tools/scripts/build.xml"/> -</listAttribute> -<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES"> -<listEntry value="1"/> -</listAttribute> -<booleanAttribute key="org.eclipse.debug.ui.ATTR_LAUNCH_IN_BACKGROUND" value="false"/> -<stringAttribute key="org.eclipse.jdt.launching.CLASSPATH_PROVIDER" value="org.eclipse.ant.ui.AntClasspathProvider"/> -<booleanAttribute key="org.eclipse.jdt.launching.DEFAULT_CLASSPATH" value="true"/> -<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="mate-tools"/> -<booleanAttribute key="org.eclipse.ui.externaltools.ATTR_BUILDER_ENABLED" value="false"/> -<stringAttribute key="org.eclipse.ui.externaltools.ATTR_LOCATION" value="${workspace_loc:/mate-tools/scripts/build.xml}"/> -<stringAttribute key="org.eclipse.ui.externaltools.ATTR_RUN_BUILD_KINDS" value="full,incremental,"/> -<booleanAttribute key="org.eclipse.ui.externaltools.ATTR_TRIGGERS_CONFIGURED" value="true"/> -<stringAttribute key="org.eclipse.ui.externaltools.ATTR_WORKING_DIRECTORY" value="${workspace_loc:/mate-tools}"/> -</launchConfiguration> diff --git a/dependencyParser/mate-tools/.project b/dependencyParser/mate-tools/.project deleted file mode 100644 index f813b9e..0000000 --- a/dependencyParser/mate-tools/.project +++ /dev/null @@ -1,17 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<projectDescription> - <name>mate-tools</name> - <comment></comment> - <projects> - </projects> - <buildSpec> - <buildCommand> - <name>org.eclipse.jdt.core.javabuilder</name> - <arguments> - </arguments> - </buildCommand> - </buildSpec> - <natures> - <nature>org.eclipse.jdt.core.javanature</nature> - </natures> -</projectDescription> diff --git a/dependencyParser/mate-tools/build.xml b/dependencyParser/mate-tools/build.xml deleted file mode 100644 index c558279..0000000 --- a/dependencyParser/mate-tools/build.xml +++ /dev/null @@ -1,64 +0,0 @@ -<project name="analyse" default="compile" basedir="."> - <description> - The base ant build file. - </description> - - <!-- set global properties for this build --> - <property name="src" location="src"/> - <property name="classes" location="classes"/> - <property name="dist" location="dist"/> - <property name="include" location="include"/> - - - <target name="init" description="Clears the /class directory"> - <!-- Create the time stamp --> - <tstamp/> - <mkdir dir="dist"/> - <mkdir dir="javadoc"/> - <mkdir dir="classes"/> - </target> - - <target name="compile" depends="init" description="Compile the source" > - <!-- Compile the java code from ${src} into ${build} executable="javac" --> - - <javac srcdir="${src}" - destdir="${classes}" - includeantruntime="false" - executable="javac.exe" - optimize="true" - debug="off" - classpath=""/> - - </target> - - <target name="build" description="Build the distribution .jar file" > - <!-- Create the temporary distribution directory --> - <delete includeEmptyDirs="true"><fileset dir="dist" includes="**/*" excludes="gtc*.jar"/></delete> - <mkdir dir="${dist}/temp-${DSTAMP}"/> - <copy todir="${dist}/temp-${DSTAMP}"><fileset dir="${classes}" /></copy> - <copy todir="${dist}/temp-${DSTAMP}"><fileset dir="${include}" /></copy> - <!-- copy everything from /include/others to dist - <copy todir="${dist}/temp-${DSTAMP}"><fileset dir="${include}/others" /></copy>--> - <!-- copy everything from /include/classes to dist - <copy todir="${dist}/temp-${DSTAMP}"><fileset dir="${include}/classes" /></copy>--> - <!-- pack everything into a .jar file --> - <jar jarfile="${dist}/anna-3.5.jar" - basedir="${dist}/temp-${DSTAMP}"/> - <delete dir="${dist}/temp-{DSTAMP}" /> - </target> - - <target name="javadoc" depends="init" description="Create the javadoc API documentation" > - <delete includeEmptyDirs="true"><fileset dir="javadoc" includes="**/*"/></delete> - <!-- TODO: you might add new packages to packagenames --> - <javadoc destdir="javadoc" access="package" source="1.4" - use="false" notree="false" nonavbar="false" noindex="true" - splitindex="false" author="true" version="true" - nodeprecatedlist="true" nodeprecated="false" - packagenames="gtc.*.*" - sourcepath="src" classpath="class"/> - </target> - - - <target name="all" depends="init,compile,javadoc" description="Make all" /> -</project> - diff --git a/dependencyParser/mate-tools/classes/decoder/ParallelDecoder$DSet.class b/dependencyParser/mate-tools/classes/decoder/ParallelDecoder$DSet.class deleted file mode 100644 index afd509c..0000000 Binary files a/dependencyParser/mate-tools/classes/decoder/ParallelDecoder$DSet.class and /dev/null differ diff --git a/dependencyParser/mate-tools/classes/decoder/ParallelDecoder.class b/dependencyParser/mate-tools/classes/decoder/ParallelDecoder.class deleted file mode 100644 index 238fd06..0000000 Binary files a/dependencyParser/mate-tools/classes/decoder/ParallelDecoder.class and /dev/null differ diff --git a/dependencyParser/mate-tools/classes/decoder/ParallelRearrangeNBest$PA.class b/dependencyParser/mate-tools/classes/decoder/ParallelRearrangeNBest$PA.class deleted file mode 100644 index 3edcd6b..0000000 Binary files a/dependencyParser/mate-tools/classes/decoder/ParallelRearrangeNBest$PA.class and /dev/null differ diff --git a/dependencyParser/mate-tools/classes/decoder/ParallelRearrangeNBest.class b/dependencyParser/mate-tools/classes/decoder/ParallelRearrangeNBest.class deleted file mode 100644 index c604932..0000000 Binary files a/dependencyParser/mate-tools/classes/decoder/ParallelRearrangeNBest.class and /dev/null differ diff --git a/dependencyParser/mate-tools/classes/decoder/ParallelRearrangeNBest2$PA.class b/dependencyParser/mate-tools/classes/decoder/ParallelRearrangeNBest2$PA.class deleted file mode 100644 index f1639e7..0000000 Binary files a/dependencyParser/mate-tools/classes/decoder/ParallelRearrangeNBest2$PA.class and /dev/null differ diff --git a/dependencyParser/mate-tools/classes/decoder/ParallelRearrangeNBest2.class b/dependencyParser/mate-tools/classes/decoder/ParallelRearrangeNBest2.class deleted file mode 100644 index 80e8921..0000000 Binary files a/dependencyParser/mate-tools/classes/decoder/ParallelRearrangeNBest2.class and /dev/null differ diff --git a/dependencyParser/mate-tools/classes/examples/DependencyParser.class b/dependencyParser/mate-tools/classes/examples/DependencyParser.class deleted file mode 100644 index 89ed2d4..0000000 Binary files a/dependencyParser/mate-tools/classes/examples/DependencyParser.class and /dev/null differ diff --git a/dependencyParser/mate-tools/classes/examples/FullPipelineSpanish.class b/dependencyParser/mate-tools/classes/examples/FullPipelineSpanish.class deleted file mode 100644 index 256caa9..0000000 Binary files a/dependencyParser/mate-tools/classes/examples/FullPipelineSpanish.class and /dev/null differ diff --git a/dependencyParser/mate-tools/classes/examples/FullPipelineTest.class b/dependencyParser/mate-tools/classes/examples/FullPipelineTest.class deleted file mode 100644 index d76a879..0000000 Binary files a/dependencyParser/mate-tools/classes/examples/FullPipelineTest.class and /dev/null differ diff --git a/dependencyParser/mate-tools/classes/examples/MorphTagger.class b/dependencyParser/mate-tools/classes/examples/MorphTagger.class deleted file mode 100644 index 305225c..0000000 Binary files a/dependencyParser/mate-tools/classes/examples/MorphTagger.class and /dev/null differ diff --git a/dependencyParser/mate-tools/classes/examples/ParseOnly.class b/dependencyParser/mate-tools/classes/examples/ParseOnly.class deleted file mode 100644 index 73a8f49..0000000 Binary files a/dependencyParser/mate-tools/classes/examples/ParseOnly.class and /dev/null differ diff --git a/dependencyParser/mate-tools/classes/examples/Pipeline.class b/dependencyParser/mate-tools/classes/examples/Pipeline.class deleted file mode 100644 index b8631e1..0000000 Binary files a/dependencyParser/mate-tools/classes/examples/Pipeline.class and /dev/null differ diff --git a/dependencyParser/mate-tools/classes/extractors/Extractor.class b/dependencyParser/mate-tools/classes/extractors/Extractor.class deleted file mode 100644 index 47ad699..0000000 Binary files a/dependencyParser/mate-tools/classes/extractors/Extractor.class and /dev/null differ diff --git a/dependencyParser/mate-tools/classes/extractors/ExtractorClusterStacked.class b/dependencyParser/mate-tools/classes/extractors/ExtractorClusterStacked.class deleted file mode 100644 index d8cc567..0000000 Binary files a/dependencyParser/mate-tools/classes/extractors/ExtractorClusterStacked.class and /dev/null differ diff --git a/dependencyParser/mate-tools/classes/extractors/ExtractorClusterStackedR2.class b/dependencyParser/mate-tools/classes/extractors/ExtractorClusterStackedR2.class deleted file mode 100644 index 2c32133..0000000 Binary files a/dependencyParser/mate-tools/classes/extractors/ExtractorClusterStackedR2.class and /dev/null differ diff --git a/dependencyParser/mate-tools/classes/extractors/ExtractorFactory.class b/dependencyParser/mate-tools/classes/extractors/ExtractorFactory.class deleted file mode 100644 index 9f8fa84..0000000 Binary files a/dependencyParser/mate-tools/classes/extractors/ExtractorFactory.class and /dev/null differ diff --git a/dependencyParser/mate-tools/classes/extractors/ExtractorReranker.class b/dependencyParser/mate-tools/classes/extractors/ExtractorReranker.class deleted file mode 100644 index 6173744..0000000 Binary files a/dependencyParser/mate-tools/classes/extractors/ExtractorReranker.class and /dev/null differ diff --git a/dependencyParser/mate-tools/classes/extractors/ParallelExtract$DSet.class b/dependencyParser/mate-tools/classes/extractors/ParallelExtract$DSet.class deleted file mode 100644 index f7ef6bf..0000000 Binary files a/dependencyParser/mate-tools/classes/extractors/ParallelExtract$DSet.class and /dev/null differ diff --git a/dependencyParser/mate-tools/classes/extractors/ParallelExtract.class b/dependencyParser/mate-tools/classes/extractors/ParallelExtract.class deleted file mode 100644 index 1ef577d..0000000 Binary files a/dependencyParser/mate-tools/classes/extractors/ParallelExtract.class and /dev/null differ diff --git a/dependencyParser/mate-tools/classes/is2/data/Closed.class b/dependencyParser/mate-tools/classes/is2/data/Closed.class deleted file mode 100644 index e7abce7..0000000 Binary files a/dependencyParser/mate-tools/classes/is2/data/Closed.class and /dev/null differ diff --git a/dependencyParser/mate-tools/classes/is2/data/Cluster.class b/dependencyParser/mate-tools/classes/is2/data/Cluster.class deleted file mode 100644 index 330151f..0000000 Binary files a/dependencyParser/mate-tools/classes/is2/data/Cluster.class and /dev/null differ diff --git a/dependencyParser/mate-tools/classes/is2/data/D4.class b/dependencyParser/mate-tools/classes/is2/data/D4.class deleted file mode 100644 index 544eae0..0000000 Binary files a/dependencyParser/mate-tools/classes/is2/data/D4.class and /dev/null differ diff --git a/dependencyParser/mate-tools/classes/is2/data/D6.class b/dependencyParser/mate-tools/classes/is2/data/D6.class deleted file mode 100644 index 274867a..0000000 Binary files a/dependencyParser/mate-tools/classes/is2/data/D6.class and /dev/null differ diff --git a/dependencyParser/mate-tools/classes/is2/data/D7.class b/dependencyParser/mate-tools/classes/is2/data/D7.class deleted file mode 100644 index 4cf1121..0000000 Binary files a/dependencyParser/mate-tools/classes/is2/data/D7.class and /dev/null differ diff --git a/dependencyParser/mate-tools/classes/is2/data/DPSTree.class b/dependencyParser/mate-tools/classes/is2/data/DPSTree.class deleted file mode 100644 index c3cf0a4..0000000 Binary files a/dependencyParser/mate-tools/classes/is2/data/DPSTree.class and /dev/null differ diff --git a/dependencyParser/mate-tools/classes/is2/data/DX.class b/dependencyParser/mate-tools/classes/is2/data/DX.class deleted file mode 100644 index 773f0d7..0000000 Binary files a/dependencyParser/mate-tools/classes/is2/data/DX.class and /dev/null differ diff --git a/dependencyParser/mate-tools/classes/is2/data/DataF.class b/dependencyParser/mate-tools/classes/is2/data/DataF.class deleted file mode 100644 index eb52b0e..0000000 Binary files a/dependencyParser/mate-tools/classes/is2/data/DataF.class and /dev/null differ diff --git a/dependencyParser/mate-tools/classes/is2/data/DataFES.class b/dependencyParser/mate-tools/classes/is2/data/DataFES.class deleted file mode 100644 index c4c1f7d..0000000 Binary files a/dependencyParser/mate-tools/classes/is2/data/DataFES.class and /dev/null differ diff --git a/dependencyParser/mate-tools/classes/is2/data/DataT.class b/dependencyParser/mate-tools/classes/is2/data/DataT.class deleted file mode 100644 index 5ed10d3..0000000 Binary files a/dependencyParser/mate-tools/classes/is2/data/DataT.class and /dev/null differ diff --git a/dependencyParser/mate-tools/classes/is2/data/Edges$C.class b/dependencyParser/mate-tools/classes/is2/data/Edges$C.class deleted file mode 100644 index b57036e..0000000 Binary files a/dependencyParser/mate-tools/classes/is2/data/Edges$C.class and /dev/null differ diff --git a/dependencyParser/mate-tools/classes/is2/data/Edges.class b/dependencyParser/mate-tools/classes/is2/data/Edges.class deleted file mode 100644 index e293bbe..0000000 Binary files a/dependencyParser/mate-tools/classes/is2/data/Edges.class and /dev/null differ diff --git a/dependencyParser/mate-tools/classes/is2/data/F2S.class b/dependencyParser/mate-tools/classes/is2/data/F2S.class deleted file mode 100644 index 1c9ed89..0000000 Binary files a/dependencyParser/mate-tools/classes/is2/data/F2S.class and /dev/null differ diff --git a/dependencyParser/mate-tools/classes/is2/data/F2SD.class b/dependencyParser/mate-tools/classes/is2/data/F2SD.class deleted file mode 100644 index a2b7a83..0000000 Binary files a/dependencyParser/mate-tools/classes/is2/data/F2SD.class and /dev/null differ diff --git a/dependencyParser/mate-tools/classes/is2/data/F2SF.class b/dependencyParser/mate-tools/classes/is2/data/F2SF.class deleted file mode 100644 index f782eef..0000000 Binary files a/dependencyParser/mate-tools/classes/is2/data/F2SF.class and /dev/null differ diff --git a/dependencyParser/mate-tools/classes/is2/data/F2SP.class b/dependencyParser/mate-tools/classes/is2/data/F2SP.class deleted file mode 100644 index 34b66e0..0000000 Binary files a/dependencyParser/mate-tools/classes/is2/data/F2SP.class and /dev/null differ diff --git a/dependencyParser/mate-tools/classes/is2/data/F2ST.class b/dependencyParser/mate-tools/classes/is2/data/F2ST.class deleted file mode 100644 index a88c6a6..0000000 Binary files a/dependencyParser/mate-tools/classes/is2/data/F2ST.class and /dev/null differ diff --git a/dependencyParser/mate-tools/classes/is2/data/FV.class b/dependencyParser/mate-tools/classes/is2/data/FV.class deleted file mode 100644 index b4c89d2..0000000 Binary files a/dependencyParser/mate-tools/classes/is2/data/FV.class and /dev/null differ diff --git a/dependencyParser/mate-tools/classes/is2/data/FVR.class b/dependencyParser/mate-tools/classes/is2/data/FVR.class deleted file mode 100644 index 9d75826..0000000 Binary files a/dependencyParser/mate-tools/classes/is2/data/FVR.class and /dev/null differ diff --git a/dependencyParser/mate-tools/classes/is2/data/IEncoder.class b/dependencyParser/mate-tools/classes/is2/data/IEncoder.class deleted file mode 100644 index 48b863c..0000000 Binary files a/dependencyParser/mate-tools/classes/is2/data/IEncoder.class and /dev/null differ diff --git a/dependencyParser/mate-tools/classes/is2/data/IEncoderPlus.class b/dependencyParser/mate-tools/classes/is2/data/IEncoderPlus.class deleted file mode 100644 index 4ea4883..0000000 Binary files a/dependencyParser/mate-tools/classes/is2/data/IEncoderPlus.class and /dev/null differ diff --git a/dependencyParser/mate-tools/classes/is2/data/IFV.class b/dependencyParser/mate-tools/classes/is2/data/IFV.class deleted file mode 100644 index 652636d..0000000 Binary files a/dependencyParser/mate-tools/classes/is2/data/IFV.class and /dev/null differ diff --git a/dependencyParser/mate-tools/classes/is2/data/Instances.class b/dependencyParser/mate-tools/classes/is2/data/Instances.class deleted file mode 100644 index 014416a..0000000 Binary files a/dependencyParser/mate-tools/classes/is2/data/Instances.class and /dev/null differ diff --git a/dependencyParser/mate-tools/classes/is2/data/InstancesTagger.class b/dependencyParser/mate-tools/classes/is2/data/InstancesTagger.class deleted file mode 100644 index dc155f8..0000000 Binary files a/dependencyParser/mate-tools/classes/is2/data/InstancesTagger.class and /dev/null differ diff --git a/dependencyParser/mate-tools/classes/is2/data/IntIntHash.class b/dependencyParser/mate-tools/classes/is2/data/IntIntHash.class deleted file mode 100644 index 246e0c9..0000000 Binary files a/dependencyParser/mate-tools/classes/is2/data/IntIntHash.class and /dev/null differ diff --git a/dependencyParser/mate-tools/classes/is2/data/Long2Int.class b/dependencyParser/mate-tools/classes/is2/data/Long2Int.class deleted file mode 100644 index c11b75c..0000000 Binary files a/dependencyParser/mate-tools/classes/is2/data/Long2Int.class and /dev/null differ diff --git a/dependencyParser/mate-tools/classes/is2/data/Long2IntExact.class b/dependencyParser/mate-tools/classes/is2/data/Long2IntExact.class deleted file mode 100644 index 830c90c..0000000 Binary files a/dependencyParser/mate-tools/classes/is2/data/Long2IntExact.class and /dev/null differ diff --git a/dependencyParser/mate-tools/classes/is2/data/Long2IntInterface.class b/dependencyParser/mate-tools/classes/is2/data/Long2IntInterface.class deleted file mode 100644 index af26b65..0000000 Binary files a/dependencyParser/mate-tools/classes/is2/data/Long2IntInterface.class and /dev/null differ diff --git a/dependencyParser/mate-tools/classes/is2/data/Long2IntQuick.class b/dependencyParser/mate-tools/classes/is2/data/Long2IntQuick.class deleted file mode 100644 index 054e0e2..0000000 Binary files a/dependencyParser/mate-tools/classes/is2/data/Long2IntQuick.class and /dev/null differ diff --git a/dependencyParser/mate-tools/classes/is2/data/MFB.class b/dependencyParser/mate-tools/classes/is2/data/MFB.class deleted file mode 100644 index 58aa597..0000000 Binary files a/dependencyParser/mate-tools/classes/is2/data/MFB.class and /dev/null differ diff --git a/dependencyParser/mate-tools/classes/is2/data/MFC.class b/dependencyParser/mate-tools/classes/is2/data/MFC.class deleted file mode 100644 index fa3e098..0000000 Binary files a/dependencyParser/mate-tools/classes/is2/data/MFC.class and /dev/null differ diff --git a/dependencyParser/mate-tools/classes/is2/data/MFO$Data4.class b/dependencyParser/mate-tools/classes/is2/data/MFO$Data4.class deleted file mode 100644 index dbc74bd..0000000 Binary files a/dependencyParser/mate-tools/classes/is2/data/MFO$Data4.class and /dev/null differ diff --git a/dependencyParser/mate-tools/classes/is2/data/MFO.class b/dependencyParser/mate-tools/classes/is2/data/MFO.class deleted file mode 100644 index 1125008..0000000 Binary files a/dependencyParser/mate-tools/classes/is2/data/MFO.class and /dev/null differ diff --git a/dependencyParser/mate-tools/classes/is2/data/Open.class b/dependencyParser/mate-tools/classes/is2/data/Open.class deleted file mode 100644 index a34e40f..0000000 Binary files a/dependencyParser/mate-tools/classes/is2/data/Open.class and /dev/null differ diff --git a/dependencyParser/mate-tools/classes/is2/data/PSTree.class b/dependencyParser/mate-tools/classes/is2/data/PSTree.class deleted file mode 100644 index 3b68f29..0000000 Binary files a/dependencyParser/mate-tools/classes/is2/data/PSTree.class and /dev/null differ diff --git a/dependencyParser/mate-tools/classes/is2/data/Parameter.class b/dependencyParser/mate-tools/classes/is2/data/Parameter.class deleted file mode 100644 index f9a70aa..0000000 Binary files a/dependencyParser/mate-tools/classes/is2/data/Parameter.class and /dev/null differ diff --git a/dependencyParser/mate-tools/classes/is2/data/ParametersFloat.class b/dependencyParser/mate-tools/classes/is2/data/ParametersFloat.class deleted file mode 100644 index 53c3f0a..0000000 Binary files a/dependencyParser/mate-tools/classes/is2/data/ParametersFloat.class and /dev/null differ diff --git a/dependencyParser/mate-tools/classes/is2/data/Parse.class b/dependencyParser/mate-tools/classes/is2/data/Parse.class deleted file mode 100644 index bfec325..0000000 Binary files a/dependencyParser/mate-tools/classes/is2/data/Parse.class and /dev/null differ diff --git a/dependencyParser/mate-tools/classes/is2/data/ParseNBest.class b/dependencyParser/mate-tools/classes/is2/data/ParseNBest.class deleted file mode 100644 index 180e58c..0000000 Binary files a/dependencyParser/mate-tools/classes/is2/data/ParseNBest.class and /dev/null differ diff --git a/dependencyParser/mate-tools/classes/is2/data/PipeGen.class b/dependencyParser/mate-tools/classes/is2/data/PipeGen.class deleted file mode 100644 index d3400c4..0000000 Binary files a/dependencyParser/mate-tools/classes/is2/data/PipeGen.class and /dev/null differ diff --git a/dependencyParser/mate-tools/classes/is2/data/PrimeFinder.class b/dependencyParser/mate-tools/classes/is2/data/PrimeFinder.class deleted file mode 100644 index ec51f13..0000000 Binary files a/dependencyParser/mate-tools/classes/is2/data/PrimeFinder.class and /dev/null differ diff --git a/dependencyParser/mate-tools/classes/is2/data/RandomIndex.class b/dependencyParser/mate-tools/classes/is2/data/RandomIndex.class deleted file mode 100644 index 954f57c..0000000 Binary files a/dependencyParser/mate-tools/classes/is2/data/RandomIndex.class and /dev/null differ diff --git a/dependencyParser/mate-tools/classes/is2/data/SentenceData09.class b/dependencyParser/mate-tools/classes/is2/data/SentenceData09.class deleted file mode 100644 index ee6d068..0000000 Binary files a/dependencyParser/mate-tools/classes/is2/data/SentenceData09.class and /dev/null differ diff --git a/dependencyParser/mate-tools/classes/is2/data/Thesaurus.class b/dependencyParser/mate-tools/classes/is2/data/Thesaurus.class deleted file mode 100644 index a7d20d4..0000000 Binary files a/dependencyParser/mate-tools/classes/is2/data/Thesaurus.class and /dev/null differ diff --git a/dependencyParser/mate-tools/classes/is2/io/CONLLReader04.class b/dependencyParser/mate-tools/classes/is2/io/CONLLReader04.class deleted file mode 100644 index 3d0103f..0000000 Binary files a/dependencyParser/mate-tools/classes/is2/io/CONLLReader04.class and /dev/null differ diff --git a/dependencyParser/mate-tools/classes/is2/io/CONLLReader06.class b/dependencyParser/mate-tools/classes/is2/io/CONLLReader06.class deleted file mode 100644 index 06f8226..0000000 Binary files a/dependencyParser/mate-tools/classes/is2/io/CONLLReader06.class and /dev/null differ diff --git a/dependencyParser/mate-tools/classes/is2/io/CONLLReader08.class b/dependencyParser/mate-tools/classes/is2/io/CONLLReader08.class deleted file mode 100644 index b1c4919..0000000 Binary files a/dependencyParser/mate-tools/classes/is2/io/CONLLReader08.class and /dev/null differ diff --git a/dependencyParser/mate-tools/classes/is2/io/CONLLReader09.class b/dependencyParser/mate-tools/classes/is2/io/CONLLReader09.class deleted file mode 100644 index 98cbf01..0000000 Binary files a/dependencyParser/mate-tools/classes/is2/io/CONLLReader09.class and /dev/null differ diff --git a/dependencyParser/mate-tools/classes/is2/io/CONLLWriter06.class b/dependencyParser/mate-tools/classes/is2/io/CONLLWriter06.class deleted file mode 100644 index e1cdf31..0000000 Binary files a/dependencyParser/mate-tools/classes/is2/io/CONLLWriter06.class and /dev/null differ diff --git a/dependencyParser/mate-tools/classes/is2/io/CONLLWriter09.class b/dependencyParser/mate-tools/classes/is2/io/CONLLWriter09.class deleted file mode 100644 index 2697f96..0000000 Binary files a/dependencyParser/mate-tools/classes/is2/io/CONLLWriter09.class and /dev/null differ diff --git a/dependencyParser/mate-tools/classes/is2/io/IOGenerals.class b/dependencyParser/mate-tools/classes/is2/io/IOGenerals.class deleted file mode 100644 index 5346483..0000000 Binary files a/dependencyParser/mate-tools/classes/is2/io/IOGenerals.class and /dev/null differ diff --git a/dependencyParser/mate-tools/classes/is2/io/PSReader.class b/dependencyParser/mate-tools/classes/is2/io/PSReader.class deleted file mode 100644 index d197ad7..0000000 Binary files a/dependencyParser/mate-tools/classes/is2/io/PSReader.class and /dev/null differ diff --git a/dependencyParser/mate-tools/classes/is2/io/TigerReader$Line.class b/dependencyParser/mate-tools/classes/is2/io/TigerReader$Line.class deleted file mode 100644 index 7c14ffa..0000000 Binary files a/dependencyParser/mate-tools/classes/is2/io/TigerReader$Line.class and /dev/null differ diff --git a/dependencyParser/mate-tools/classes/is2/io/TigerReader.class b/dependencyParser/mate-tools/classes/is2/io/TigerReader.class deleted file mode 100644 index eb6aa37..0000000 Binary files a/dependencyParser/mate-tools/classes/is2/io/TigerReader.class and /dev/null differ diff --git a/dependencyParser/mate-tools/classes/is2/lemmatizer/Evaluator$1.class b/dependencyParser/mate-tools/classes/is2/lemmatizer/Evaluator$1.class deleted file mode 100644 index e015840..0000000 Binary files a/dependencyParser/mate-tools/classes/is2/lemmatizer/Evaluator$1.class and /dev/null differ diff --git a/dependencyParser/mate-tools/classes/is2/lemmatizer/Evaluator.class b/dependencyParser/mate-tools/classes/is2/lemmatizer/Evaluator.class deleted file mode 100644 index 53e79f4..0000000 Binary files a/dependencyParser/mate-tools/classes/is2/lemmatizer/Evaluator.class and /dev/null differ diff --git a/dependencyParser/mate-tools/classes/is2/lemmatizer/Lemmatizer$1.class b/dependencyParser/mate-tools/classes/is2/lemmatizer/Lemmatizer$1.class deleted file mode 100644 index fce30de..0000000 Binary files a/dependencyParser/mate-tools/classes/is2/lemmatizer/Lemmatizer$1.class and /dev/null differ diff --git a/dependencyParser/mate-tools/classes/is2/lemmatizer/Lemmatizer.class b/dependencyParser/mate-tools/classes/is2/lemmatizer/Lemmatizer.class deleted file mode 100644 index b6d3745..0000000 Binary files a/dependencyParser/mate-tools/classes/is2/lemmatizer/Lemmatizer.class and /dev/null differ diff --git a/dependencyParser/mate-tools/classes/is2/lemmatizer/MFO.class b/dependencyParser/mate-tools/classes/is2/lemmatizer/MFO.class deleted file mode 100644 index 651e2ae..0000000 Binary files a/dependencyParser/mate-tools/classes/is2/lemmatizer/MFO.class and /dev/null differ diff --git a/dependencyParser/mate-tools/classes/is2/lemmatizer/Options.class b/dependencyParser/mate-tools/classes/is2/lemmatizer/Options.class deleted file mode 100644 index cbe3419..0000000 Binary files a/dependencyParser/mate-tools/classes/is2/lemmatizer/Options.class and /dev/null differ diff --git a/dependencyParser/mate-tools/classes/is2/lemmatizer/Pipe$1.class b/dependencyParser/mate-tools/classes/is2/lemmatizer/Pipe$1.class deleted file mode 100644 index b445f21..0000000 Binary files a/dependencyParser/mate-tools/classes/is2/lemmatizer/Pipe$1.class and /dev/null differ diff --git a/dependencyParser/mate-tools/classes/is2/lemmatizer/Pipe.class b/dependencyParser/mate-tools/classes/is2/lemmatizer/Pipe.class deleted file mode 100644 index af22121..0000000 Binary files a/dependencyParser/mate-tools/classes/is2/lemmatizer/Pipe.class and /dev/null differ diff --git a/dependencyParser/mate-tools/classes/is2/lemmatizer/StringEdit.class b/dependencyParser/mate-tools/classes/is2/lemmatizer/StringEdit.class deleted file mode 100644 index 22ddb78..0000000 Binary files a/dependencyParser/mate-tools/classes/is2/lemmatizer/StringEdit.class and /dev/null differ diff --git a/dependencyParser/mate-tools/classes/is2/mtag/Convert.class b/dependencyParser/mate-tools/classes/is2/mtag/Convert.class deleted file mode 100644 index 6814212..0000000 Binary files a/dependencyParser/mate-tools/classes/is2/mtag/Convert.class and /dev/null differ diff --git a/dependencyParser/mate-tools/classes/is2/mtag/Evaluator$1.class b/dependencyParser/mate-tools/classes/is2/mtag/Evaluator$1.class deleted file mode 100644 index 9ad12ae..0000000 Binary files a/dependencyParser/mate-tools/classes/is2/mtag/Evaluator$1.class and /dev/null differ diff --git a/dependencyParser/mate-tools/classes/is2/mtag/Evaluator.class b/dependencyParser/mate-tools/classes/is2/mtag/Evaluator.class deleted file mode 100644 index 5f05944..0000000 Binary files a/dependencyParser/mate-tools/classes/is2/mtag/Evaluator.class and /dev/null differ diff --git a/dependencyParser/mate-tools/classes/is2/mtag/ExtractorM.class b/dependencyParser/mate-tools/classes/is2/mtag/ExtractorM.class deleted file mode 100644 index 1dfb207..0000000 Binary files a/dependencyParser/mate-tools/classes/is2/mtag/ExtractorM.class and /dev/null differ diff --git a/dependencyParser/mate-tools/classes/is2/mtag/MFO$Data.class b/dependencyParser/mate-tools/classes/is2/mtag/MFO$Data.class deleted file mode 100644 index fb46d59..0000000 Binary files a/dependencyParser/mate-tools/classes/is2/mtag/MFO$Data.class and /dev/null differ diff --git a/dependencyParser/mate-tools/classes/is2/mtag/MFO$Data4.class b/dependencyParser/mate-tools/classes/is2/mtag/MFO$Data4.class deleted file mode 100644 index a3346d7..0000000 Binary files a/dependencyParser/mate-tools/classes/is2/mtag/MFO$Data4.class and /dev/null differ diff --git a/dependencyParser/mate-tools/classes/is2/mtag/MFO.class b/dependencyParser/mate-tools/classes/is2/mtag/MFO.class deleted file mode 100644 index 5014e54..0000000 Binary files a/dependencyParser/mate-tools/classes/is2/mtag/MFO.class and /dev/null differ diff --git a/dependencyParser/mate-tools/classes/is2/mtag/Options.class b/dependencyParser/mate-tools/classes/is2/mtag/Options.class deleted file mode 100644 index a1ffdcb..0000000 Binary files a/dependencyParser/mate-tools/classes/is2/mtag/Options.class and /dev/null differ diff --git a/dependencyParser/mate-tools/classes/is2/mtag/Pipe.class b/dependencyParser/mate-tools/classes/is2/mtag/Pipe.class deleted file mode 100644 index 4d3ae21..0000000 Binary files a/dependencyParser/mate-tools/classes/is2/mtag/Pipe.class and /dev/null differ diff --git a/dependencyParser/mate-tools/classes/is2/mtag/Tagger.class b/dependencyParser/mate-tools/classes/is2/mtag/Tagger.class deleted file mode 100644 index 37af1ef..0000000 Binary files a/dependencyParser/mate-tools/classes/is2/mtag/Tagger.class and /dev/null differ diff --git a/dependencyParser/mate-tools/classes/is2/parser/Closed.class b/dependencyParser/mate-tools/classes/is2/parser/Closed.class deleted file mode 100644 index 7e6161a..0000000 Binary files a/dependencyParser/mate-tools/classes/is2/parser/Closed.class and /dev/null differ diff --git a/dependencyParser/mate-tools/classes/is2/parser/D5.class b/dependencyParser/mate-tools/classes/is2/parser/D5.class deleted file mode 100644 index 11da4cc..0000000 Binary files a/dependencyParser/mate-tools/classes/is2/parser/D5.class and /dev/null differ diff --git a/dependencyParser/mate-tools/classes/is2/parser/Decoder.class b/dependencyParser/mate-tools/classes/is2/parser/Decoder.class deleted file mode 100644 index 35fbe20..0000000 Binary files a/dependencyParser/mate-tools/classes/is2/parser/Decoder.class and /dev/null differ diff --git a/dependencyParser/mate-tools/classes/is2/parser/Edges$C.class b/dependencyParser/mate-tools/classes/is2/parser/Edges$C.class deleted file mode 100644 index bcbfa2e..0000000 Binary files a/dependencyParser/mate-tools/classes/is2/parser/Edges$C.class and /dev/null differ diff --git a/dependencyParser/mate-tools/classes/is2/parser/Edges.class b/dependencyParser/mate-tools/classes/is2/parser/Edges.class deleted file mode 100644 index 62f892e..0000000 Binary files a/dependencyParser/mate-tools/classes/is2/parser/Edges.class and /dev/null differ diff --git a/dependencyParser/mate-tools/classes/is2/parser/Evaluator$Results.class b/dependencyParser/mate-tools/classes/is2/parser/Evaluator$Results.class deleted file mode 100644 index 52913a2..0000000 Binary files a/dependencyParser/mate-tools/classes/is2/parser/Evaluator$Results.class and /dev/null differ diff --git a/dependencyParser/mate-tools/classes/is2/parser/Evaluator.class b/dependencyParser/mate-tools/classes/is2/parser/Evaluator.class deleted file mode 100644 index cd8680f..0000000 Binary files a/dependencyParser/mate-tools/classes/is2/parser/Evaluator.class and /dev/null differ diff --git a/dependencyParser/mate-tools/classes/is2/parser/Extractor.class b/dependencyParser/mate-tools/classes/is2/parser/Extractor.class deleted file mode 100644 index cb576f0..0000000 Binary files a/dependencyParser/mate-tools/classes/is2/parser/Extractor.class and /dev/null differ diff --git a/dependencyParser/mate-tools/classes/is2/parser/MFO.class b/dependencyParser/mate-tools/classes/is2/parser/MFO.class deleted file mode 100644 index e2f5d9f..0000000 Binary files a/dependencyParser/mate-tools/classes/is2/parser/MFO.class and /dev/null differ diff --git a/dependencyParser/mate-tools/classes/is2/parser/Open.class b/dependencyParser/mate-tools/classes/is2/parser/Open.class deleted file mode 100644 index 8d4ef9b..0000000 Binary files a/dependencyParser/mate-tools/classes/is2/parser/Open.class and /dev/null differ diff --git a/dependencyParser/mate-tools/classes/is2/parser/Options.class b/dependencyParser/mate-tools/classes/is2/parser/Options.class deleted file mode 100644 index 806b3d0..0000000 Binary files a/dependencyParser/mate-tools/classes/is2/parser/Options.class and /dev/null differ diff --git a/dependencyParser/mate-tools/classes/is2/parser/ParallelDecoder$DSet.class b/dependencyParser/mate-tools/classes/is2/parser/ParallelDecoder$DSet.class deleted file mode 100644 index 534b87c..0000000 Binary files a/dependencyParser/mate-tools/classes/is2/parser/ParallelDecoder$DSet.class and /dev/null differ diff --git a/dependencyParser/mate-tools/classes/is2/parser/ParallelDecoder.class b/dependencyParser/mate-tools/classes/is2/parser/ParallelDecoder.class deleted file mode 100644 index dd112d0..0000000 Binary files a/dependencyParser/mate-tools/classes/is2/parser/ParallelDecoder.class and /dev/null differ diff --git a/dependencyParser/mate-tools/classes/is2/parser/ParallelExtract$DSet.class b/dependencyParser/mate-tools/classes/is2/parser/ParallelExtract$DSet.class deleted file mode 100644 index 823130d..0000000 Binary files a/dependencyParser/mate-tools/classes/is2/parser/ParallelExtract$DSet.class and /dev/null differ diff --git a/dependencyParser/mate-tools/classes/is2/parser/ParallelExtract.class b/dependencyParser/mate-tools/classes/is2/parser/ParallelExtract.class deleted file mode 100644 index 7dfe35c..0000000 Binary files a/dependencyParser/mate-tools/classes/is2/parser/ParallelExtract.class and /dev/null differ diff --git a/dependencyParser/mate-tools/classes/is2/parser/ParallelRearrange$PA.class b/dependencyParser/mate-tools/classes/is2/parser/ParallelRearrange$PA.class deleted file mode 100644 index d1b8bfe..0000000 Binary files a/dependencyParser/mate-tools/classes/is2/parser/ParallelRearrange$PA.class and /dev/null differ diff --git a/dependencyParser/mate-tools/classes/is2/parser/ParallelRearrange.class b/dependencyParser/mate-tools/classes/is2/parser/ParallelRearrange.class deleted file mode 100644 index fcfed43..0000000 Binary files a/dependencyParser/mate-tools/classes/is2/parser/ParallelRearrange.class and /dev/null differ diff --git a/dependencyParser/mate-tools/classes/is2/parser/Parameters.class b/dependencyParser/mate-tools/classes/is2/parser/Parameters.class deleted file mode 100644 index bc64375..0000000 Binary files a/dependencyParser/mate-tools/classes/is2/parser/Parameters.class and /dev/null differ diff --git a/dependencyParser/mate-tools/classes/is2/parser/ParametersFloat.class b/dependencyParser/mate-tools/classes/is2/parser/ParametersFloat.class deleted file mode 100644 index 524da17..0000000 Binary files a/dependencyParser/mate-tools/classes/is2/parser/ParametersFloat.class and /dev/null differ diff --git a/dependencyParser/mate-tools/classes/is2/parser/Parser.class b/dependencyParser/mate-tools/classes/is2/parser/Parser.class deleted file mode 100644 index 575c9da..0000000 Binary files a/dependencyParser/mate-tools/classes/is2/parser/Parser.class and /dev/null differ diff --git a/dependencyParser/mate-tools/classes/is2/parser/Pipe.class b/dependencyParser/mate-tools/classes/is2/parser/Pipe.class deleted file mode 100644 index ea909ad..0000000 Binary files a/dependencyParser/mate-tools/classes/is2/parser/Pipe.class and /dev/null differ diff --git a/dependencyParser/mate-tools/classes/is2/parser/package.html b/dependencyParser/mate-tools/classes/is2/parser/package.html deleted file mode 100755 index a4f40a2..0000000 --- a/dependencyParser/mate-tools/classes/is2/parser/package.html +++ /dev/null @@ -1,11 +0,0 @@ -Package info -<ul> - <li> separate cluster feature to keep speed since two many features in a function reduce speed drastically. </li> - <li> try second order stacking features </li> - <li> parser stacking features </li> - <li> lots of cluster features </li> - <li> Iteration over edges and not extraction of all edges each time </li> - <li> integrated new structurer writer </li> -</ul> - Change in FS, I observed lots of duplicated grand-children features -<br> \ No newline at end of file diff --git a/dependencyParser/mate-tools/classes/is2/parserR2/Decoder.class b/dependencyParser/mate-tools/classes/is2/parserR2/Decoder.class deleted file mode 100644 index fd23b35..0000000 Binary files a/dependencyParser/mate-tools/classes/is2/parserR2/Decoder.class and /dev/null differ diff --git a/dependencyParser/mate-tools/classes/is2/parserR2/Options.class b/dependencyParser/mate-tools/classes/is2/parserR2/Options.class deleted file mode 100644 index c36af6b..0000000 Binary files a/dependencyParser/mate-tools/classes/is2/parserR2/Options.class and /dev/null differ diff --git a/dependencyParser/mate-tools/classes/is2/parserR2/Parameters.class b/dependencyParser/mate-tools/classes/is2/parserR2/Parameters.class deleted file mode 100644 index 3ff4ebe..0000000 Binary files a/dependencyParser/mate-tools/classes/is2/parserR2/Parameters.class and /dev/null differ diff --git a/dependencyParser/mate-tools/classes/is2/parserR2/ParametersFloat.class b/dependencyParser/mate-tools/classes/is2/parserR2/ParametersFloat.class deleted file mode 100644 index 3837dc0..0000000 Binary files a/dependencyParser/mate-tools/classes/is2/parserR2/ParametersFloat.class and /dev/null differ diff --git a/dependencyParser/mate-tools/classes/is2/parserR2/Parser.class b/dependencyParser/mate-tools/classes/is2/parserR2/Parser.class deleted file mode 100644 index 2b1b742..0000000 Binary files a/dependencyParser/mate-tools/classes/is2/parserR2/Parser.class and /dev/null differ diff --git a/dependencyParser/mate-tools/classes/is2/parserR2/Pipe.class b/dependencyParser/mate-tools/classes/is2/parserR2/Pipe.class deleted file mode 100644 index 7067c95..0000000 Binary files a/dependencyParser/mate-tools/classes/is2/parserR2/Pipe.class and /dev/null differ diff --git a/dependencyParser/mate-tools/classes/is2/parserR2/PipeReranker.class b/dependencyParser/mate-tools/classes/is2/parserR2/PipeReranker.class deleted file mode 100644 index fc6cb91..0000000 Binary files a/dependencyParser/mate-tools/classes/is2/parserR2/PipeReranker.class and /dev/null differ diff --git a/dependencyParser/mate-tools/classes/is2/parserR2/Reranker.class b/dependencyParser/mate-tools/classes/is2/parserR2/Reranker.class deleted file mode 100644 index 5177b92..0000000 Binary files a/dependencyParser/mate-tools/classes/is2/parserR2/Reranker.class and /dev/null differ diff --git a/dependencyParser/mate-tools/classes/is2/parserR2/package.html b/dependencyParser/mate-tools/classes/is2/parserR2/package.html deleted file mode 100755 index 6b06482..0000000 --- a/dependencyParser/mate-tools/classes/is2/parserR2/package.html +++ /dev/null @@ -1,3 +0,0 @@ -Package info - - n-best parser -<br> \ No newline at end of file diff --git a/dependencyParser/mate-tools/classes/is2/tag/ExtractorT2.class b/dependencyParser/mate-tools/classes/is2/tag/ExtractorT2.class deleted file mode 100644 index 44dba9e..0000000 Binary files a/dependencyParser/mate-tools/classes/is2/tag/ExtractorT2.class and /dev/null differ diff --git a/dependencyParser/mate-tools/classes/is2/tag/Lexicon.class b/dependencyParser/mate-tools/classes/is2/tag/Lexicon.class deleted file mode 100644 index 1ea1e85..0000000 Binary files a/dependencyParser/mate-tools/classes/is2/tag/Lexicon.class and /dev/null differ diff --git a/dependencyParser/mate-tools/classes/is2/tag/MFO$Data4.class b/dependencyParser/mate-tools/classes/is2/tag/MFO$Data4.class deleted file mode 100644 index 3627f10..0000000 Binary files a/dependencyParser/mate-tools/classes/is2/tag/MFO$Data4.class and /dev/null differ diff --git a/dependencyParser/mate-tools/classes/is2/tag/MFO.class b/dependencyParser/mate-tools/classes/is2/tag/MFO.class deleted file mode 100644 index 10ea428..0000000 Binary files a/dependencyParser/mate-tools/classes/is2/tag/MFO.class and /dev/null differ diff --git a/dependencyParser/mate-tools/classes/is2/tag/Options.class b/dependencyParser/mate-tools/classes/is2/tag/Options.class deleted file mode 100644 index e6ec2c0..0000000 Binary files a/dependencyParser/mate-tools/classes/is2/tag/Options.class and /dev/null differ diff --git a/dependencyParser/mate-tools/classes/is2/tag/POS.class b/dependencyParser/mate-tools/classes/is2/tag/POS.class deleted file mode 100644 index 8ea2052..0000000 Binary files a/dependencyParser/mate-tools/classes/is2/tag/POS.class and /dev/null differ diff --git a/dependencyParser/mate-tools/classes/is2/tag/Tagger.class b/dependencyParser/mate-tools/classes/is2/tag/Tagger.class deleted file mode 100644 index 11ac1aa..0000000 Binary files a/dependencyParser/mate-tools/classes/is2/tag/Tagger.class and /dev/null differ diff --git a/dependencyParser/mate-tools/classes/is2/tag/package.html b/dependencyParser/mate-tools/classes/is2/tag/package.html deleted file mode 100644 index 469fdf6..0000000 --- a/dependencyParser/mate-tools/classes/is2/tag/package.html +++ /dev/null @@ -1,4 +0,0 @@ -Package info -<br><br> -This parser includes a tagger into the dependency parser -<br> \ No newline at end of file diff --git a/dependencyParser/mate-tools/classes/is2/tools/IPipe.class b/dependencyParser/mate-tools/classes/is2/tools/IPipe.class deleted file mode 100644 index 37a51d1..0000000 Binary files a/dependencyParser/mate-tools/classes/is2/tools/IPipe.class and /dev/null differ diff --git a/dependencyParser/mate-tools/classes/is2/tools/Retrainable.class b/dependencyParser/mate-tools/classes/is2/tools/Retrainable.class deleted file mode 100644 index 3675e0f..0000000 Binary files a/dependencyParser/mate-tools/classes/is2/tools/Retrainable.class and /dev/null differ diff --git a/dependencyParser/mate-tools/classes/is2/tools/Tool.class b/dependencyParser/mate-tools/classes/is2/tools/Tool.class deleted file mode 100644 index 0ba217e..0000000 Binary files a/dependencyParser/mate-tools/classes/is2/tools/Tool.class and /dev/null differ diff --git a/dependencyParser/mate-tools/classes/is2/tools/ToolIO.class b/dependencyParser/mate-tools/classes/is2/tools/ToolIO.class deleted file mode 100644 index a6f87ab..0000000 Binary files a/dependencyParser/mate-tools/classes/is2/tools/ToolIO.class and /dev/null differ diff --git a/dependencyParser/mate-tools/classes/is2/tools/Train.class b/dependencyParser/mate-tools/classes/is2/tools/Train.class deleted file mode 100644 index 0551298..0000000 Binary files a/dependencyParser/mate-tools/classes/is2/tools/Train.class and /dev/null differ diff --git a/dependencyParser/mate-tools/classes/is2/util/Convert.class b/dependencyParser/mate-tools/classes/is2/util/Convert.class deleted file mode 100644 index cc00ef1..0000000 Binary files a/dependencyParser/mate-tools/classes/is2/util/Convert.class and /dev/null differ diff --git a/dependencyParser/mate-tools/classes/is2/util/Convert0409.class b/dependencyParser/mate-tools/classes/is2/util/Convert0409.class deleted file mode 100644 index ded4be5..0000000 Binary files a/dependencyParser/mate-tools/classes/is2/util/Convert0409.class and /dev/null differ diff --git a/dependencyParser/mate-tools/classes/is2/util/ConvertADJ.class b/dependencyParser/mate-tools/classes/is2/util/ConvertADJ.class deleted file mode 100644 index c080750..0000000 Binary files a/dependencyParser/mate-tools/classes/is2/util/ConvertADJ.class and /dev/null differ diff --git a/dependencyParser/mate-tools/classes/is2/util/ConvertLowerCase0909.class b/dependencyParser/mate-tools/classes/is2/util/ConvertLowerCase0909.class deleted file mode 100644 index d2ffbf4..0000000 Binary files a/dependencyParser/mate-tools/classes/is2/util/ConvertLowerCase0909.class and /dev/null differ diff --git a/dependencyParser/mate-tools/classes/is2/util/ConvertTiger2CoNLL.class b/dependencyParser/mate-tools/classes/is2/util/ConvertTiger2CoNLL.class deleted file mode 100644 index d9c9cdf..0000000 Binary files a/dependencyParser/mate-tools/classes/is2/util/ConvertTiger2CoNLL.class and /dev/null differ diff --git a/dependencyParser/mate-tools/classes/is2/util/DB.class b/dependencyParser/mate-tools/classes/is2/util/DB.class deleted file mode 100644 index 50c83a6..0000000 Binary files a/dependencyParser/mate-tools/classes/is2/util/DB.class and /dev/null differ diff --git a/dependencyParser/mate-tools/classes/is2/util/Edges$C.class b/dependencyParser/mate-tools/classes/is2/util/Edges$C.class deleted file mode 100644 index e3c539b..0000000 Binary files a/dependencyParser/mate-tools/classes/is2/util/Edges$C.class and /dev/null differ diff --git a/dependencyParser/mate-tools/classes/is2/util/Edges.class b/dependencyParser/mate-tools/classes/is2/util/Edges.class deleted file mode 100644 index 6fd6eeb..0000000 Binary files a/dependencyParser/mate-tools/classes/is2/util/Edges.class and /dev/null differ diff --git a/dependencyParser/mate-tools/classes/is2/util/Evaluator$1.class b/dependencyParser/mate-tools/classes/is2/util/Evaluator$1.class deleted file mode 100644 index 11c15b6..0000000 Binary files a/dependencyParser/mate-tools/classes/is2/util/Evaluator$1.class and /dev/null differ diff --git a/dependencyParser/mate-tools/classes/is2/util/Evaluator$Results.class b/dependencyParser/mate-tools/classes/is2/util/Evaluator$Results.class deleted file mode 100644 index c8a450a..0000000 Binary files a/dependencyParser/mate-tools/classes/is2/util/Evaluator$Results.class and /dev/null differ diff --git a/dependencyParser/mate-tools/classes/is2/util/Evaluator.class b/dependencyParser/mate-tools/classes/is2/util/Evaluator.class deleted file mode 100644 index c9a50ff..0000000 Binary files a/dependencyParser/mate-tools/classes/is2/util/Evaluator.class and /dev/null differ diff --git a/dependencyParser/mate-tools/classes/is2/util/EvaluatorTagger$1.class b/dependencyParser/mate-tools/classes/is2/util/EvaluatorTagger$1.class deleted file mode 100644 index 129c2f1..0000000 Binary files a/dependencyParser/mate-tools/classes/is2/util/EvaluatorTagger$1.class and /dev/null differ diff --git a/dependencyParser/mate-tools/classes/is2/util/EvaluatorTagger$2.class b/dependencyParser/mate-tools/classes/is2/util/EvaluatorTagger$2.class deleted file mode 100644 index 7a634d1..0000000 Binary files a/dependencyParser/mate-tools/classes/is2/util/EvaluatorTagger$2.class and /dev/null differ diff --git a/dependencyParser/mate-tools/classes/is2/util/EvaluatorTagger$Results.class b/dependencyParser/mate-tools/classes/is2/util/EvaluatorTagger$Results.class deleted file mode 100644 index fc57ccc..0000000 Binary files a/dependencyParser/mate-tools/classes/is2/util/EvaluatorTagger$Results.class and /dev/null differ diff --git a/dependencyParser/mate-tools/classes/is2/util/EvaluatorTagger.class b/dependencyParser/mate-tools/classes/is2/util/EvaluatorTagger.class deleted file mode 100644 index 20d5d22..0000000 Binary files a/dependencyParser/mate-tools/classes/is2/util/EvaluatorTagger.class and /dev/null differ diff --git a/dependencyParser/mate-tools/classes/is2/util/ExtractParagraphs.class b/dependencyParser/mate-tools/classes/is2/util/ExtractParagraphs.class deleted file mode 100644 index dc00415..0000000 Binary files a/dependencyParser/mate-tools/classes/is2/util/ExtractParagraphs.class and /dev/null differ diff --git a/dependencyParser/mate-tools/classes/is2/util/IntStack.class b/dependencyParser/mate-tools/classes/is2/util/IntStack.class deleted file mode 100644 index 4af4316..0000000 Binary files a/dependencyParser/mate-tools/classes/is2/util/IntStack.class and /dev/null differ diff --git a/dependencyParser/mate-tools/classes/is2/util/Long2Int.class b/dependencyParser/mate-tools/classes/is2/util/Long2Int.class deleted file mode 100644 index c816fd5..0000000 Binary files a/dependencyParser/mate-tools/classes/is2/util/Long2Int.class and /dev/null differ diff --git a/dependencyParser/mate-tools/classes/is2/util/Options.class b/dependencyParser/mate-tools/classes/is2/util/Options.class deleted file mode 100644 index 8071ebb..0000000 Binary files a/dependencyParser/mate-tools/classes/is2/util/Options.class and /dev/null differ diff --git a/dependencyParser/mate-tools/classes/is2/util/OptionsSuper.class b/dependencyParser/mate-tools/classes/is2/util/OptionsSuper.class deleted file mode 100644 index 8f8a181..0000000 Binary files a/dependencyParser/mate-tools/classes/is2/util/OptionsSuper.class and /dev/null differ diff --git a/dependencyParser/mate-tools/classes/is2/util/ParserEvaluator$Results.class b/dependencyParser/mate-tools/classes/is2/util/ParserEvaluator$Results.class deleted file mode 100644 index 154033d..0000000 Binary files a/dependencyParser/mate-tools/classes/is2/util/ParserEvaluator$Results.class and /dev/null differ diff --git a/dependencyParser/mate-tools/classes/is2/util/ParserEvaluator.class b/dependencyParser/mate-tools/classes/is2/util/ParserEvaluator.class deleted file mode 100644 index 72c4f35..0000000 Binary files a/dependencyParser/mate-tools/classes/is2/util/ParserEvaluator.class and /dev/null differ diff --git a/dependencyParser/mate-tools/classes/is2/util/Split.class b/dependencyParser/mate-tools/classes/is2/util/Split.class deleted file mode 100644 index d665e7e..0000000 Binary files a/dependencyParser/mate-tools/classes/is2/util/Split.class and /dev/null differ diff --git a/dependencyParser/mate-tools/classes/is2/util/Split2.class b/dependencyParser/mate-tools/classes/is2/util/Split2.class deleted file mode 100644 index 3222aee..0000000 Binary files a/dependencyParser/mate-tools/classes/is2/util/Split2.class and /dev/null differ diff --git a/dependencyParser/mate-tools/classes/is2/util/Split3.class b/dependencyParser/mate-tools/classes/is2/util/Split3.class deleted file mode 100644 index a16bbc6..0000000 Binary files a/dependencyParser/mate-tools/classes/is2/util/Split3.class and /dev/null differ diff --git a/dependencyParser/mate-tools/lib/commons-math-2.2.jar b/dependencyParser/mate-tools/lib/commons-math-2.2.jar deleted file mode 100644 index b29a39c..0000000 Binary files a/dependencyParser/mate-tools/lib/commons-math-2.2.jar and /dev/null differ diff --git a/dependencyParser/mate-tools/lib/trove-2.0.4.jar b/dependencyParser/mate-tools/lib/trove-2.0.4.jar deleted file mode 100644 index cb1c8f1..0000000 Binary files a/dependencyParser/mate-tools/lib/trove-2.0.4.jar and /dev/null differ diff --git a/dependencyParser/mate-tools/src/decoder/ParallelDecoder.java b/dependencyParser/mate-tools/src/decoder/ParallelDecoder.java deleted file mode 100755 index cf4cfa9..0000000 --- a/dependencyParser/mate-tools/src/decoder/ParallelDecoder.java +++ /dev/null @@ -1,189 +0,0 @@ -package decoder; - -import java.util.ArrayList; -import java.util.concurrent.Callable; - -import is2.data.Closed; -import is2.data.DataF; -import is2.data.Edges; -import is2.data.Open; - -/** - * @author Bernd Bohnet, 30.08.2009 - * - * This class implements a parallel feature extractor. - */ -final public class ParallelDecoder implements Callable<Object> { - // some constants - private static final float INIT_BEST = (-1.0F / 0.0F); - private static final boolean[] DIR = { false, true }; - - // the data space of the weights for a dependency tree - final private DataF x; - - private short[] pos; - - private Open O[][][][]; - private Closed C[][][][]; - - private int n; - - boolean done = false; - public boolean waiting = false; - - /** - * Initialize the parallel decoder. - * - * @param pos - * part-of-speech - * @param d - * data - * @param edges - * part-of-speech edge mapping - * @param o - * open spans - * @param c - * closed spans - * @param n - * number of words - */ - public ParallelDecoder(short[] pos, DataF d, Open o[][][][], Closed c[][][][], int n) { - - this.pos = pos; - this.x = d; - - this.O = o; - this.C = c; - this.n = n; - } - - private static class DSet { - short w1, w2; - } - - @Override - public Object call() { - - while (true) { - - DSet set = get(); - if (done && set == null) - break; - - if (set == null) - return null; - - short s = set.w1, t = set.w2; - - for (short dir = 1; dir >= 0; dir--) { - - short[] labs = (dir == 1) ? Edges.get(pos[s], pos[t], false) : Edges.get(pos[t], pos[s], true); - - O[s][t][dir] = new Open[labs.length]; - for (int l = O[s][t][dir].length - 1; l >= 0; l--) { - - double tRP = INIT_BEST; - - Closed tL = null, tR = null; - - for (int r = s; r < t; r++) { - - if (s == 0 && r != 0) - continue; - - double tLPr = INIT_BEST, tRPr = INIT_BEST; - Closed tLCld = null, tRCld = null; - - if (r == s) - tLPr = dir == 1 ? x.sib[s][t][s][0][l] : x.gra[t][s][s][1][l]; - else - for (int i = s + 1; i <= r; i++) - if (((dir == 1 ? x.sib[s][t][i][0][l] : x.gra[t][s][i][1][l]) - + C[s][r][1][i].p) > tLPr) { - tLPr = ((dir == 1 ? x.sib[s][t][i][0][l] : x.gra[t][s][i][1][l]) + C[s][r][1][i].p); - tLCld = C[s][r][1][i]; - } - - if (r == t - 1) - tRPr = dir == 1 ? x.gra[s][t][s][0][l] : x.sib[t][s][s][1][l]; - else - for (int i = r + 1; i < t; i++) - if (((dir == 1 ? x.gra[s][t][i][0][l] : x.sib[t][s][i][1][l]) - + C[r + 1][t][0][i].p) > tRPr) { - tRPr = ((dir == 1 ? x.gra[s][t][i][0][l] : x.sib[t][s][i][1][l]) - + C[r + 1][t][0][i].p); - tRCld = C[r + 1][t][0][i]; - } - - if (tLPr + tRPr > tRP) { - tRP = tLPr + tRPr; - tL = tLCld; - tR = tRCld; - } - } - O[s][t][dir][l] = new Open(s, t, dir, labs[l], tL, tR, - (float) (tRP + ((dir == 1) ? x.pl[s][t] : x.pl[t][s]) - + ((dir == 1) ? x.lab[s][t][labs[l]][0] : x.lab[t][s][labs[l]][1]))); - } - } - C[s][t][1] = new Closed[n]; - C[s][t][0] = new Closed[n]; - - for (int m = s; m <= t; m++) { - for (boolean d : DIR) { - if ((d && m != s) || !d && (m != t && s != 0)) { - - // create closed structure - - double top = INIT_BEST; - - Open tU = null; - Closed tL = null; - int numLabels = O[(d ? s : m)][(d ? m : t)][d ? 1 : 0].length; - - // for (int l = numLabels-1; l >=0; l--) { - for (int l = 0; l < numLabels; l++) { - - Open hi = O[(d ? s : m)][(d ? m : t)][d ? 1 : 0][l]; - for (int amb = m + (d ? 1 : -1); amb != (d ? t : s) + (d ? 1 : -1); amb += (d ? 1 : -1)) { - - if ((hi.p + C[d ? m : s][d ? t : m][d ? 1 : 0][amb].p - + x.gra[d ? s : t][m][amb][d ? 0 : 1][l]) > top) { - top = (hi.p + C[d ? m : s][d ? t : m][d ? 1 : 0][amb].p - + x.gra[d ? s : t][m][amb][(d ? 0 : 1)][l]); - tU = hi; - tL = C[d ? m : s][d ? t : m][d ? 1 : 0][amb]; - } - } - - if ((m == (d ? t : s)) && (hi.p + x.gra[d ? s : t][m][d ? s : t][(d ? 0 : 1)][l]) > top) { - top = (hi.p + x.gra[(d ? s : t)][m][d ? s : t][d ? 0 : 1][l]); - tU = hi; - tL = null; - } - } - C[s][t][d ? 1 : 0][m] = new Closed(s, t, m, d ? 1 : 0, tU, tL, (float) top); - } - } - } - } - return null; - } - - public static ArrayList<DSet> sets = new ArrayList<DSet>(); - - static synchronized private DSet get() { - synchronized (sets) { - if (sets.size() == 0) - return null; - return sets.remove(sets.size() - 1); - } - } - - public static void add(short w1, short w2) { - DSet ds = new DSet(); - ds.w1 = w1; - ds.w2 = w2; - sets.add(ds); - } -} diff --git a/dependencyParser/mate-tools/src/decoder/ParallelRearrangeNBest.java b/dependencyParser/mate-tools/src/decoder/ParallelRearrangeNBest.java deleted file mode 100755 index 5a16211..0000000 --- a/dependencyParser/mate-tools/src/decoder/ParallelRearrangeNBest.java +++ /dev/null @@ -1,144 +0,0 @@ -package decoder; - -import java.util.ArrayList; -import java.util.concurrent.Callable; - -import extractors.Extractor; -import is2.data.DataF; -import is2.data.Edges; -import is2.data.Parse; -import is2.data.ParseNBest; - -/** - * @author Dr. Bernd Bohnet, 30.08.2009 - * - * This class implements a parallel edge rearrangement for - * non-projective parsing; The linear method was first suggest by Rayn - * McDonald et. al. 2005. - */ -final public class ParallelRearrangeNBest implements Callable<Object> { - - // new parent child combination to explore - final static class PA { - final float p; - final short ch, pa; - - float best; - - public PA(float p2, short ch2, short pa2) { - p = p2; - ch = ch2; - pa = pa2; - } - } - - // some data from the dependency tree - private short[] pos; - private DataF x; - private boolean[][] isChild; - public short[] heads, types; - private float lastNBest; - private float best; // best so far - private float threshold; - private Extractor extractor; - - /** - * Initialize the parallel rearrange thread - * - * @param isChild2 - * is a child - * @param edgesC - * the part-of-speech edge mapping - * @param pos - * the part-of-speech - * @param x - * the data - * @param lastNBest - * @param s - * the heads - * @param ts - * the types - */ - public ParallelRearrangeNBest(short[] pos, DataF x, Parse p, float lastNBest, Extractor extractor, float best, - float threshold) { - - heads = p.heads; - - types = p.labels; - - isChild = new boolean[heads.length][heads.length]; - - for (int i = 1, l1 = 1; i < heads.length; i++, l1 = i) - while ((l1 = heads[l1]) != -1) - isChild[l1][i] = true; - - this.lastNBest = lastNBest; - this.pos = pos; - this.x = x; - - this.extractor = extractor; - this.best = best; - this.threshold = threshold; - } - - public ArrayList<ParseNBest> parses = new ArrayList<ParseNBest>(); - - @Override - public Object call() { - - // check the list of new possible parents and children for a better - // combination - for (int ch = 1; ch < heads.length; ch++) { - for (short pa = 0; pa < heads.length; pa++) { - if (ch == pa || pa == heads[ch] || isChild[ch][pa]) - continue; - - short oldP = heads[ch], oldT = types[ch]; - heads[ch] = pa; - - short[] labels = Edges.get(pos[pa], pos[ch], ch < pa); - - for (short label : labels) { - - types[ch] = label; - float p_new = extractor.encode3(pos, heads, types, x); - - if (p_new < lastNBest || ((best + this.threshold) > p_new)) - continue; - - ParseNBest p = new ParseNBest(); - p.signature(heads, types); - p.f1 = p_new; - parses.add(p); - } - - // change back - heads[ch] = oldP; - types[ch] = oldT; - - // consider changes to labels only - labels = Edges.get(pos[oldP], pos[ch], ch < oldP); - - for (short label : labels) { - - types[ch] = label; - float p_new = extractor.encode3(pos, heads, types, x); - - // optimization: add only if larger than smallest of n-best - if (p_new < lastNBest || ((best + this.threshold) > p_new)) - continue; - - ParseNBest p = new ParseNBest(); - p.signature(heads, types); - p.f1 = p_new; - parses.add(p); - } - - heads[ch] = oldP; - types[ch] = oldT; - } - } - return parses; - } - -} diff --git a/dependencyParser/mate-tools/src/decoder/ParallelRearrangeNBest2.java b/dependencyParser/mate-tools/src/decoder/ParallelRearrangeNBest2.java deleted file mode 100644 index 6795b7b..0000000 --- a/dependencyParser/mate-tools/src/decoder/ParallelRearrangeNBest2.java +++ /dev/null @@ -1,158 +0,0 @@ -package decoder; - -import java.util.ArrayList; -import java.util.concurrent.Callable; - -import extractors.Extractor; -import is2.data.DataF; -import is2.data.Edges; -import is2.data.Parse; -import is2.data.ParseNBest; - -/** - * @author Dr. Bernd Bohnet, 30.08.2009 - * - * This class implements a parallel edge rearrangement for - * non-projective parsing; The linear method was first suggest by Rayn - * McDonald et. al. 2005. - */ -final public class ParallelRearrangeNBest2 implements Callable<Object> { - - // new parent child combination to explore - final static class PA { - final float p; - final short ch, pa; - - public short[] heads, types; - - public PA(Parse p, short ch2, short pa2) { - this.p = (float) p.f1; - heads = p.heads; - types = p.labels; - ch = ch2; - pa = pa2; - - } - } - - // list of parent child combinations - private static ArrayList<PA> parents = new ArrayList<PA>(); - - // some data from the dependency tree - private short[] pos; - private DataF x; - private float lastNBest; - private float threshold; - private Extractor extractor; - - /** - * Initialize the parallel rearrange thread - * - * @param pos - * the part-of-speech - * @param x - * the data - * @param lastNBest - * @param isChild2 - * is a child - * @param edgesC - * the part-of-speech edge mapping - * @param s - * the heads - * @param ts - * the types - */ - public ParallelRearrangeNBest2(short[] pos, DataF x, float lastNBest, Extractor extractor, float threshold) { - - this.lastNBest = lastNBest; - this.pos = pos; - this.x = x; - - this.extractor = extractor; - this.threshold = threshold; - } - - public ArrayList<ParseNBest> parses = new ArrayList<ParseNBest>(); - - @Override - public Object call() { - - try { - - while (true) { - PA p = getPA(); - - if (p == null) - return parses; - - short oldP = p.heads[p.ch], oldT = p.types[p.ch]; - p.heads[p.ch] = p.pa; - - short[] labels = Edges.get(pos[p.pa], pos[p.ch], p.ch < p.pa); - - for (short label : labels) { - - p.types[p.ch] = label; - float p_new = extractor.encode3(pos, p.heads, p.types, x); - - if (p_new < lastNBest || ((p.p + this.threshold) > p_new)) - continue; - - ParseNBest x = new ParseNBest(); - x.signature(p.heads, p.types); - x.f1 = p_new; - parses.add(x); - } - - // change back - p.heads[p.ch] = oldP; - p.types[p.ch] = oldT; - - // consider changes to labels only - labels = Edges.get(pos[oldP], pos[p.ch], p.ch < oldP); - - for (short label : labels) { - - p.types[p.ch] = label; - float p_new = extractor.encode3(pos, p.heads, p.types, x); - - // optimization: add only if larger than smallest of n-best - if (p_new < lastNBest || ((p.p + this.threshold) > p_new)) - continue; - - ParseNBest x = new ParseNBest(); - x.signature(p.heads, p.types); - x.f1 = p_new; - parses.add(x); - } - - p.heads[p.ch] = oldP; - p.types[p.ch] = oldT; - } - } catch (Exception e) { - e.printStackTrace(); - } - return parses; - } - - /** - * Add a child-parent combination which are latter explored for - * rearrangement - * - * @param p2 - * @param ch2 - * @param pa - */ - public static void add(Parse p, short ch2, short pa) { - parents.add(new PA(p, ch2, pa)); - } - - public static PA getPA() { - synchronized (parents) { - if (parents.size() == 0) - return null; - return parents.remove(parents.size() - 1); - } - } - -} diff --git a/dependencyParser/mate-tools/src/examples/DependencyParser.java b/dependencyParser/mate-tools/src/examples/DependencyParser.java deleted file mode 100644 index 917dc04..0000000 --- a/dependencyParser/mate-tools/src/examples/DependencyParser.java +++ /dev/null @@ -1,90 +0,0 @@ -package examples; - -import java.io.File; -import java.util.Arrays; - -import is2.data.InstancesTagger; -import is2.data.SentenceData09; -import is2.io.CONLLReader09; -import is2.io.IOGenerals; -import is2.lemmatizer.Lemmatizer; -import is2.lemmatizer.MFO; -import is2.parser.Parser; -import is2.tag.Tagger; -//import org.apache.log4j.Logger; - -/** - * Dependency parsing - * - * @author B. Piwowarski <benjamin@bpiwowar.net> - * @date 10/10/12 - */ -// @TaskDescription(name = "dependency-parser", project = "mate-tools") -public class DependencyParser { - // final static private Logger LOGGER = - // Logger.getLogger(DependencyParser.class); - // @Argument(name = "lemmatizer", required = true, checkers = - // IOChecker.Readable.class) - File lemmatizerFile; - - // @Argument(name = "tagger", required = true) - File taggerFile; - - // @Argument(name = "parser", required = true) - File parserFile; - - // @Override - public int execute() throws Throwable { - - // Load lemmatizer - // LOGGER.info("Loading lemmatizer"); - // true = do uppercase lemmatization - Lemmatizer lemmatizer = new Lemmatizer(lemmatizerFile.getAbsolutePath()); - - // Load tagger - // LOGGER.info("Loading tagger"); - Tagger tagger = new Tagger(taggerFile.getAbsolutePath()); - - // Load parser - // LOGGER.info("Loading parser"); - Parser parser = new Parser(parserFile.getAbsolutePath()); - - // Sentences to parse - String sentences[] = new String[] { "Airfields have been constructed on a number of the islands .", - "Private investment has even made an increasingly modern ferry fleet possible .", - "Politically , the 1990s have been relatively quite times for the islands ." }; - - CONLLReader09 reader = new CONLLReader09(CONLLReader09.NO_NORMALIZE); - - for (String sentence : sentences) { - // Prepare the sentence - InstancesTagger instanceTagger = new InstancesTagger(); - instanceTagger.init(1, new MFO()); - - String[] split = sentence.split("\\s+"); - String[] splitRoot = new String[split.length + 1]; - System.arraycopy(split, 0, splitRoot, 1, split.length); - splitRoot[0] = IOGenerals.ROOT; - - SentenceData09 instance = new SentenceData09(); - instance.init(splitRoot); - - reader.insert(instanceTagger, instance); - - SentenceData09 result = lemmatizer.apply(instance); - tagger.apply(result); - result = parser.parse(result, parser.params, false, parser.options); - - // Output - System.out.println(Arrays.toString(result.forms)); - System.out.println(Arrays.toString(result.plemmas)); - System.out.println(Arrays.toString(result.ppos)); - System.out.println(Arrays.toString(result.pheads)); - System.out.println(Arrays.toString(result.plabels)); - System.out.println(); - - } - - return 0; - } -} diff --git a/dependencyParser/mate-tools/src/examples/FullPipelineSpanish.java b/dependencyParser/mate-tools/src/examples/FullPipelineSpanish.java deleted file mode 100644 index 9bfff59..0000000 --- a/dependencyParser/mate-tools/src/examples/FullPipelineSpanish.java +++ /dev/null @@ -1,108 +0,0 @@ -package examples; - -import java.io.IOException; -import java.util.ArrayList; -import java.util.StringTokenizer; - -import is2.data.SentenceData09; -import is2.io.CONLLWriter09; -import is2.lemmatizer.Lemmatizer; -import is2.parser.Parser; -import is2.tag.Tagger; -import is2.tools.Tool; - -/** - * @author Bernd Bohnet, 13.09.2010 - * - * Illustrates the application the full pipeline: lemmatizer, - * morphologic, tagger, and parser - */ -public class FullPipelineSpanish { - - // shows how to parse a sentences and call the tools - public static void main(String[] args) throws IOException { - - // Create a data container for a sentence - SentenceData09 i = new SentenceData09(); - - if (args.length == 1) { // input might be a sentence: "This is another - // test ." - StringTokenizer st = new StringTokenizer(args[0]); - ArrayList<String> forms = new ArrayList<String>(); - - forms.add("<root>"); - while (st.hasMoreTokens()) - forms.add(st.nextToken()); - - i.init(forms.toArray(new String[0])); - - } else { - // provide a default sentence: Haus has a mutated vowel - i.init(new String[] { "<root>", "También", "estuve", "emocionado", "pero", "no", "pude", "imaginar", "mi", - "vida", "sin", "la", "gente", "tan", "intima", "a", "mí", "." }); - - } - - // lemmatizing - - System.out.println("\nReading the model of the lemmatizer"); - Tool lemmatizer = new Lemmatizer("models/lemma-spa.model"); // create a - // lemmatizer - - System.out.println("Applying the lemmatizer"); - lemmatizer.apply(i); - - System.out.print(i.toString()); - System.out.print("Lemmata: "); - for (String l : i.plemmas) - System.out.print(l + " "); - System.out.println(); - - // morphologic tagging - - System.out.println("\nReading the model of the morphologic tagger"); - is2.mtag.Tagger morphTagger = new is2.mtag.Tagger("models/mtag-spa.model"); - - System.out.println("\nApplying the morpholoigc tagger"); - morphTagger.apply(i); - - System.out.print(i.toString()); - System.out.print("Morph: "); - for (String f : i.pfeats) - System.out.print(f + " "); - System.out.println(); - - // part-of-speech tagging - - System.out.println("\nReading the model of the part-of-speech tagger"); - Tool tagger = new Tagger("models/tag-spa.model"); - - System.out.println("\nApplying the part-of-speech tagger"); - tagger.apply(i); - - System.out.print(i.toString()); - System.out.print("Part-of-Speech tags: "); - for (String p : i.ppos) - System.out.print(p + " "); - System.out.println(); - - // parsing - - System.out.println("\nReading the model of the dependency parser"); - Tool parser = new Parser("models/prs-spa.model"); - - System.out.println("\nApplying the parser"); - parser.apply(i); - - System.out.println(i.toString()); - - // write the result to a file - - CONLLWriter09 writer = new is2.io.CONLLWriter09("example-out.txt"); - - writer.write(i, CONLLWriter09.NO_ROOT); - writer.finishWriting(); - - } - -} diff --git a/dependencyParser/mate-tools/src/examples/FullPipelineTest.java b/dependencyParser/mate-tools/src/examples/FullPipelineTest.java deleted file mode 100644 index 4aecdc2..0000000 --- a/dependencyParser/mate-tools/src/examples/FullPipelineTest.java +++ /dev/null @@ -1,110 +0,0 @@ -package examples; - -import java.io.File; - -import is2.data.InstancesTagger; -import is2.data.SentenceData09; -import is2.io.CONLLReader09; -import is2.io.CONLLWriter09; -import is2.lemmatizer.Lemmatizer; -import is2.lemmatizer.MFO; -import is2.parser.Parser; -import is2.tag.Tagger; -//import org.apache.log4j.Logger; - -/** - * Dependency parsing - * - * @author B. Piwowarski <benjamin@bpiwowar.net> - * @date 10/10/12 - */ -// @TaskDescription(name = "dependency-parser", project = "mate-tools") -public class FullPipelineTest { - // final static private Logger LOGGER = - // Logger.getLogger(DependencyParser.class); - // @Argument(name = "lemmatizer", required = true, checkers = - // IOChecker.Readable.class) - public File lemmatizerFile; - - // @Argument(name = "tagger", required = true) - public File taggerFile; - - public File mtaggerFile; - - // @Argument(name = "parser", required = true) - public File parserFile; - - // @Override - public int execute(String source, String target) throws Throwable { - - // Load lemmatizer - // LOGGER.info("Loading lemmatizer"); - // true = do uppercase lemmatization - Lemmatizer lemmatizer = new Lemmatizer(lemmatizerFile.getAbsolutePath()); - - // Load tagger - // LOGGER.info("Loading tagger"); - Tagger tagger = new Tagger(taggerFile.getAbsolutePath()); - - is2.mtag.Tagger mtagger = new is2.mtag.Tagger(mtaggerFile.getAbsolutePath()); - - // Load parser - // LOGGER.info("Loading parser"); - Parser parser = new Parser(parserFile.getAbsolutePath()); - - CONLLReader09 reader = new CONLLReader09(source); - CONLLWriter09 writer = new CONLLWriter09(target); - - int count = 0; - while (true) { - // Prepare the sentence - InstancesTagger is = new InstancesTagger(); - is.init(1, new MFO()); - - SentenceData09 instance = reader.getNext(is); - if (instance == null) - break; - SentenceData09 result = null; - try { - - System.out.print("\b\b\b\b" + count); - result = lemmatizer.apply(instance); - - result = tagger.apply(result); - result = mtagger.apply(result); - result = parser.apply(result); - - count++; - } catch (Exception e) { - - System.out.println("error" + result); - System.out.println("error" + instance); - e.printStackTrace(); - break; - } - - // Output - writer.write(result); - - } - writer.finishWriting(); - return 0; - } - - public static void main(String args[]) throws Throwable { - - if (args.length < 3) { - System.out.println("lemmatizer-model tagger-model parser-model source target"); - System.exit(0); - } - FullPipelineTest p = new FullPipelineTest(); - p.lemmatizerFile = new File(args[0]); - p.taggerFile = new File(args[1]); - p.mtaggerFile = new File(args[2]); - p.parserFile = new File(args[3]); - - p.execute(args[4], args[5]); - - } - -} diff --git a/dependencyParser/mate-tools/src/examples/MorphTagger.java b/dependencyParser/mate-tools/src/examples/MorphTagger.java deleted file mode 100644 index 75bfc28..0000000 --- a/dependencyParser/mate-tools/src/examples/MorphTagger.java +++ /dev/null @@ -1,79 +0,0 @@ -package examples; - -import java.io.IOException; -import java.util.ArrayList; -import java.util.StringTokenizer; - -import is2.data.SentenceData09; -import is2.lemmatizer.Lemmatizer; -import is2.lemmatizer.Options; - -/** - * @author Bernd Bohnet, 13.09.2010 - * - * Illustrates the application of some components: lemmatizer, tagger, - * and parser - */ -public class MorphTagger { - - /** - * How to lemmatize a sentences? - */ - public static void main(String[] args) throws IOException { - - // Create a data container for a sentence - SentenceData09 i = new SentenceData09(); - - if (args.length == 1) { // input might be a sentence: "This is another - // test ." - StringTokenizer st = new StringTokenizer(args[0]); - ArrayList<String> forms = new ArrayList<String>(); - - forms.add("<root>"); - while (st.hasMoreTokens()) - forms.add(st.nextToken()); - - i.init(forms.toArray(new String[0])); - - } else { - // provide a default sentence - i.init(new String[] { "<root>", "Häuser", "hat", "ein", "Umlaut", "." }); - } - - // print the forms - for (String l : i.forms) - System.out.println("forms : " + l); - - // tell the lemmatizer the location of the model - is2.lemmatizer.Options optsLemmatizer = new Options(new String[] { "-model", "models/lemma-ger.model" }); - - // create a lemmatizer - Lemmatizer lemmatizer = new Lemmatizer(optsLemmatizer.modelName); - - // lemmatize a sentence; the result is stored in the stenenceData09 i - lemmatizer.apply(i); - - // output the lemmata - for (String l : i.plemmas) - System.out.println("lemma : " + l); - - is2.mtag.Options morphologicTaggerOptions = new is2.mtag.Options( - new String[] { "-model", "models/mtag-ger.model" }); - - is2.mtag.Tagger mt = new is2.mtag.Tagger(morphologicTaggerOptions); - - try { - - // SentenceData09 snt = is2.mtag.Main.out(i.forms, lemmata); - - SentenceData09 snt = mt.apply(i); - for (String f : snt.pfeats) - System.out.println("feats " + f); - - } catch (Exception e) { - e.printStackTrace(); - } - - } - -} diff --git a/dependencyParser/mate-tools/src/examples/ParseOnly.java b/dependencyParser/mate-tools/src/examples/ParseOnly.java deleted file mode 100755 index 23eaf59..0000000 --- a/dependencyParser/mate-tools/src/examples/ParseOnly.java +++ /dev/null @@ -1,48 +0,0 @@ -package examples; - -import is2.data.SentenceData09; -import is2.parser.Options; -import is2.parser.Parser; - -public class ParseOnly { - - public static void main(String[] args) { - - if (args.length == 0) { - plain(); - } - - } - - /** - * This example shows how to parse a sentence. - */ - public static void plain() { - - // initialize the options - String[] opts = { "-model", "models/prs-eng-x.model" }; - Options options = new Options(opts); - - // create a parser - Parser parser = new Parser(options); - - // Create a data container for a sentence - SentenceData09 i = new SentenceData09(); - - // Provide the sentence - i.init(new String[] { "<root>", "This", "is", "a", "test", "." }); - i.setPPos(new String[] { "<root-POS>", "DT", "VBZ", "DT", "NN", "." }); - - // parse the sentence - SentenceData09 out = parser.apply(i); - - // output the sentence and dependency tree - System.out.println(out.toString()); - - // Get the parsing results - out.getLabels(); - out.getParents(); - - } - -} diff --git a/dependencyParser/mate-tools/src/examples/Pipeline.java b/dependencyParser/mate-tools/src/examples/Pipeline.java deleted file mode 100644 index dcb5a24..0000000 --- a/dependencyParser/mate-tools/src/examples/Pipeline.java +++ /dev/null @@ -1,90 +0,0 @@ -package examples; - -import java.io.IOException; -import java.util.ArrayList; -import java.util.StringTokenizer; - -import is2.data.SentenceData09; -import is2.lemmatizer.Lemmatizer; -import is2.parser.Options; -import is2.parser.Parser; -import is2.tag.Tagger; - -/** - * @author Bernd Bohnet, 13.09.2010 - * - * Illustrates the application of some components: lemmatizer, tagger, - * and parser - */ -public class Pipeline { - - // how to parse a sentences and call the tools - public static void main(String[] args) throws IOException { - - // Create a data container for a sentence - SentenceData09 i = new SentenceData09(); - - if (args.length == 1) { // input might be a sentence: "This is another - // test ." - StringTokenizer st = new StringTokenizer(args[0]); - ArrayList<String> forms = new ArrayList<String>(); - - forms.add("<root>"); - while (st.hasMoreTokens()) - forms.add(st.nextToken()); - - i.init(forms.toArray(new String[0])); - - } else { - // provide a default sentence - i.init(new String[] { "<root>", "This", "is", "a", "test", "." }); - } - - // print the forms - for (String l : i.forms) - System.out.println("form : " + l); - - // tell the lemmatizer the location of the model - is2.lemmatizer.Options optsLemmatizer = new is2.lemmatizer.Options( - new String[] { "-model", "models/lemma-eng.model" }); - - // create a lemmatizer - Lemmatizer lemmatizer = new Lemmatizer(optsLemmatizer.modelName); - - // lemmatize a sentence; the result is stored in the stenenceData09 i - i = lemmatizer.apply(i); - - // output the lemmata - for (String l : i.plemmas) - System.out.println("lemma : " + l); - - // tell the tagger the location of the model - is2.tag.Options optsTagger = new is2.tag.Options(new String[] { "-model", "models/tag-eng.model" }); - Tagger tagger = new Tagger(optsTagger); - - // String pos[] =tagger.tag(i.forms, i.lemmas); - // i.setPPos(pos); - - SentenceData09 tagged = tagger.tag(i); - for (String p : tagged.ppos) - System.out.println("pos " + p); - - // initialize the options - Options optsParser = new Options(new String[] { "-model", "models/prs-eng-x.model" }); - - // create a parser - Parser parser = new Parser(optsParser); - - // parse the sentence (you get a copy of the input i) - SentenceData09 parse = parser.apply(tagged); - - System.out.println(parse.toString()); - - // create some trash on the hard drive :-) - is2.io.CONLLWriter09 writer = new is2.io.CONLLWriter09("example-out.txt"); - - writer.write(i); - writer.finishWriting(); - } - -} diff --git a/dependencyParser/mate-tools/src/extractors/Extractor.java b/dependencyParser/mate-tools/src/extractors/Extractor.java deleted file mode 100644 index 190ccc6..0000000 --- a/dependencyParser/mate-tools/src/extractors/Extractor.java +++ /dev/null @@ -1,52 +0,0 @@ -/** - * - */ -package extractors; - -import is2.data.Cluster; -import is2.data.DataF; -import is2.data.FV; -import is2.data.IFV; -import is2.data.Instances; - -/** - * @author Dr. Bernd Bohnet, 29.04.2011 - * - * - */ -public interface Extractor { - - /** - * Initializes the Extractor general parts - */ - public void initStat(); - - /** - * Initializes the Extractor specific parts - */ - public void init(); - - public int basic(short[] pos, int[] forms, int w1, int w2, Cluster cluster, IFV f); - - public void firstm(Instances is, int i, int w1, int w2, int j, Cluster cluster, long[] svs); - - public void siblingm(Instances is, int i, short[] pos, int[] forms, int[] lemmas, short[][] feats, int w1, int w2, - int g, int j, Cluster cluster, long[] svs, int n); - - public void gcm(Instances is, int i, int w1, int w2, int g, int j, Cluster cluster, long[] svs); - - public int getType(); - - public FV encodeCat(Instances is, int n, short[] pos, int[] is2, int[] is3, short[] heads, short[] labels, - short[][] s, Cluster cl, FV pred); - - public void setMaxForm(int integer); - - /** - * @return - */ - public int getMaxForm(); - - public float encode3(short[] pos, short[] heads, short[] labs, DataF x); - -} diff --git a/dependencyParser/mate-tools/src/extractors/ExtractorClusterStacked.java b/dependencyParser/mate-tools/src/extractors/ExtractorClusterStacked.java deleted file mode 100755 index 436bd5c..0000000 --- a/dependencyParser/mate-tools/src/extractors/ExtractorClusterStacked.java +++ /dev/null @@ -1,1946 +0,0 @@ -package extractors; - -import is2.data.Cluster; -import is2.data.D4; -import is2.data.DataF; -import is2.data.Edges; -import is2.data.FV; -import is2.data.IFV; -import is2.data.Instances; -import is2.data.Long2IntInterface; -import is2.data.MFB; - -final public class ExtractorClusterStacked implements Extractor { - - public static int s_rel, s_word, s_type, s_dir, s_dist, s_feat, s_child, s_spath, s_lpath, s_pos; - - final D4 d0, dl1, dl2, dwr, dr, dwwp, dw, dwp, dlf, d3lp, d2lp, d2pw, d2pp; - - public final Long2IntInterface li; - - public ExtractorClusterStacked(Long2IntInterface li) { - - ExtractorClusterStacked.initFeatures(); - this.li = li; - d0 = new D4(li); - dl1 = new D4(li); - dl2 = new D4(li); - dwr = new D4(li); - dr = new D4(li); - dwwp = new D4(li); - - dw = new D4(li); - dwp = new D4(li); - - dlf = new D4(li); - d3lp = new D4(li); - d2lp = new D4(li); - d2pw = new D4(li); - d2pp = new D4(li); - - } - - @Override - public void initStat() { - - MFB mf = new MFB(); - s_rel = mf.getFeatureCounter().get(REL).intValue(); - s_pos = mf.getFeatureCounter().get(POS).intValue(); - s_word = mf.getFeatureCounter().get(WORD).intValue(); - s_type = mf.getFeatureCounter().get(TYPE).intValue();// mf.getFeatureBits(); - s_dir = mf.getFeatureCounter().get(DIR); - la = mf.getValue(DIR, LA); - ra = mf.getValue(DIR, RA); - s_dist = mf.getFeatureCounter().get(DIST);// mf.getFeatureBits(DIST); - s_feat = mf.getFeatureCounter().get(FEAT);// mf.getFeatureBits(Pipe.FEAT); - s_spath = mf.getFeatureCounter().get(Cluster.SPATH) == null ? 0 : mf.getFeatureCounter().get(Cluster.SPATH);// mf.getFeatureBits(Cluster.SPATH); - s_lpath = mf.getFeatureCounter().get(Cluster.LPATH) == null ? 0 : mf.getFeatureCounter().get(Cluster.LPATH);// mf.getFeatureBits(Cluster.LPATH); - } - - @Override - public void init() { - // DB.println("init"); - d0.a0 = s_type; - d0.a1 = s_pos; - d0.a2 = s_pos; - d0.a3 = s_pos; - d0.a4 = s_pos; - d0.a5 = s_pos; - d0.a6 = s_pos; - d0.a7 = s_pos; - dl1.a0 = s_type; - dl1.a1 = s_rel; - dl1.a2 = s_pos; - dl1.a3 = s_pos; - dl1.a4 = s_pos; - dl1.a5 = s_pos; - dl1.a6 = s_pos; - dl1.a7 = s_pos; - dl2.a0 = s_type; - dl2.a1 = s_rel; - dl2.a2 = s_word; - dl2.a3 = s_pos; - dl2.a4 = s_pos; - dl2.a5 = s_pos; - dl2.a6 = s_pos; - dl2.a7 = s_pos; - dwp.a0 = s_type; - dwp.a1 = s_rel; - dwp.a2 = s_word; - dwp.a3 = s_pos; - dwp.a4 = s_pos; - dwp.a5 = s_word; - dwwp.a0 = s_type; - dwwp.a1 = s_rel; - dwwp.a2 = s_word; - dwwp.a3 = s_word; - dwwp.a4 = s_pos; - dwwp.a5 = s_word; - dlf.a0 = s_type; - dlf.a1 = s_rel; - dlf.a2 = s_pos; - dlf.a3 = s_pos; - dlf.a4 = s_feat; - dlf.a5 = s_feat; - dlf.a6 = s_pos; - dlf.a7 = s_pos; - d3lp.a0 = s_type; - d3lp.a1 = s_rel; - d3lp.a2 = s_lpath; - d3lp.a3 = s_lpath; - d3lp.a4 = s_lpath; - d3lp.a5 = s_word; - d3lp.a6 = s_spath; - d3lp.a7 = s_spath; - d2lp.a0 = s_type; - d2lp.a1 = s_rel; - d2lp.a2 = s_lpath; - d2lp.a3 = s_lpath; - d2lp.a4 = s_word; - d2lp.a5 = s_word; // d3lp.a6 = s_spath; d3lp.a7 = s_spath; - d2pw.a0 = s_type; - d2pw.a1 = s_rel; - d2pw.a2 = s_lpath; - d2pw.a3 = s_lpath; - d2pw.a4 = s_word; - d2pw.a5 = s_word; // d3lp.a6 = s_spath; d3lp.a7 = s_spath; - d2pp.a0 = s_type; - d2pp.a1 = s_rel; - d2pp.a2 = s_lpath; - d2pp.a3 = s_lpath; - d2pp.a4 = s_pos; - d2pp.a5 = s_pos; // d3lp.a6 = s_spath; d3lp.a7 = s_spath; - } - - @Override - public int basic(short[] pposs, int[] form, int p, int d, Cluster cluster, IFV f) { - - d0.clean(); - dl1.clean(); - dl2.clean(); - dwp.clean(); - dwwp.clean(); - dlf.clean(); - d3lp.clean(); - - d3lp.clean(); - d2lp.clean(); - d2pw.clean(); - d2pp.clean(); - - int n = 1; - int dir = (p < d) ? ra : la; - d0.v0 = n++; - d0.v1 = pposs[p]; - d0.v2 = pposs[d]; // d0.stop=4; - int end = (p >= d ? p : d); - int start = (p >= d ? d : p) + 1; - - for (int i = start; i < end; i++) { - d0.v3 = pposs[i]; - d0.cz4(); - d0.csa(s_dir, dir, f); - } - return n; - } - - @Override - public void firstm(Instances is, int i, int prnt, int dpnt, int label, Cluster cluster, long[] f) { - - // short[] pposs, int[] form, int[] lemmas, short[][] feats - for (int k = 0; k < f.length; k++) - f[k] = 0; - - short[] pposs = is.pposs[i]; - int[] form = is.forms[i]; - short[][] feats = is.feats[i]; - - int pF = form[prnt], dF = form[dpnt]; - int pL = is.plemmas[i][prnt], dL = is.plemmas[i][dpnt]; - int pP = pposs[prnt], dP = pposs[dpnt]; - - int prntLS = pF == -1 ? -1 : cluster.getLP(pF), chldLS = dF == -1 ? -1 : cluster.getLP(dF); - - final int dir = (prnt < dpnt) ? ra : la; - - if (pF > maxForm) - pF = -1; - if (pL > maxForm) - pL = -1; - - if (dF > maxForm) - dF = -1; - if (dL > maxForm) - dL = -1; - - int n = 3, c = 0; - - dl2.v1 = label; - dl2.v0 = n++; - dl2.v2 = pF; - dl2.v3 = dP; - dl2.cz4(); - f[c++] = dl2.csa(s_dir, dir); - dl2.v0 = n++; - dl2.cz3(); - f[c++] = dl2.csa(s_dir, dir); - dl2.v0 = n++; - dl2.v2 = dF; - dl2.v3 = pP; - dl2.cz4(); - f[c++] = dl2.csa(s_dir, dir); - dl2.v0 = n++; - dl2.cz3(); - f[c++] = dl2.csa(s_dir, dir); - - dwwp.v1 = label; - dwwp.v0 = n++; - dwwp.v2 = pF; - dwwp.v3 = dF; - dwwp.cz4(); - f[c++] = dwwp.csa(s_dir, dir); - - dl1.v1 = label; - dl1.v0 = n++; - dl1.v2 = dP; - dl1.cz3(); - f[c++] = dl1.csa(s_dir, dir); - dl1.v0 = n++; - dl1.v2 = pP; - dl1.cz3(); - f[c++] = dl1.csa(s_dir, dir); - dl1.v0 = n++; - dl1.v3 = dP; - dl1.cz4(); - f[c++] = dl1.csa(s_dir, dir); - - int pPm1 = prnt > 0 ? pposs[prnt - 1] : s_str, dPm1 = dpnt > 0 ? pposs[dpnt - 1] : s_str; - int pPp1 = prnt < pposs.length - 1 ? pposs[prnt + 1] : s_end, - dPp1 = dpnt < pposs.length - 1 ? pposs[dpnt + 1] : s_end; - - int pPm2 = prnt > 1 ? pposs[prnt - 2] : s_str, dPm2 = dpnt > 1 ? pposs[dpnt - 2] : s_str; - int pPp2 = prnt < pposs.length - 2 ? pposs[prnt + 2] : s_end, - dPp2 = dpnt < pposs.length - 2 ? pposs[dpnt + 2] : s_end; - - int pFm1 = prnt > 0 ? form[prnt - 1] : s_stwrd, dFm1 = dpnt > 0 ? form[dpnt - 1] : s_stwrd; - int pFp1 = prnt < form.length - 1 ? form[prnt + 1] : s_stwrd, - dFp1 = dpnt < form.length - 1 ? form[dpnt + 1] : s_stwrd; - - dl1.v0 = n++; - dl1.v2 = pP; - dl1.v3 = pPp1; - dl1.v4 = dP; - dl1.v5 = dPp1; - dl1.cz6(); - f[n++] = dl1.csa(s_dir, dir); - dl1.v0 = n++; - dl1.v5 = dPm1; - dl1.cz6(); - f[n++] = dl1.csa(s_dir, dir); - dl1.v0 = n++; - dl1.v3 = pPm1; - dl1.cz6(); - f[n++] = dl1.csa(s_dir, dir); - dl1.v0 = n++; - dl1.v5 = dPp1; - dl1.cz6(); - f[n++] = dl1.csa(s_dir, dir); - - dl1.v0 = n++; - dl1.v3 = pPm1; - dl1.cz5(); - f[n++] = dl1.csa(s_dir, dir); - dl1.v0 = n++; - dl1.v3 = dPm1; - dl1.cz5(); - f[n++] = dl1.csa(s_dir, dir); - dl1.v0 = n++; - dl1.v3 = dPp1; - dl1.cz5(); - f[n++] = dl1.csa(s_dir, dir); - dl1.v0 = n++; - dl1.v3 = pPp1; - dl1.cz5(); - f[n++] = dl1.csa(s_dir, dir); - - dl1.v0 = n++; - dl1.v2 = pP; - dl1.v3 = pPp2; - dl1.v4 = dP; - dl1.v5 = dPp2; - dl1.cz6(); - f[n++] = dl1.csa(s_dir, dir); - dl1.v0 = n++; - dl1.v5 = dPm2; - dl1.cz6(); - f[n++] = dl1.csa(s_dir, dir); - dl1.v0 = n++; - dl1.v3 = pPm2; - dl1.cz6(); - f[n++] = dl1.csa(s_dir, dir); - dl1.v0 = n++; - dl1.v5 = dPp2; - dl1.cz6(); - f[n++] = dl1.csa(s_dir, dir); - - dl1.v0 = n++; - dl1.v3 = pPm2; - dl1.cz5(); - f[n++] = dl1.csa(s_dir, dir); - dl1.v0 = n++; - dl1.v3 = dPm2; - dl1.cz5(); - f[n++] = dl1.csa(s_dir, dir); - dl1.v0 = n++; - dl1.v3 = dPp2; - dl1.cz5(); - f[n++] = dl1.csa(s_dir, dir); - dl1.v0 = n++; - dl1.v3 = pPp2; - dl1.cz5(); - f[n++] = dl1.csa(s_dir, dir); - - dl2.v0 = n++; - dl2.v3 = dFm1; - dl2.v3 = pPp1; - dl2.v4 = pP; - dl2.cz5(); - f[n++] = dl2.getVal(); - dl2.v0 = n++; - dl2.v3 = dFp1; - dl2.v3 = pPm1; - dl2.cz5(); - f[n++] = dl2.getVal(); - dl2.v0 = n++; - dl2.v3 = pFm1; - dl2.v3 = dPp1; - dl2.v4 = dP; - dl2.cz5(); - f[n++] = dl2.getVal(); - dl2.v0 = n++; - dl2.v3 = pFp1; - dl2.v3 = dPm1; - dl2.cz5(); - f[n++] = dl2.getVal(); - - dl2.v0 = n++; - dl2.v3 = dFm1; - dl2.v3 = dPm2; - dl2.v4 = pP; - dl2.cz5(); - f[n++] = dl2.getVal(); - dl2.v0 = n++; - dl2.v3 = dFp1; - dl2.v3 = dPp2; - dl2.cz5(); - f[n++] = dl2.getVal(); - dl2.v0 = n++; - dl2.v3 = pFm1; - dl2.v3 = pPm2; - dl2.v4 = dP; - dl2.cz5(); - f[n++] = dl2.getVal(); - dl2.v0 = n++; - dl2.v3 = pFp1; - dl2.v3 = pPp2; - dl2.cz5(); - f[n++] = dl2.getVal(); - - dwwp.v0 = n++; - dwwp.v2 = pF; - dwwp.v3 = dF; - dwwp.v4 = dP; - dwwp.cz5(); - f[n++] = dwwp.csa(s_dir, dir); - dwwp.v0 = n++; - dwwp.v2 = pF; - dwwp.v3 = dF; - dwwp.v4 = pP; - dwwp.cz5(); - f[n++] = dwwp.csa(s_dir, dir); - dwwp.v0 = n++; - dwwp.v2 = dF; - dwwp.v3 = pF; - dwwp.v4 = pP; - dwwp.v4 = dP; - dwwp.cz6(); - f[n++] = dwwp.csa(s_dir, dir); - - // lemmas - - dl2.v1 = label; - dl2.v0 = n++; - dl2.v2 = pL; - dl2.v3 = dP; - dl2.cz4(); - f[c++] = dl2.csa(s_dir, dir); - dl2.v0 = n++; - dl2.cz3(); - f[c++] = dl2.csa(s_dir, dir); - dl2.v0 = n++; - dl2.v2 = dL; - dl2.v3 = pP; - dl2.cz4(); - f[c++] = dl2.csa(s_dir, dir); - dl2.v0 = n++; - dl2.cz3(); - f[c++] = dl2.csa(s_dir, dir); - - dwwp.v1 = label; - dwwp.v0 = n++; - dwwp.v2 = pL; - dwwp.v3 = dL; - dwwp.cz4(); - f[c++] = dwwp.csa(s_dir, dir); - - dwp.v1 = label; - dwp.v0 = n++; - dwp.v2 = dL; - dwp.v3 = pP; - dwp.v4 = dP; - dwp.v5 = pL; - dwp.cz6(); - f[c++] = dwp.csa(s_dir, dir); - dwp.v0 = n++; - dwp.cz5(); - f[c++] = dwp.csa(s_dir, dir); - - dwp.v0 = n++; - dwp.v2 = pL; - dwp.cz5(); - f[c++] = dwp.csa(s_dir, dir); - dwwp.v0 = n++; - dwwp.v2 = pL; - dwwp.v3 = dL; - dwwp.v4 = dP; - dwwp.cz5(); - f[c++] = dwwp.csa(s_dir, dir); - dwwp.v0 = n++; - dwwp.v4 = pP; - dwwp.cz5(); - f[c++] = dwwp.csa(s_dir, dir); - - // cluster - - d2pw.v1 = label; - d2pw.v0 = n++; - d2pw.v2 = prntLS; - d2pw.v3 = chldLS; - d2pw.cz4(); - f[c++] = d2pw.csa(s_dir, dir); - d2pw.v0 = n++; - d2pw.v4 = pF; - d2pw.cz5(); - f[c++] = d2pw.csa(s_dir, dir); - d2pw.v0 = n++; - d2pw.v4 = dF; - d2pw.cz5(); - f[c++] = d2pw.csa(s_dir, dir); - d2pw.v0 = n++; - d2pw.v5 = pF; - d2pw.cz6(); - f[c++] = d2pw.csa(s_dir, dir); - - d2pp.v1 = label; - d2pp.v0 = n++; - d2pp.v2 = prntLS; - d2pp.v3 = chldLS; - d2pp.cz4(); - f[c++] = d2pp.csa(s_dir, dir); - d2pp.v0 = n++; - d2pp.v4 = pP; - d2pp.cz5(); - f[c++] = d2pp.csa(s_dir, dir); - d2pp.v0 = n++; - d2pp.v4 = dP; - d2pp.cz5(); - f[c++] = d2pp.csa(s_dir, dir); - d2pp.v0 = n++; - d2pp.v5 = pP; - d2pp.cz6(); - f[c++] = d2pp.csa(s_dir, dir); - - // take those in for stacking - // dl2.v1=label; - // dl2.v0= n++;dl2.v2=prel[dpnt];dl2.v3=pP;dl2.v4=dP; - // dl2.v5=prnt==phead[dpnt]?1:2; dl2.cz6(); f[c++]=dl2.csa(s_dir,dir); - // dl2.v0= n++;dl2.v2=pP;dl2.v3=dP; dl2.v4=prnt==phead[dpnt]?1:2; - // dl2.cz5(); f[c++]=dl2.csa(s_dir,dir); - - if (feats == null) - return; - - short[] featsP = feats[prnt], featsD = feats[dpnt]; - dlf.v0 = n++; - dlf.v1 = label; - dlf.v2 = pP; - dlf.v3 = dP; - extractFeat(f, c, dir, featsP, featsD); - - return; - } - - @Override - public void gcm(Instances is, int i, int p, int d, int gc, int label, Cluster cluster, long[] f) { - - for (int k = 0; k < f.length; k++) - f[k] = 0; - - short[] pos = is.pposs[i]; - int[] forms = is.forms[i]; - int[] lemmas = is.plemmas[i]; - short[][] feats = is.feats[i]; - - int pP = pos[p], dP = pos[d]; - int prntF = forms[p], chldF = forms[d]; - int prntL = lemmas[p], chldL = lemmas[d]; - int prntLS = prntF == -1 ? -1 : cluster.getLP(prntF), chldLS = chldF == -1 ? -1 : cluster.getLP(chldF); - - int gP = gc != -1 ? pos[gc] : s_str; - int gcF = gc != -1 ? forms[gc] : s_stwrd; - int gcL = gc != -1 ? lemmas[gc] : s_stwrd; - int gcLS = (gc != -1) && (gcF != -1) ? cluster.getLP(gcF) : s_stwrd; - - if (prntF > maxForm) - prntF = -1; - if (prntL > maxForm) - prntL = -1; - - if (chldF > maxForm) - chldF = -1; - if (chldL > maxForm) - chldL = -1; - - if (gcF > maxForm) - gcF = -1; - if (gcL > maxForm) - gcL = -1; - - int dir = (p < d) ? ra : la, dir_gra = (d < gc) ? ra : la; - - int n = 84, c = 0; - - // dl1.v023(); - dl1.v1 = label; - dl1.v0 = n++; - dl1.v2 = pP; - dl1.v3 = dP; - dl1.v4 = gP; - dl1.cz5(); - dl1.cs(s_dir, dir); - f[c++] = dl1.csa(s_dir, dir_gra); - dl1.v0 = n++; - dl1.v2 = pP; - dl1.v3 = gP; - dl1.cz4(); - dl1.cs(s_dir, dir); - f[c++] = dl1.csa(s_dir, dir_gra); - dl1.v0 = n++; - dl1.v2 = dP; - dl1.cz4(); - dl1.cs(s_dir, dir); - f[c++] = dl1.csa(s_dir, dir_gra); - - dwwp.v1 = label; - dwwp.v0 = n++; - dwwp.v2 = prntF; - dwwp.v3 = gcF; - dwwp.cz4(); - dwwp.cs(s_dir, dir); - f[c++] = dwwp.csa(s_dir, dir_gra); - - dwwp.v0 = n++; - dwwp.v2 = chldF; - dwwp.v3 = gcF; - dwwp.cz4(); - dwwp.cs(s_dir, dir); - f[c++] = dwwp.csa(s_dir, dir_gra); - - dwp.v1 = label; - dwp.v0 = n++; - dwp.v2 = gcF; - dwp.v3 = pP; - dwp.cz4(); - dwp.cs(s_dir, dir); - f[c++] = dwp.csa(s_dir, dir_gra); - - dwp.v0 = n++; - dwp.v2 = gcF; - dwp.v3 = dP; - dwp.cz4(); - dwp.cs(s_dir, dir); - f[c++] = dwp.csa(s_dir, dir_gra); - - dwp.v0 = n++; - dwp.v2 = prntF; - dwp.v3 = gP; - dwp.cz4(); - dwp.cs(s_dir, dir); - f[c++] = dwp.csa(s_dir, dir_gra); - - dwp.v0 = n++; - dwp.v2 = chldF; - dwp.v3 = gP; - dwp.cz4(); - dwp.cs(s_dir, dir); - f[c++] = dwp.csa(s_dir, dir_gra); - - // lemma - - dwwp.v0 = n++; - dwwp.v2 = prntL; - dwwp.v3 = gcL; - dwwp.cz4(); - dwwp.cs(s_dir, dir); - f[c++] = dwwp.csa(s_dir, dir_gra); - - dwwp.v0 = n++; - dwwp.v2 = chldL; - dwwp.v3 = gcL; - dwwp.cz4(); - dwwp.cs(s_dir, dir); - f[c++] = dwwp.csa(s_dir, dir_gra); - - dwp.v0 = n++; - dwp.v2 = gcL; - dwp.v3 = pP; - dwp.cz4(); - dwp.cs(s_dir, dir); - f[c++] = dwp.csa(s_dir, dir_gra); - - dwp.v0 = n++; - dwp.v2 = gcL; - dwp.v3 = dP; - dwp.cz4(); - dwp.cs(s_dir, dir); - f[c++] = dwp.csa(s_dir, dir_gra); - - dwp.v0 = n++; - dwp.v2 = prntL; - dwp.v3 = gP; - dwp.cz4(); - dwp.cs(s_dir, dir); - f[c++] = dwp.csa(s_dir, dir_gra); - - dwp.v0 = n++; - dwp.v2 = chldL; - dwp.v3 = gP; - dwp.cz4(); - dwp.cs(s_dir, dir); - f[c++] = dwp.csa(s_dir, dir_gra); - - // clusters - - d2lp.v1 = label; - d2lp.v0 = n++; - d2lp.v2 = prntLS; - d2lp.v3 = gcLS; - d2lp.cz4(); - d2lp.cs(s_dir, dir); - f[c++] = d2lp.csa(s_dir, dir_gra);// f.add(li.l2i(l)); - d2lp.v0 = n++; - d2lp.v2 = chldLS; - d2lp.v3 = gcLS; - d2lp.cz4(); - d2lp.cs(s_dir, dir); - f[c++] = d2lp.csa(s_dir, dir_gra); - d3lp.v0 = n++; - d3lp.v1 = label; - d3lp.v2 = prntLS; - d3lp.v3 = chldLS; - d3lp.v4 = gcLS; - d3lp.cz5(); - d3lp.cs(s_dir, dir); - f[c++] = d3lp.csa(s_dir, dir_gra); - - // _f83; - d2lp.v0 = n++; - d2lp.v2 = prntLS; - d2lp.v3 = chldLS; - d2lp.v4 = gcF; - d2lp.cz5(); - f[c++] = d2lp.csa(s_dir, dir); - d2lp.v0 = n++; - d2lp.v2 = prntLS; - d2lp.v3 = gcLS; - d2lp.v4 = chldF; - d2lp.cz5(); - f[c++] = d2lp.csa(s_dir, dir); - d2lp.v0 = n++; - d2lp.v2 = chldLS; - d2lp.v3 = gcLS; - d2lp.v4 = prntF; - d2lp.cz5(); - f[c++] = d2lp.csa(s_dir, dir); - - d2pp.v1 = label; - d2pp.v0 = n++; - d2pp.v2 = prntLS; - d2pp.v3 = chldLS; - d2pp.v4 = gP; - d2pp.cz5(); - f[c++] = d2pp.csa(s_dir, dir); - d2pp.v0 = n++; - d2pp.v2 = prntLS; - d2pp.v3 = gcLS; - d2pp.v4 = dP; - d2pp.cz5(); - f[c++] = d2pp.csa(s_dir, dir); - d2pp.v0 = n++; - d2pp.v2 = chldLS; - d2pp.v3 = gcLS; - d2pp.v4 = pP; - d2pp.cz5(); - f[c++] = d2pp.csa(s_dir, dir); - - // linear features - - int prntPm1 = p != 0 ? pos[p - 1] : s_str; // parent-pos-minus1 - int chldPm1 = d - 1 >= 0 ? pos[d - 1] : s_str; // child-pos-minus1 - int prntPp1 = p != pos.length - 1 ? pos[p + 1] : s_end; - int chldPp1 = d != pos.length - 1 ? pos[d + 1] : s_end; - - int gcPm1 = gc > 0 ? pos[gc - 1] : s_str; - int gcPp1 = gc < pos.length - 1 ? pos[gc + 1] : s_end; - - dl1.v0 = n++; - dl1.v2 = gP; - dl1.v3 = gcPp1; - dl1.v4 = dP; - dl1.cz5(); - f[c++] = dl1.csa(s_dir, dir); - dl1.v0 = n++; - dl1.v2 = gP; - dl1.v3 = gcPm1; - dl1.v4 = dP; - dl1.cz5(); - f[c++] = dl1.csa(s_dir, dir); - dl1.v0 = n++; - dl1.v2 = gP; - dl1.v3 = dP; - dl1.v4 = chldPp1; - dl1.cz5(); - f[c++] = dl1.csa(s_dir, dir); - dl1.v0 = n++; - dl1.v2 = gP; - dl1.v3 = dP; - dl1.v4 = chldPm1; - dl1.cz5(); - f[c++] = dl1.csa(s_dir, dir); - dl1.v0 = n++; - dl1.v2 = gP; - dl1.v3 = gcPp1; - dl1.v4 = chldPm1; - dl1.v5 = dP; - dl1.cz6(); - f[c++] = dl1.csa(s_dir, dir); - dl1.v0 = n++; - dl1.v2 = gcPm1; - dl1.v3 = gP; - dl1.v4 = chldPm1; - dl1.v5 = dP; - dl1.cz6(); - f[c++] = dl1.csa(s_dir, dir); - dl1.v0 = n++; - dl1.v2 = gP; - dl1.v3 = gcPp1; - dl1.v4 = dP; - dl1.v5 = chldPp1; - dl1.cz6(); - f[c++] = dl1.csa(s_dir, dir); - dl1.v0 = n++; - dl1.v2 = gcPm1; - dl1.v3 = gP; - dl1.v4 = dP; - dl1.cz6(); - f[c++] = dl1.csa(s_dir, dir); - dl1.v0 = n++; - dl1.v2 = gP; - dl1.v3 = gcPp1; - dl1.v4 = pP; - dl1.cz5(); - f[c++] = dl1.csa(s_dir, dir); - dl1.v0 = n++; - dl1.v2 = gP; - dl1.v3 = gcPm1; - dl1.v4 = pP; - dl1.cz5(); - f[c++] = dl1.csa(s_dir, dir); - dl1.v0 = n++; - dl1.v2 = gP; - dl1.v3 = pP; - dl1.v4 = prntPp1; - dl1.cz5(); - f[c++] = dl1.csa(s_dir, dir); - dl1.v0 = n++; - dl1.v2 = gP; - dl1.v3 = pP; - dl1.v4 = prntPm1; - dl1.cz5(); - f[c++] = dl1.csa(s_dir, dir); - dl1.v0 = n++; - dl1.v2 = gP; - dl1.v3 = gcPp1; - dl1.v4 = prntPm1; - dl1.v5 = pP; - dl1.cz6(); - f[c++] = dl1.csa(s_dir, dir); - dl1.v0 = n++; - dl1.v2 = gcPm1; - dl1.v3 = gP; - dl1.v4 = prntPm1; - dl1.v5 = pP; - dl1.cz6(); - f[c++] = dl1.csa(s_dir, dir); - dl1.v0 = n++; - dl1.v2 = gP; - dl1.v3 = gcPp1; - dl1.v4 = pP; - dl1.v5 = prntPp1; - dl1.cz6(); - f[c++] = dl1.csa(s_dir, dir); - dl1.v0 = n++; - dl1.v2 = gcPm1; - dl1.v3 = gP; - dl1.v4 = pP; - dl1.v5 = prntPp1; - dl1.cz6(); - f[c++] = dl1.csa(s_dir, dir); - - int pLSp1 = p != pos.length - 1 ? forms[p + 1] == -1 ? -1 : cluster.getLP(forms[p + 1]) : _cend; - int cLSp1 = d != pos.length - 1 ? forms[d + 1] == -1 ? -1 : cluster.getLP(forms[d + 1]) : _cend; - int gcLSp1 = gc < pos.length - 1 ? forms[gc + 1] == -1 ? -1 : cluster.getLP(forms[gc + 1]) : s_end; - - int pLSm1 = p != 0 ? lemmas[p - 1] == -1 ? -1 : cluster.getLP(lemmas[p - 1]) : _cstr; - int cLSm1 = d - 1 >= 0 ? lemmas[d - 1] == -1 ? -1 : cluster.getLP(lemmas[d - 1]) : _cstr; - int gcLSm1 = gc > 0 ? lemmas[gc - 1] == -1 ? -1 : cluster.getLP(lemmas[gc - 1]) : _cstr; - - dl1.v0 = n++; - dl1.v2 = gP; - dl1.v3 = gcLSp1; - dl1.v4 = dP; - dl1.cz5(); - f[c++] = dl1.csa(s_dir, dir); - dl1.v0 = n++; - dl1.v2 = gP; - dl1.v3 = gcLSm1; - dl1.v4 = dP; - dl1.cz5(); - f[c++] = dl1.csa(s_dir, dir); - dl1.v0 = n++; - dl1.v2 = gP; - dl1.v3 = dP; - dl1.v4 = cLSp1; - dl1.cz5(); - f[c++] = dl1.csa(s_dir, dir); - dl1.v0 = n++; - dl1.v2 = gP; - dl1.v3 = dP; - dl1.v4 = cLSm1; - dl1.cz5(); - f[c++] = dl1.csa(s_dir, dir); - dl1.v0 = n++; - dl1.v2 = gP; - dl1.v3 = gcLSp1; - dl1.v4 = cLSm1; - dl1.v5 = dP; - dl1.cz6(); - f[c++] = dl1.csa(s_dir, dir); - dl1.v0 = n++; - dl1.v2 = gcLSm1; - dl1.v3 = gP; - dl1.v4 = cLSm1; - dl1.v5 = dP; - dl1.cz6(); - f[c++] = dl1.csa(s_dir, dir); - dl1.v0 = n++; - dl1.v2 = gP; - dl1.v3 = gcLSp1; - dl1.v4 = dP; - dl1.v5 = cLSp1; - dl1.cz6(); - f[c++] = dl1.csa(s_dir, dir); - dl1.v0 = n++; - dl1.v2 = cLSm1; - dl1.v3 = gP; - dl1.v4 = dP; - dl1.cz6(); - f[c++] = dl1.csa(s_dir, dir); - dl1.v0 = n++; - dl1.v2 = gP; - dl1.v3 = gcLSp1; - dl1.v4 = pP; - dl1.cz5(); - f[c++] = dl1.csa(s_dir, dir); - dl1.v0 = n++; - dl1.v2 = gP; - dl1.v3 = gcLSm1; - dl1.v4 = pP; - dl1.cz5(); - f[c++] = dl1.csa(s_dir, dir); - dl1.v0 = n++; - dl1.v2 = gP; - dl1.v3 = pP; - dl1.v4 = pLSp1; - dl1.cz5(); - f[c++] = dl1.csa(s_dir, dir); - dl1.v0 = n++; - dl1.v2 = gP; - dl1.v3 = pP; - dl1.v4 = pLSm1; - dl1.cz5(); - f[c++] = dl1.csa(s_dir, dir); - dl1.v0 = n++; - dl1.v2 = gP; - dl1.v3 = gcLSp1; - dl1.v4 = pLSm1; - dl1.v5 = pP; - dl1.cz6(); - f[c++] = dl1.csa(s_dir, dir); - dl1.v0 = n++; - dl1.v2 = gcLSm1; - dl1.v3 = gP; - dl1.v4 = pLSm1; - dl1.v5 = pP; - dl1.cz6(); - f[c++] = dl1.csa(s_dir, dir); - dl1.v0 = n++; - dl1.v2 = gP; - dl1.v3 = gcLSp1; - dl1.v4 = pP; - dl1.v5 = pLSp1; - dl1.cz6(); - f[c++] = dl1.csa(s_dir, dir); - dl1.v0 = n++; - dl1.v2 = gcLSm1; - dl1.v3 = gP; - dl1.v4 = pP; - dl1.v5 = pLSp1; - dl1.cz6(); - f[c++] = dl1.csa(s_dir, dir); - - if (gc >= 0) { - } - - // take those in for stacking - /* - * dl2.v1=label; dl2.v0= - * n++;dl2.v2=prel[d];dl2.v3=g;dl2.v4=gP;dl2.v5=dP;dl2.cz6();f[c++]=dl2. - * csa(s_dir,dir); dl2.v0= - * n++;dl2.v2=prel[d];dl2.v3=g;dl2.v4=gP;dl2.v5=pP;dl2.cz6();f[c++]=dl2. - * csa(s_dir,dir); dl2.v0= - * n++;dl2.v2=prel[d];dl2.v3=g;dl2.v4=gP;dl2.v5=pP;dl2.v6=dP;dl2.cz7();f - * [c++]=dl2.csa(s_dir,dir); - * - * dl2.v0= - * n++;dl2.v2=gr;dl2.v3=g;dl2.v4=gP;dl2.v5=dP;dl2.cz6();f[c++]=dl2.csa( - * s_dir,dir); dl2.v0= - * n++;dl2.v2=gr;dl2.v3=g;dl2.v4=gP;dl2.v5=pP;dl2.cz6();f[c++]=dl2.csa( - * s_dir,dir); dl2.v0= - * n++;dl2.v2=gr;dl2.v3=g;dl2.v4=gP;dl2.v5=pP;dl2.v6=dP;dl2.cz7();f[c++] - * =dl2.csa(s_dir,dir); - * - */ - if (feats == null) - return; - - short[] featsP = feats[d]; - short[] featsD = gc != -1 ? feats[gc] : null; - - dlf.v0 = n++; - dlf.v1 = label; - dlf.v2 = gP; - dlf.v3 = dP; - extractFeat(f, c, dir, featsP, featsD); - return; - } - - @Override - public void siblingm(Instances is, int i, short pos[], int forms[], int[] lemmas, short[][] feats, int prnt, int d, - int sblng, int label, Cluster cluster, long[] f, int v) { - - for (int k = 0; k < f.length; k++) - f[k] = 0; - - int pP = pos[prnt], dP = pos[d]; - int prntF = forms[prnt], chldF = forms[d]; - int prntL = lemmas[prnt], chldL = lemmas[d]; - int prntLS = prntF == -1 ? -1 : cluster.getLP(prntF), chldLS = chldF == -1 ? -1 : cluster.getLP(chldF); - - int sP = sblng != -1 ? pos[sblng] : s_str, sblF = sblng != -1 ? forms[sblng] : s_stwrd, - sblL = sblng != -1 ? lemmas[sblng] : s_stwrd; - - int sblLS = (sblng != -1) && (sblF != -1) ? cluster.getLP(sblF) : s_stwrd; - - int dir = (prnt < d) ? ra : la; - - int abs = Math.abs(prnt - d); - - final int dist; - if (abs > 10) - dist = d10; - else if (abs > 5) - dist = d5; - else if (abs == 5) - dist = d4; - else if (abs == 4) - dist = d3; - else if (abs == 3) - dist = d2; - else if (abs == 2) - dist = d1; - else - dist = di0; - - int n = 147; - - if (prntF > maxForm) - prntF = -1; - if (prntL > maxForm) - prntL = -1; - - if (chldF > maxForm) - chldF = -1; - if (chldL > maxForm) - chldL = -1; - - if (sblF > maxForm) - sblF = -1; - if (sblL > maxForm) - sblL = -1; - - dl1.v0 = n++; - dl1.v1 = label; - dl1.v2 = pP; - dl1.v3 = dP; - dl1.v4 = sP; - dl1.cz5(); - f[0] = dl1.csa(s_dir, dir); - f[1] = dl1.csa(s_dist, dist); - dl1.v0 = n++; - dl1.v3 = sP; - dl1.cz4(); - f[2] = dl1.csa(s_dir, dir); - f[3] = dl1.csa(s_dist, dist); - dl1.v0 = n++; - dl1.v2 = dP; - dl1.cz4(); - f[4] = dl1.csa(s_dir, dir); - f[5] = dl1.csa(s_dist, dist); - - // sibling only could be tried - dwwp.v1 = label; - dwwp.v0 = n++; - dwwp.v2 = prntF; - dwwp.v3 = sblF; - dwwp.cz4(); - f[6] = dwwp.csa(s_dir, dir); - f[7] = dwwp.csa(s_dist, dist); - dwwp.v0 = n++; - dwwp.v2 = chldF; - dwwp.cz4(); - f[8] = dwwp.csa(s_dir, dir); - f[9] = dwwp.csa(s_dist, dist); - dwp.v0 = n++; - dwp.v1 = label; - dwp.v2 = sblF; - dwp.v3 = pP; - dwp.cz4(); - f[10] = dwp.csa(s_dir, dir); - f[11] = dwp.csa(s_dist, dist); - dwp.v0 = n++; - /* dwp.v1=label; */dwp.v3 = dP; - dwp.cz4(); - f[12] = dwp.csa(s_dir, dir); - f[13] = dwp.csa(s_dist, dist); - dwp.v0 = n++; - /* dwp.v1=label; */ dwp.v2 = prntF; - dwp.v3 = sP; - dwp.cz4(); - f[14] = dwp.csa(s_dir, dir); - f[15] = dwp.csa(s_dist, dist); - dwp.v0 = n++; - /* dwp.v1=label; */ dwp.v2 = chldF; - dwp.cz4(); - f[16] = dwp.csa(s_dir, dir); - f[17] = dwp.csa(s_dist, dist); - - // lemmas - dwwp.v0 = n++; - dwwp.v2 = prntL; - dwwp.v3 = sblL; - dwwp.cz4(); - f[18] = dwwp.csa(s_dir, dir); - dwwp.v0 = n++; - dwwp.v2 = chldL; - dwwp.cz4(); - f[19] = dwwp.csa(s_dir, dir); - f[20] = dwwp.csa(s_dist, dist); - dwp.v0 = n++; - /* dwp.v1=label; */ dwp.v2 = sblL; - dwp.v3 = pP; - dwp.cz4(); - f[21] = dwp.csa(s_dir, dir); - f[22] = dwp.csa(s_dist, dist); - dwp.v0 = n++; - /* dwp.v1=label; */ dwp.v3 = dP; - dwp.cz4(); - f[23] = dwp.csa(s_dir, dir); - f[24] = dwp.csa(s_dist, dist); - dwp.v0 = n++; - /* dwp.v1=label; */ dwp.v2 = prntL; - dwp.v3 = sP; - dwp.cz4(); - f[25] = dwp.csa(s_dir, dir); - f[26] = dwp.csa(s_dist, dist); - dwp.v0 = n++; - /* dwp.v1=label; */ dwp.v2 = chldL; - dwp.cz4(); - f[27] = dwp.csa(s_dir, dir); - f[28] = dwp.csa(s_dist, dist); - - // clusters - - d2lp.v1 = label; - d2lp.v0 = n++; - d2lp.v2 = prntLS; - d2lp.v3 = sblLS; - d2lp.cz4(); - f[29] = d2lp.csa(s_dir, dir); - d2lp.v0 = n++; - d2lp.v2 = chldLS; - d2lp.v3 = sblLS; - d2lp.cz4(); - f[30] = d2lp.csa(s_dir, dir); - f[31] = d2lp.csa(s_dist, dist); - - d3lp.v1 = label; - d3lp.v0 = n++; - d3lp.v2 = prntLS; - d3lp.v3 = chldLS; - d3lp.v4 = sblLS; - d3lp.cz5(); - f[32] = d3lp.csa(s_dir, dir); - - d2lp.v0 = n++; - d2lp.v2 = prntLS; - d2lp.v3 = chldLS; - d2lp.v4 = sblF; - d2lp.cz5(); - f[33] = d2lp.csa(s_dir, dir); - f[34] = d2lp.csa(s_dist, dist); - d2lp.v0 = n++; - d2lp.v2 = prntLS; - d2lp.v3 = sblLS; - d2lp.v4 = chldF; - d2lp.cz5(); - f[35] = d2lp.csa(s_dir, dir); - f[36] = d2lp.csa(s_dist, dist); - d2lp.v0 = n++; - d2lp.v2 = chldLS; - d2lp.v3 = sblLS; - d2lp.v4 = prntF; - d2lp.cz5(); - f[37] = d2lp.csa(s_dir, dir); - f[38] = d2lp.csa(s_dist, dist); - - d2pp.v1 = label; - d2pp.v0 = n++; - d2pp.v2 = prntLS; - d2pp.v3 = chldLS; - d2pp.v4 = sP; - d2pp.cz5(); - f[39] = d2pp.csa(s_dir, dir); - f[40] = d2pp.csa(s_dist, dist); - d2pp.v0 = n++; - d2pp.v2 = prntLS; - d2pp.v3 = sblLS; - d2pp.v4 = dP; - d2pp.cz5(); - f[41] = d2pp.csa(s_dir, dir); - f[42] = d2pp.csa(s_dist, dist); - d2pp.v0 = n++; - d2pp.v2 = chldLS; - d2pp.v3 = sblLS; - d2pp.v4 = pP; - d2pp.cz5(); - f[43] = d2pp.csa(s_dir, dir); - f[44] = d2pp.csa(s_dist, dist); - - int prntPm1 = prnt != 0 ? pos[prnt - 1] : s_str; - int chldPm1 = d - 1 >= 0 ? pos[d - 1] : s_str; - int prntPp1 = prnt != pos.length - 1 ? pos[prnt + 1] : s_end; - int chldPp1 = d != pos.length - 1 ? pos[d + 1] : s_end; - - // sibling part of speech minus and plus 1 - int sblPm1 = sblng > 0 ? pos[sblng - 1] : s_str; - int sblPp1 = sblng < pos.length - 1 ? pos[sblng + 1] : s_end; - - dl1.v0 = n++; - dl1.v2 = sP; - dl1.v3 = sblPp1; - dl1.v4 = pP; - dl1.cz5(); - f[45] = dl1.csa(s_dir, dir); - dl1.v0 = n++; - dl1.v2 = sP; - dl1.v3 = sblPm1; - dl1.v4 = pP; - dl1.cz5(); - f[46] = dl1.csa(s_dir, dir);// f.add(li.l2i(l)); - dl1.v0 = n++; - dl1.v2 = sP; - dl1.v3 = pP; - dl1.v4 = prntPp1; - dl1.cz5(); - f[47] = dl1.csa(s_dir, dir);// f.add(li.l2i(l)); - dl1.v0 = n++; - dl1.v2 = sP; - dl1.v3 = pP; - dl1.v4 = prntPm1; - dl1.cz5(); - f[48] = dl1.csa(s_dir, dir);// f.add(li.l2i(l)); - dl1.v0 = n++; - dl1.v2 = sP; - dl1.v3 = sblPp1; - dl1.v4 = prntPm1; - dl1.v5 = pP; - dl1.cz6(); - f[49] = dl1.csa(s_dir, dir); - dl1.v0 = n++; - dl1.v2 = sblPm1; - dl1.v3 = sP; - dl1.v4 = prntPm1; - dl1.v5 = pP; - dl1.cz6(); - f[50] = dl1.csa(s_dir, dir);// f.add(li.l2i(l)); - dl1.v0 = n++; - dl1.v2 = sP; - dl1.v3 = sblPp1; - dl1.v4 = pP; - dl1.v5 = prntPp1; - dl1.cz6(); - f[51] = dl1.csa(s_dir, dir);// f.add(li.l2i(l)); - dl1.v0 = n++; - dl1.v2 = sblPm1; - dl1.v3 = sP; - dl1.v4 = pP; - dl1.v5 = prntPp1; - dl1.cz6(); - f[52] = dl1.csa(s_dir, dir);// f.add(li.l2i(l)); - dl1.v0 = n++; - dl1.v2 = sP; - dl1.v3 = sblPp1; - dl1.v4 = dP; - dl1.cz5(); - f[53] = dl1.csa(s_dir, dir); - dl1.v0 = n++; - dl1.v2 = sP; - dl1.v3 = sblPm1; - dl1.v4 = dP; - dl1.cz5(); - f[54] = dl1.csa(s_dir, dir); - dl1.v0 = n++; - dl1.v2 = sP; - dl1.v3 = dP; - dl1.v4 = chldPp1; - dl1.cz5(); - f[55] = dl1.csa(s_dir, dir); - dl1.v0 = n++; - dl1.v2 = sP; - dl1.v3 = dP; - dl1.v4 = chldPm1; - dl1.cz5(); - f[56] = dl1.csa(s_dir, dir); - dl1.v0 = n++; - dl1.v2 = sP; - dl1.v3 = sblPp1; - dl1.v4 = chldPm1; - dl1.v5 = dP; - dl1.cz6(); - f[57] = dl1.csa(s_dir, dir);// f.add(li.l2i(l)); - dl1.v0 = n++; - dl1.v2 = sblPm1; - dl1.v3 = sP; - dl1.v4 = chldPm1; - dl1.v5 = dP; - dl1.cz6(); - f[58] = dl1.csa(s_dir, dir); - dl1.v0 = n++; - dl1.v2 = sP; - dl1.v3 = sblPp1; - dl1.v4 = dP; - dl1.v5 = chldPp1; - dl1.cz6(); - f[59] = dl1.csa(s_dir, dir);// f.add(li.l2i(l)); - dl1.v0 = n++; - dl1.v2 = sblPm1; - dl1.v3 = sP; - dl1.v4 = dP; - dl1.v5 = chldPp1; - dl1.cz6(); - f[60] = dl1.csa(s_dir, dir); - - int c = 61; - - int pLSp1 = prnt != pos.length - 1 ? forms[prnt + 1] == -1 ? -1 : cluster.getLP(forms[prnt + 1]) : _cend; - int cLSp1 = d != pos.length - 1 ? forms[d + 1] == -1 ? -1 : cluster.getLP(forms[d + 1]) : _cend; - int sLSp1 = sblng < pos.length - 1 ? forms[sblng + 1] == -1 ? -1 : cluster.getLP(forms[sblng + 1]) : _cend; - - int pLSm1 = prnt != 0 ? forms[prnt - 1] == -1 ? -1 : cluster.getLP(forms[prnt - 1]) : _cstr; - int cLSm1 = d - 1 >= 0 ? forms[d - 1] == -1 ? -1 : cluster.getLP(forms[d - 1]) : _cstr; - int sLSm1 = sblng > 0 ? forms[sblng - 1] == -1 ? -1 : cluster.getLP(forms[sblng - 1]) : _cstr; - - // int c=61; - - dl1.v0 = n++; - dl1.v2 = sP; - dl1.v3 = sLSp1; - dl1.v4 = pP; - dl1.cz5(); - f[c++] = dl1.csa(s_dir, dir); - dl1.v0 = n++; - dl1.v2 = sP; - dl1.v3 = sLSm1; - dl1.v4 = pP; - dl1.cz5(); - f[c++] = dl1.csa(s_dir, dir); - dl1.v0 = n++; - dl1.v2 = sP; - dl1.v3 = pP; - dl1.v4 = pLSp1; - dl1.cz5(); - f[c++] = dl1.csa(s_dir, dir); - dl1.v0 = n++; - dl1.v2 = sP; - dl1.v3 = pP; - dl1.v4 = pLSm1; - dl1.cz5(); - f[c++] = dl1.csa(s_dir, dir); - dl1.v0 = n++; - dl1.v2 = sP; - dl1.v3 = sLSp1; - dl1.v4 = pLSm1; - dl1.v5 = pP; - dl1.cz6(); - f[c++] = dl1.csa(s_dir, dir); - dl1.v0 = n++; - dl1.v2 = sLSm1; - dl1.v3 = sP; - dl1.v4 = pLSm1; - dl1.v5 = pP; - dl1.cz6(); - f[c++] = dl1.csa(s_dir, dir); - dl1.v0 = n++; - dl1.v2 = sP; - dl1.v3 = sLSp1; - dl1.v4 = pP; - dl1.v5 = pLSp1; - dl1.cz6(); - f[c++] = dl1.csa(s_dir, dir); - dl1.v0 = n++; - dl1.v2 = sLSm1; - dl1.v3 = sP; - dl1.v4 = pP; - dl1.v5 = pLSp1; - dl1.cz6(); - f[c++] = dl1.csa(s_dir, dir); - dl1.v0 = n++; - dl1.v2 = sP; - dl1.v3 = sLSp1; - dl1.v4 = dP; - dl1.cz5(); - f[c++] = dl1.csa(s_dir, dir); - dl1.v0 = n++; - dl1.v2 = sP; - dl1.v3 = sLSm1; - dl1.v4 = dP; - dl1.cz5(); - f[c++] = dl1.csa(s_dir, dir); - dl1.v0 = n++; - dl1.v2 = sP; - dl1.v3 = dP; - dl1.v4 = cLSp1; - dl1.cz5(); - f[c++] = dl1.csa(s_dir, dir); - dl1.v0 = n++; - dl1.v2 = sP; - dl1.v3 = dP; - dl1.v4 = cLSm1; - dl1.cz5(); - f[c++] = dl1.csa(s_dir, dir); - dl1.v0 = n++; - dl1.v2 = sP; - dl1.v3 = sLSm1; - dl1.v4 = cLSm1; - dl1.v5 = dP; - dl1.cz6(); - f[c++] = dl1.csa(s_dir, dir); - dl1.v0 = n++; - dl1.v2 = sLSm1; - dl1.v3 = sP; - dl1.v4 = cLSm1; - dl1.v5 = dP; - dl1.cz6(); - f[c++] = dl1.csa(s_dir, dir); - dl1.v0 = n++; - dl1.v2 = sP; - dl1.v3 = sLSp1; - dl1.v4 = dP; - dl1.v5 = cLSp1; - dl1.cz6(); - f[c++] = dl1.csa(s_dir, dir); - dl1.v0 = n++; - dl1.v2 = sLSm1; - dl1.v3 = sP; - dl1.v4 = dP; - dl1.v5 = cLSp1; - dl1.cz6(); - f[c++] = dl1.csa(s_dir, dir); - - dl1.v0 = n++; - dl1.v2 = sP; - dl1.v3 = sLSp1; - dl1.v4 = pP; - dl1.cz5(); - f[c++] = dl1.csa(s_dir, dir); - dl1.v0 = n++; - dl1.v2 = sP; - dl1.v3 = sLSm1; - dl1.v4 = pP; - dl1.cz5(); - f[c++] = dl1.csa(s_dir, dir); - dl1.v0 = n++; - dl1.v2 = sP; - dl1.v3 = pP; - dl1.v4 = pLSp1; - dl1.cz5(); - f[c++] = dl1.csa(s_dir, dir); - dl1.v0 = n++; - dl1.v2 = sP; - dl1.v3 = pP; - dl1.v4 = pLSm1; - dl1.cz5(); - f[c++] = dl1.csa(s_dir, dir); - dl1.v0 = n++; - dl1.v2 = sP; - dl1.v3 = sLSp1; - dl1.v4 = pLSm1; - dl1.v5 = pP; - dl1.cz6(); - f[c++] = dl1.csa(s_dir, dir); - dl1.v0 = n++; - dl1.v2 = sLSm1; - dl1.v3 = sP; - dl1.v4 = pLSm1; - dl1.v5 = pP; - dl1.cz6(); - f[c++] = dl1.csa(s_dir, dir); - dl1.v0 = n++; - dl1.v2 = sP; - dl1.v3 = sLSp1; - dl1.v4 = pP; - dl1.v5 = pLSp1; - dl1.cz6(); - f[c++] = dl1.csa(s_dir, dir); - dl1.v0 = n++; - dl1.v2 = sLSm1; - dl1.v3 = sP; - dl1.v4 = pP; - dl1.v5 = pLSp1; - dl1.cz6(); - f[c++] = dl1.csa(s_dir, dir); - dl1.v0 = n++; - dl1.v2 = sP; - dl1.v3 = sLSp1; - dl1.v4 = dP; - dl1.cz5(); - f[c++] = dl1.csa(s_dir, dir); - dl1.v0 = n++; - dl1.v2 = sP; - dl1.v3 = sLSm1; - dl1.v4 = dP; - dl1.cz5(); - f[c++] = dl1.csa(s_dir, dir); - dl1.v0 = n++; - dl1.v2 = sP; - dl1.v3 = dP; - dl1.v4 = cLSp1; - dl1.cz5(); - f[c++] = dl1.csa(s_dir, dir); - dl1.v0 = n++; - dl1.v2 = sP; - dl1.v3 = dP; - dl1.v4 = cLSm1; - dl1.cz5(); - f[c++] = dl1.csa(s_dir, dir); - dl1.v0 = n++; - dl1.v2 = sP; - dl1.v3 = sLSm1; - dl1.v4 = cLSm1; - dl1.v5 = dP; - dl1.cz6(); - f[c++] = dl1.csa(s_dir, dir); - dl1.v0 = n++; - dl1.v2 = sLSm1; - dl1.v3 = sP; - dl1.v4 = cLSm1; - dl1.v5 = dP; - dl1.cz6(); - f[c++] = dl1.csa(s_dir, dir); - dl1.v0 = n++; - dl1.v2 = sP; - dl1.v3 = sLSp1; - dl1.v4 = dP; - dl1.v5 = cLSp1; - dl1.cz6(); - f[c++] = dl1.csa(s_dir, dir); - dl1.v0 = n++; - dl1.v2 = sLSm1; - dl1.v3 = sP; - dl1.v4 = dP; - dl1.v5 = cLSp1; - dl1.cz6(); - f[c++] = dl1.csa(s_dir, dir); - - // take those in for stacking - - /* - * short[] prel = is.plabels[i],phead=is.pheads[i]; - * - * int g = prnt==phead[d]?1:2 ; if (sblng>=0) g += - * prnt==phead[sblng]?4:8; - * - * int gr = sblng==-1?s_relend:prel[sblng]; - * - * - * dl2.v0= - * n++;dl2.v2=prel[d];dl2.v3=g;dl2.v4=sP;dl2.v5=dP;dl2.cz6();f[c++]=dl2. - * csa(s_dir,dir); dl2.v0= - * n++;dl2.v2=prel[d];dl2.v3=g;dl2.v4=sP;dl2.v5=pP;dl2.cz6();f[c++]=dl2. - * csa(s_dir,dir); dl2.v0= - * n++;dl2.v2=prel[d];dl2.v3=g;dl2.v4=sP;dl2.v5=pP;dl2.v6=dP;dl2.cz7();f - * [c++]=dl2.csa(s_dir,dir); - * - * dl2.v0= - * n++;dl2.v2=gr;dl2.v3=g;dl2.v4=sP;dl2.v5=dP;dl2.cz6();f[c++]=dl2.csa( - * s_dir,dir); dl2.v0= - * n++;dl2.v2=gr;dl2.v3=g;dl2.v4=sP;dl2.v5=pP;dl2.cz6();f[c++]=dl2.csa( - * s_dir,dir); dl2.v0= - * n++;dl2.v2=gr;dl2.v3=g;dl2.v4=sP;dl2.v5=pP;dl2.v6=dP;dl2.cz7();f[c++] - * =dl2.csa(s_dir,dir); - */ - - if (feats == null) - return; - - int cnt = c; - - short[] featsP = feats[d]; - short[] featsSbl = sblng != -1 ? feats[sblng] : null; - - dlf.v0 = n++; - dlf.v1 = label; - dlf.v2 = sP; - dlf.v3 = dP; - - cnt = extractFeat(f, cnt, dir, featsP, featsSbl); - - featsP = feats[prnt]; - featsSbl = sblng != -1 ? feats[sblng] : null; - - dlf.v0 = n++; - dlf.v1 = label; - dlf.v2 = pP; - dlf.v3 = sP; - if (featsP != null && featsSbl != null) { - for (short i1 = 0; i1 < featsP.length; i1++) { - for (short i2 = 0; i2 < featsSbl.length; i2++) { - dlf.v4 = featsP[i1]; - dlf.v5 = featsSbl[i2]; - dlf.cz6(); - f[cnt++] = dlf.csa(s_dir, prnt < sblng ? 1 : 2); - } - } - } else if (featsP == null && featsSbl != null) { - - for (short i2 = 0; i2 < featsSbl.length; i2++) { - dlf.v4 = nofeat; - dlf.v5 = featsSbl[i2]; - dlf.cz6(); - f[cnt++] = dlf.csa(s_dir, dir); - } - - } else if (featsP != null && featsSbl == null) { - - for (short i1 = 0; i1 < featsP.length; i1++) { - dlf.v4 = featsP[i1]; - dlf.v5 = nofeat; - dlf.cz6(); - f[cnt++] = dlf.csa(s_dir, dir); - } - } - - return; - } - - private int extractFeat(long[] f, int cnt, int dir, short[] featsP, short[] featsD) { - if (featsP != null && featsD != null) { - for (short i1 = 0; i1 < featsP.length; i1++) { - for (short i2 = 0; i2 < featsD.length; i2++) { - dlf.v4 = featsP[i1]; - dlf.v5 = featsD[i2]; - dlf.cz6(); - f[cnt++] = dlf.csa(s_dir, dir); - } - } - } else if (featsP == null && featsD != null) { - - for (short i2 = 0; i2 < featsD.length; i2++) { - dlf.v4 = nofeat; - dlf.v5 = featsD[i2]; - dlf.cz6(); - f[cnt++] = dlf.csa(s_dir, dir); - - } - } else if (featsP != null && featsD == null) { - - for (short i1 = 0; i1 < featsP.length; i1++) { - dlf.v4 = featsP[i1]; - dlf.v5 = nofeat; - dlf.cz6(); - f[cnt++] = dlf.csa(s_dir, dir); - - } - } - return cnt; - } - - public IFV encodeCat2(Instances is, int ic, short pposs[], int forms[], int[] lemmas, short[] heads, short[] types, - short feats[][], Cluster cluster, IFV f, Long2IntInterface li) { - - long[] svs = new long[250]; - - for (int i = 1; i < heads.length; i++) { - - int n = basic(pposs, forms, heads[i], i, cluster, f); - firstm(is, ic, heads[i], i, types[i], cluster, svs); - for (long sv : svs) - f.add(li.l2i(sv)); - - int ch, cmi, cmo; - if (heads[i] < i) { - ch = rightmostRight(heads, heads[i], i); - cmi = leftmostLeft(heads, i, heads[i]); - cmo = rightmostRight(heads, i, heads.length); - - } else { - ch = leftmostLeft(heads, heads[i], i); - cmi = rightmostRight(heads, i, heads[i]); - cmo = leftmostLeft(heads, i, 0); - } - - siblingm(is, ic, pposs, forms, lemmas, feats, heads[i], i, ch, types[i], cluster, svs, n); - for (long sv : svs) - f.add(li.l2i(sv)); - - gcm(is, ic, heads[i], i, cmi, types[i], cluster, svs); - for (long sv : svs) - f.add(li.l2i(sv)); - - gcm(is, ic, heads[i], i, cmo, types[i], cluster, svs); - for (long sv : svs) - f.add(li.l2i(sv)); - } - - return f; - } - - @Override - public FV encodeCat(Instances is, int ic, short pposs[], int forms[], int[] lemmas, short[] heads, short[] types, - short feats[][], Cluster cluster, FV f) { - - long[] svs = new long[250]; - - for (int i = 1; i < heads.length; i++) { - - int n = basic(pposs, forms, heads[i], i, cluster, f); - firstm(is, ic, heads[i], i, types[i], cluster, svs); - for (long sv : svs) - dl1.map(f, sv); - - int ch, cmi, cmo; - if (heads[i] < i) { - ch = rightmostRight(heads, heads[i], i); - cmi = leftmostLeft(heads, i, heads[i]); - cmo = rightmostRight(heads, i, heads.length); - - } else { - ch = leftmostLeft(heads, heads[i], i); - cmi = rightmostRight(heads, i, heads[i]); - cmo = leftmostLeft(heads, i, 0); - } - - siblingm(is, ic, pposs, forms, lemmas, feats, heads[i], i, ch, types[i], cluster, svs, n); - for (long sv : svs) - dl1.map(f, sv); - - gcm(is, ic, heads[i], i, cmi, types[i], cluster, svs); - for (long sv : svs) - dl1.map(f, sv); - - gcm(is, ic, heads[i], i, cmo, types[i], cluster, svs); - for (long sv : svs) - dl1.map(f, sv); - } - - return f; - } - - @Override - public float encode3(short[] pos, short heads[], short[] types, DataF d2) { - - double v = 0; - for (int i = 1; i < heads.length; i++) { - - int dir = (heads[i] < i) ? 0 : 1; - - v += d2.pl[heads[i]][i]; - v += d2.lab[heads[i]][i][types[i]][dir]; - - boolean left = i < heads[i]; - short[] labels = Edges.get(pos[heads[i]], pos[i], left); - int lid = -1; - for (int k = 0; k < labels.length; k++) - if (types[i] == labels[k]) { - lid = k; - break; - } - - int ch, cmi, cmo; - if (heads[i] < i) { - ch = rightmostRight(heads, heads[i], i); - cmi = leftmostLeft(heads, i, heads[i]); - cmo = rightmostRight(heads, i, heads.length); - - if (ch == -1) - ch = heads[i]; - if (cmi == -1) - cmi = heads[i]; - if (cmo == -1) - cmo = heads[i]; - - } else { - ch = leftmostLeft(heads, heads[i], i); - cmi = rightmostRight(heads, i, heads[i]); - cmo = leftmostLeft(heads, i, 0); - - if (ch == -1) - ch = i; - if (cmi == -1) - cmi = i; - if (cmo == -1) - cmo = i; - } - v += d2.sib[heads[i]][i][ch][dir][lid]; - v += d2.gra[heads[i]][i][cmi][dir][lid]; - v += d2.gra[heads[i]][i][cmo][dir][lid]; - } - return (float) v; - } - - /** - * Provide the scores of the edges - * - * @param pos - * @param heads - * @param types - * @param edgesScores - * @param d2 - * @return - */ - public static float encode3(short[] pos, short heads[], short[] types, float[] edgesScores, DataF d2) { - - double v = 0; - for (int i = 1; i < heads.length; i++) { - - int dir = (heads[i] < i) ? 0 : 1; - - edgesScores[i] = d2.pl[heads[i]][i]; - edgesScores[i] += d2.lab[heads[i]][i][types[i]][dir]; - - boolean left = i < heads[i]; - short[] labels = Edges.get(pos[heads[i]], pos[i], left); - int lid = -1; - for (int k = 0; k < labels.length; k++) - if (types[i] == labels[k]) { - lid = k; - break; - } - - int ch, cmi, cmo; - if (heads[i] < i) { - ch = rightmostRight(heads, heads[i], i); - cmi = leftmostLeft(heads, i, heads[i]); - cmo = rightmostRight(heads, i, heads.length); - - if (ch == -1) - ch = heads[i]; - if (cmi == -1) - cmi = heads[i]; - if (cmo == -1) - cmo = heads[i]; - - } else { - ch = leftmostLeft(heads, heads[i], i); - cmi = rightmostRight(heads, i, heads[i]); - cmo = leftmostLeft(heads, i, 0); - - if (ch == -1) - ch = i; - if (cmi == -1) - cmi = i; - if (cmo == -1) - cmo = i; - } - edgesScores[i] += d2.sib[heads[i]][i][ch][dir][lid]; - edgesScores[i] += d2.gra[heads[i]][i][cmi][dir][lid]; - edgesScores[i] += d2.gra[heads[i]][i][cmo][dir][lid]; - v += edgesScores[i]; - } - return (float) v; - } - - private static int rightmostRight(short[] heads, int head, int max) { - int rightmost = -1; - for (int i = head + 1; i < max; i++) - if (heads[i] == head) - rightmost = i; - - return rightmost; - } - - private static int leftmostLeft(short[] heads, int head, int min) { - int leftmost = -1; - for (int i = head - 1; i > min; i--) - if (heads[i] == head) - leftmost = i; - return leftmost; - } - - public static final String REL = "REL", END = "END", STR = "STR", LA = "LA", RA = "RA"; - - private static int ra, la; - private static int s_str; - private static int s_end, _cend, _cstr, s_stwrd; - - protected static final String TYPE = "TYPE", DIR = "D"; - public static final String POS = "POS"; - protected static final String DIST = "DIST", MID = "MID", FEAT = "F"; - - private static final String _0 = "0", _4 = "4", _3 = "3", _2 = "2", _1 = "1", _5 = "5", _10 = "10"; - - private static int di0, d4, d3, d2, d1, d5, d10; - - private static final String WORD = "WORD", STWRD = "STWRD", STPOS = "STPOS"; - - private static int nofeat; - - public static int maxForm; - - /** - * Initialize the features. - * - * @param maxFeatures - */ - static public void initFeatures() { - - MFB mf = new MFB(); - mf.register(POS, MID); - s_str = mf.register(POS, STR); - s_end = mf.register(POS, END); - - mf.register(REL, END); - - _cstr = mf.register(Cluster.SPATH, STR); - _cend = mf.register(Cluster.SPATH, END); - - mf.register(TYPE, POS); - - s_stwrd = mf.register(WORD, STWRD); - mf.register(POS, STPOS); - - la = mf.register(DIR, LA); - ra = mf.register(DIR, RA); - - // mf.register(TYPE, CHAR); - - mf.register(TYPE, FEAT); - nofeat = mf.register(FEAT, "NOFEAT"); - - for (int k = 0; k < 215; k++) - mf.register(TYPE, "F" + k); - - di0 = mf.register(DIST, _0); - d1 = mf.register(DIST, _1); - d2 = mf.register(DIST, _2); - d3 = mf.register(DIST, _3); - d4 = mf.register(DIST, _4); - d5 = mf.register(DIST, _5); - // d5l=mf.register(DIST, _5l); - d10 = mf.register(DIST, _10); - - } - - /* - * (non-Javadoc) - * - * @see extractors.Extractor#getType() - */ - @Override - public int getType() { - - return s_type; - } - - /* - * (non-Javadoc) - * - * @see extractors.Extractor#setMaxForm(int) - */ - @Override - public void setMaxForm(int max) { - maxForm = max; - } - - /* - * (non-Javadoc) - * - * @see extractors.Extractor#getMaxForm() - */ - @Override - public int getMaxForm() { - return maxForm; - } - -} diff --git a/dependencyParser/mate-tools/src/extractors/ExtractorClusterStackedR2.java b/dependencyParser/mate-tools/src/extractors/ExtractorClusterStackedR2.java deleted file mode 100644 index d1776b6..0000000 --- a/dependencyParser/mate-tools/src/extractors/ExtractorClusterStackedR2.java +++ /dev/null @@ -1,1929 +0,0 @@ -package extractors; - -import java.util.Arrays; - -import is2.data.Cluster; -import is2.data.D4; -import is2.data.DataF; -import is2.data.Edges; -import is2.data.FV; -import is2.data.IFV; -import is2.data.Instances; -import is2.data.Long2IntInterface; -import is2.data.MFB; - -final public class ExtractorClusterStackedR2 implements Extractor { - - public static int s_rel, s_word, s_type, s_dir, s_dist, s_feat, s_child, s_spath, s_lpath, s_pos; - - MFB mf; - - final D4 d0, dl1, dl2, dwr, dr, dwwp, dw, dwp, dlf, d3lp, d2lp, d2pw, d2pp; - - public final Long2IntInterface li; - - public ExtractorClusterStackedR2(Long2IntInterface li) { - - initFeatures(); - this.li = li; - d0 = new D4(li); - dl1 = new D4(li); - dl2 = new D4(li); - dwr = new D4(li); - dr = new D4(li); - dwwp = new D4(li); - - dw = new D4(li); - dwp = new D4(li); - - dlf = new D4(li); - d3lp = new D4(li); - d2lp = new D4(li); - d2pw = new D4(li); - d2pp = new D4(li); - - } - - @Override - public void initStat() { - - mf = new MFB(); - s_rel = mf.getFeatureCounter().get(REL).intValue(); - s_pos = mf.getFeatureCounter().get(POS).intValue(); - s_word = mf.getFeatureCounter().get(WORD).intValue(); - s_type = mf.getFeatureCounter().get(TYPE).intValue();// mf.getFeatureBits(); - s_dir = mf.getFeatureCounter().get(DIR); - la = mf.getValue(DIR, LA); - ra = mf.getValue(DIR, RA); - s_dist = mf.getFeatureCounter().get(DIST);// mf.getFeatureBits(DIST); - s_feat = mf.getFeatureCounter().get(FEAT);// mf.getFeatureBits(Pipe.FEAT); - s_spath = mf.getFeatureCounter().get(Cluster.SPATH) == null ? 0 : mf.getFeatureCounter().get(Cluster.SPATH);// mf.getFeatureBits(Cluster.SPATH); - s_lpath = mf.getFeatureCounter().get(Cluster.LPATH) == null ? 0 : mf.getFeatureCounter().get(Cluster.LPATH);// mf.getFeatureBits(Cluster.LPATH); - } - - @Override - public void init() { - // DB.println("init"); - d0.a0 = s_type; - d0.a1 = s_pos; - d0.a2 = s_pos; - d0.a3 = s_pos; - d0.a4 = s_pos; - d0.a5 = s_pos; - d0.a6 = s_pos; - d0.a7 = s_pos; - dl1.a0 = s_type; - dl1.a1 = s_rel; - dl1.a2 = s_pos; - dl1.a3 = s_pos; - dl1.a4 = s_pos; - dl1.a5 = s_pos; - dl1.a6 = s_pos; - dl1.a7 = s_pos; - dl2.a0 = s_type; - dl2.a1 = s_rel; - dl2.a2 = s_word; - dl2.a3 = s_pos; - dl2.a4 = s_pos; - dl2.a5 = s_pos; - dl2.a6 = s_pos; - dl2.a7 = s_pos; - dwp.a0 = s_type; - dwp.a1 = s_rel; - dwp.a2 = s_word; - dwp.a3 = s_pos; - dwp.a4 = s_pos; - dwp.a5 = s_word; - dwwp.a0 = s_type; - dwwp.a1 = s_rel; - dwwp.a2 = s_word; - dwwp.a3 = s_word; - dwwp.a4 = s_pos; - dwwp.a5 = s_word; - dlf.a0 = s_type; - dlf.a1 = s_rel; - dlf.a2 = s_pos; - dlf.a3 = s_pos; - dlf.a4 = s_feat; - dlf.a5 = s_feat; - dlf.a6 = s_pos; - dlf.a7 = s_pos; - d3lp.a0 = s_type; - d3lp.a1 = s_rel; - d3lp.a2 = s_lpath; - d3lp.a3 = s_lpath; - d3lp.a4 = s_lpath; - d3lp.a5 = s_word; - d3lp.a6 = s_spath; - d3lp.a7 = s_spath; - d2lp.a0 = s_type; - d2lp.a1 = s_rel; - d2lp.a2 = s_lpath; - d2lp.a3 = s_lpath; - d2lp.a4 = s_word; - d2lp.a5 = s_word; // d3lp.a6 = s_spath; d3lp.a7 = s_spath; - d2pw.a0 = s_type; - d2pw.a1 = s_rel; - d2pw.a2 = s_lpath; - d2pw.a3 = s_lpath; - d2pw.a4 = s_word; - d2pw.a5 = s_word; // d3lp.a6 = s_spath; d3lp.a7 = s_spath; - d2pp.a0 = s_type; - d2pp.a1 = s_rel; - d2pp.a2 = s_lpath; - d2pp.a3 = s_lpath; - d2pp.a4 = s_pos; - d2pp.a5 = s_pos; // d3lp.a6 = s_spath; d3lp.a7 = s_spath; - } - - @Override - public int basic(short[] pposs, int[] form, int p, int d, Cluster cluster, IFV f) { - - d0.clean(); - dl1.clean(); - dl2.clean(); - dwp.clean(); - dwwp.clean(); - dlf.clean(); - d3lp.clean(); - - d3lp.clean(); - d2lp.clean(); - d2pw.clean(); - d2pp.clean(); - - int n = 1; - int dir = (p < d) ? ra : la; - // d0.v0= n; d0.v1=pposs[p]; d0.v2=pposs[d]; //d0.stop=4; - int end = (p >= d ? p : d); - int start = (p >= d ? d : p) + 1; - - StringBuilder s = new StringBuilder(end - start); - int[] x = new int[end - start]; - int c = 0; - for (int i = start; i < end; i++) { - // d0.v3=pposs[i]; - // d0.cz4(); - // d0.csa(s_dir,dir,f); - // s.append((char)pposs[i]); - x[c++] = pposs[i]; - } - - Arrays.sort(x); - for (int i = 0; i < x.length; i++) { - if (i == 0 || x[i] != x[i - 1]) - s.append(x[i]); - } - int v = mf.register("px", s.toString()); - - dwp.v0 = n++; - dwp.v1 = 1; - dwp.v2 = v; - dwp.v3 = pposs[p]; - dwp.v4 = pposs[d]; - dwp.cz5(); - dwp.csa(s_dir, dir, f); - - return n; - } - - @Override - public void firstm(Instances is, int i, int prnt, int dpnt, int label, Cluster cluster, long[] f) { - - // short[] pposs, int[] form, int[] lemmas, short[][] feats - for (int k = 0; k < f.length; k++) - f[k] = 0; - - short[] pposs = is.pposs[i]; - int[] form = is.forms[i]; - short[][] feats = is.feats[i]; - - int pF = form[prnt], dF = form[dpnt]; - int pL = is.plemmas[i][prnt], dL = is.plemmas[i][dpnt]; - int pP = pposs[prnt], dP = pposs[dpnt]; - - int prntLS = pF == -1 ? -1 : cluster.getLP(pF), chldLS = dF == -1 ? -1 : cluster.getLP(dF); - - final int dir = (prnt < dpnt) ? ra : la; - - if (pF > maxForm) - pF = -1; - if (pL > maxForm) - pL = -1; - - if (dF > maxForm) - dF = -1; - if (dL > maxForm) - dL = -1; - - int n = 3, c = 0; - - dl2.v1 = label; - dl2.v0 = n++; - dl2.v2 = pF; - dl2.v3 = dP; - dl2.cz4(); - f[c++] = dl2.csa(s_dir, dir); - dl2.v0 = n++; - dl2.cz3(); - f[c++] = dl2.csa(s_dir, dir); - dl2.v0 = n++; - dl2.v2 = dF; - dl2.v3 = pP; - dl2.cz4(); - f[c++] = dl2.csa(s_dir, dir); - dl2.v0 = n++; - dl2.cz3(); - f[c++] = dl2.csa(s_dir, dir); - - dwwp.v1 = label; - dwwp.v0 = n++; - dwwp.v2 = pF; - dwwp.v3 = dF; - dwwp.cz4(); - f[c++] = dwwp.csa(s_dir, dir); - - dl1.v1 = label; - dl1.v0 = n++; - dl1.v2 = dP; - dl1.cz3(); - f[c++] = dl1.csa(s_dir, dir); - dl1.v0 = n++; - dl1.v2 = pP; - dl1.cz3(); - f[c++] = dl1.csa(s_dir, dir); - dl1.v0 = n++; - dl1.v3 = dP; - dl1.cz4(); - f[c++] = dl1.csa(s_dir, dir); - - int pPm1 = prnt > 0 ? pposs[prnt - 1] : s_str, dPm1 = dpnt > 0 ? pposs[dpnt - 1] : s_str; - int pPp1 = prnt < pposs.length - 1 ? pposs[prnt + 1] : s_end, - dPp1 = dpnt < pposs.length - 1 ? pposs[dpnt + 1] : s_end; - - int pPm2 = prnt > 1 ? pposs[prnt - 2] : s_str, dPm2 = dpnt > 1 ? pposs[dpnt - 2] : s_str; - int pPp2 = prnt < pposs.length - 2 ? pposs[prnt + 2] : s_end, - dPp2 = dpnt < pposs.length - 2 ? pposs[dpnt + 2] : s_end; - - int pFm1 = prnt > 0 ? form[prnt - 1] : s_stwrd, dFm1 = dpnt > 0 ? form[dpnt - 1] : s_stwrd; - int pFp1 = prnt < form.length - 1 ? form[prnt + 1] : s_stwrd, - dFp1 = dpnt < form.length - 1 ? form[dpnt + 1] : s_stwrd; - - dl1.v0 = n++; - dl1.v2 = pP; - dl1.v3 = pPp1; - dl1.v4 = dP; - dl1.v5 = dPp1; - dl1.cz6(); - f[n++] = dl1.csa(s_dir, dir); - dl1.v0 = n++; - dl1.v5 = dPm1; - dl1.cz6(); - f[n++] = dl1.csa(s_dir, dir); - dl1.v0 = n++; - dl1.v3 = pPm1; - dl1.cz6(); - f[n++] = dl1.csa(s_dir, dir); - dl1.v0 = n++; - dl1.v5 = dPp1; - dl1.cz6(); - f[n++] = dl1.csa(s_dir, dir); - - dl1.v0 = n++; - dl1.v3 = pPm1; - dl1.cz5(); - f[n++] = dl1.csa(s_dir, dir); - dl1.v0 = n++; - dl1.v3 = dPm1; - dl1.cz5(); - f[n++] = dl1.csa(s_dir, dir); - dl1.v0 = n++; - dl1.v3 = dPp1; - dl1.cz5(); - f[n++] = dl1.csa(s_dir, dir); - dl1.v0 = n++; - dl1.v3 = pPp1; - dl1.cz5(); - f[n++] = dl1.csa(s_dir, dir); - - dl1.v0 = n++; - dl1.v2 = pP; - dl1.v3 = pPp2; - dl1.v4 = dP; - dl1.v5 = dPp2; - dl1.cz6(); - f[n++] = dl1.csa(s_dir, dir); - dl1.v0 = n++; - dl1.v5 = dPm2; - dl1.cz6(); - f[n++] = dl1.csa(s_dir, dir); - dl1.v0 = n++; - dl1.v3 = pPm2; - dl1.cz6(); - f[n++] = dl1.csa(s_dir, dir); - dl1.v0 = n++; - dl1.v5 = dPp2; - dl1.cz6(); - f[n++] = dl1.csa(s_dir, dir); - - dl1.v0 = n++; - dl1.v3 = pPm2; - dl1.cz5(); - f[n++] = dl1.csa(s_dir, dir); - dl1.v0 = n++; - dl1.v3 = dPm2; - dl1.cz5(); - f[n++] = dl1.csa(s_dir, dir); - dl1.v0 = n++; - dl1.v3 = dPp2; - dl1.cz5(); - f[n++] = dl1.csa(s_dir, dir); - dl1.v0 = n++; - dl1.v3 = pPp2; - dl1.cz5(); - f[n++] = dl1.csa(s_dir, dir); - - dl2.v0 = n++; - dl2.v3 = dFm1; - dl2.v3 = pPp1; - dl2.v4 = pP; - dl2.cz5(); - f[n++] = dl2.getVal(); - dl2.v0 = n++; - dl2.v3 = dFp1; - dl2.v3 = pPm1; - dl2.cz5(); - f[n++] = dl2.getVal(); - dl2.v0 = n++; - dl2.v3 = pFm1; - dl2.v3 = dPp1; - dl2.v4 = dP; - dl2.cz5(); - f[n++] = dl2.getVal(); - dl2.v0 = n++; - dl2.v3 = pFp1; - dl2.v3 = dPm1; - dl2.cz5(); - f[n++] = dl2.getVal(); - - dl2.v0 = n++; - dl2.v3 = dFm1; - dl2.v3 = dPm2; - dl2.v4 = pP; - dl2.cz5(); - f[n++] = dl2.getVal(); - dl2.v0 = n++; - dl2.v3 = dFp1; - dl2.v3 = dPp2; - dl2.cz5(); - f[n++] = dl2.getVal(); - dl2.v0 = n++; - dl2.v3 = pFm1; - dl2.v3 = pPm2; - dl2.v4 = dP; - dl2.cz5(); - f[n++] = dl2.getVal(); - dl2.v0 = n++; - dl2.v3 = pFp1; - dl2.v3 = pPp2; - dl2.cz5(); - f[n++] = dl2.getVal(); - - dwwp.v0 = n++; - dwwp.v2 = pF; - dwwp.v3 = dF; - dwwp.v4 = dP; - dwwp.cz5(); - f[n++] = dwwp.csa(s_dir, dir); - dwwp.v0 = n++; - dwwp.v2 = pF; - dwwp.v3 = dF; - dwwp.v4 = pP; - dwwp.cz5(); - f[n++] = dwwp.csa(s_dir, dir); - dwwp.v0 = n++; - dwwp.v2 = dF; - dwwp.v3 = pF; - dwwp.v4 = pP; - dwwp.v4 = dP; - dwwp.cz6(); - f[n++] = dwwp.csa(s_dir, dir); - - // lemmas - - dl2.v1 = label; - dl2.v0 = n++; - dl2.v2 = pL; - dl2.v3 = dP; - dl2.cz4(); - f[c++] = dl2.csa(s_dir, dir); - dl2.v0 = n++; - dl2.cz3(); - f[c++] = dl2.csa(s_dir, dir); - dl2.v0 = n++; - dl2.v2 = dL; - dl2.v3 = pP; - dl2.cz4(); - f[c++] = dl2.csa(s_dir, dir); - dl2.v0 = n++; - dl2.cz3(); - f[c++] = dl2.csa(s_dir, dir); - - dwwp.v1 = label; - dwwp.v0 = n++; - dwwp.v2 = pL; - dwwp.v3 = dL; - dwwp.cz4(); - f[c++] = dwwp.csa(s_dir, dir); - - dwp.v1 = label; - dwp.v0 = n++; - dwp.v2 = dL; - dwp.v3 = pP; - dwp.v4 = dP; - dwp.v5 = pL; - dwp.cz6(); - f[c++] = dwp.csa(s_dir, dir); - dwp.v0 = n++; - dwp.cz5(); - f[c++] = dwp.csa(s_dir, dir); - - dwp.v0 = n++; - dwp.v2 = pL; - dwp.cz5(); - f[c++] = dwp.csa(s_dir, dir); - dwwp.v0 = n++; - dwwp.v2 = pL; - dwwp.v3 = dL; - dwwp.v4 = dP; - dwwp.cz5(); - f[c++] = dwwp.csa(s_dir, dir); - dwwp.v0 = n++; - dwwp.v4 = pP; - dwwp.cz5(); - f[c++] = dwwp.csa(s_dir, dir); - - // cluster - - d2pw.v1 = label; - d2pw.v0 = n++; - d2pw.v2 = prntLS; - d2pw.v3 = chldLS; - d2pw.cz4(); - f[c++] = d2pw.csa(s_dir, dir); - d2pw.v0 = n++; - d2pw.v4 = pF; - d2pw.cz5(); - f[c++] = d2pw.csa(s_dir, dir); - d2pw.v0 = n++; - d2pw.v4 = dF; - d2pw.cz5(); - f[c++] = d2pw.csa(s_dir, dir); - d2pw.v0 = n++; - d2pw.v5 = pF; - d2pw.cz6(); - f[c++] = d2pw.csa(s_dir, dir); - - d2pp.v1 = label; - d2pp.v0 = n++; - d2pp.v2 = prntLS; - d2pp.v3 = chldLS; - d2pp.cz4(); - f[c++] = d2pp.csa(s_dir, dir); - d2pp.v0 = n++; - d2pp.v4 = pP; - d2pp.cz5(); - f[c++] = d2pp.csa(s_dir, dir); - d2pp.v0 = n++; - d2pp.v4 = dP; - d2pp.cz5(); - f[c++] = d2pp.csa(s_dir, dir); - d2pp.v0 = n++; - d2pp.v5 = pP; - d2pp.cz6(); - f[c++] = d2pp.csa(s_dir, dir); - - // take those in for stacking - // dl2.v1=label; - // dl2.v0= n++;dl2.v2=prel[dpnt];dl2.v3=pP;dl2.v4=dP; - // dl2.v5=prnt==phead[dpnt]?1:2; dl2.cz6(); f[c++]=dl2.csa(s_dir,dir); - // dl2.v0= n++;dl2.v2=pP;dl2.v3=dP; dl2.v4=prnt==phead[dpnt]?1:2; - // dl2.cz5(); f[c++]=dl2.csa(s_dir,dir); - - if (feats == null) - return; - - short[] featsP = feats[prnt], featsD = feats[dpnt]; - dlf.v0 = n++; - dlf.v1 = label; - dlf.v2 = pP; - dlf.v3 = dP; - extractFeat(f, c, dir, featsP, featsD); - - return; - } - - @Override - public void gcm(Instances is, int i, int p, int d, int gc, int label, Cluster cluster, long[] f) { - - for (int k = 0; k < f.length; k++) - f[k] = 0; - - short[] pos = is.pposs[i]; - int[] forms = is.forms[i]; - int[] lemmas = is.plemmas[i]; - short[][] feats = is.feats[i]; - - int pP = pos[p], dP = pos[d]; - int prntF = forms[p], chldF = forms[d]; - int prntL = lemmas[p], chldL = lemmas[d]; - int prntLS = prntF == -1 ? -1 : cluster.getLP(prntF), chldLS = chldF == -1 ? -1 : cluster.getLP(chldF); - - int gP = gc != -1 ? pos[gc] : s_str; - int gcF = gc != -1 ? forms[gc] : s_stwrd; - int gcL = gc != -1 ? lemmas[gc] : s_stwrd; - int gcLS = (gc != -1) && (gcF != -1) ? cluster.getLP(gcF) : s_stwrd; - - if (prntF > maxForm) - prntF = -1; - if (prntL > maxForm) - prntL = -1; - - if (chldF > maxForm) - chldF = -1; - if (chldL > maxForm) - chldL = -1; - - if (gcF > maxForm) - gcF = -1; - if (gcL > maxForm) - gcL = -1; - - int dir = (p < d) ? ra : la, dir_gra = (d < gc) ? ra : la; - - int n = 84, c = 0; - - // dl1.v023(); - dl1.v1 = label; - dl1.v0 = n++; - dl1.v2 = pP; - dl1.v3 = dP; - dl1.v4 = gP; - dl1.cz5(); - dl1.cs(s_dir, dir); - f[c++] = dl1.csa(s_dir, dir_gra); - dl1.v0 = n++; - dl1.v2 = pP; - dl1.v3 = gP; - dl1.cz4(); - dl1.cs(s_dir, dir); - f[c++] = dl1.csa(s_dir, dir_gra); - dl1.v0 = n++; - dl1.v2 = dP; - dl1.cz4(); - dl1.cs(s_dir, dir); - f[c++] = dl1.csa(s_dir, dir_gra); - - dwwp.v1 = label; - dwwp.v0 = n++; - dwwp.v2 = prntF; - dwwp.v3 = gcF; - dwwp.cz4(); - dwwp.cs(s_dir, dir); - f[c++] = dwwp.csa(s_dir, dir_gra); - - dwwp.v0 = n++; - dwwp.v2 = chldF; - dwwp.v3 = gcF; - dwwp.cz4(); - dwwp.cs(s_dir, dir); - f[c++] = dwwp.csa(s_dir, dir_gra); - - dwp.v1 = label; - dwp.v0 = n++; - dwp.v2 = gcF; - dwp.v3 = pP; - dwp.cz4(); - dwp.cs(s_dir, dir); - f[c++] = dwp.csa(s_dir, dir_gra); - - dwp.v0 = n++; - dwp.v2 = gcF; - dwp.v3 = dP; - dwp.cz4(); - dwp.cs(s_dir, dir); - f[c++] = dwp.csa(s_dir, dir_gra); - - dwp.v0 = n++; - dwp.v2 = prntF; - dwp.v3 = gP; - dwp.cz4(); - dwp.cs(s_dir, dir); - f[c++] = dwp.csa(s_dir, dir_gra); - - dwp.v0 = n++; - dwp.v2 = chldF; - dwp.v3 = gP; - dwp.cz4(); - dwp.cs(s_dir, dir); - f[c++] = dwp.csa(s_dir, dir_gra); - - // lemma - - dwwp.v0 = n++; - dwwp.v2 = prntL; - dwwp.v3 = gcL; - dwwp.cz4(); - dwwp.cs(s_dir, dir); - f[c++] = dwwp.csa(s_dir, dir_gra); - - dwwp.v0 = n++; - dwwp.v2 = chldL; - dwwp.v3 = gcL; - dwwp.cz4(); - dwwp.cs(s_dir, dir); - f[c++] = dwwp.csa(s_dir, dir_gra); - - dwp.v0 = n++; - dwp.v2 = gcL; - dwp.v3 = pP; - dwp.cz4(); - dwp.cs(s_dir, dir); - f[c++] = dwp.csa(s_dir, dir_gra); - - dwp.v0 = n++; - dwp.v2 = gcL; - dwp.v3 = dP; - dwp.cz4(); - dwp.cs(s_dir, dir); - f[c++] = dwp.csa(s_dir, dir_gra); - - dwp.v0 = n++; - dwp.v2 = prntL; - dwp.v3 = gP; - dwp.cz4(); - dwp.cs(s_dir, dir); - f[c++] = dwp.csa(s_dir, dir_gra); - - dwp.v0 = n++; - dwp.v2 = chldL; - dwp.v3 = gP; - dwp.cz4(); - dwp.cs(s_dir, dir); - f[c++] = dwp.csa(s_dir, dir_gra); - - // clusters - - d2lp.v1 = label; - d2lp.v0 = n++; - d2lp.v2 = prntLS; - d2lp.v3 = gcLS; - d2lp.cz4(); - d2lp.cs(s_dir, dir); - f[c++] = d2lp.csa(s_dir, dir_gra);// f.add(li.l2i(l)); - d2lp.v0 = n++; - d2lp.v2 = chldLS; - d2lp.v3 = gcLS; - d2lp.cz4(); - d2lp.cs(s_dir, dir); - f[c++] = d2lp.csa(s_dir, dir_gra); - d3lp.v0 = n++; - d3lp.v1 = label; - d3lp.v2 = prntLS; - d3lp.v3 = chldLS; - d3lp.v4 = gcLS; - d3lp.cz5(); - d3lp.cs(s_dir, dir); - f[c++] = d3lp.csa(s_dir, dir_gra); - - // _f83; - d2lp.v0 = n++; - d2lp.v2 = prntLS; - d2lp.v3 = chldLS; - d2lp.v4 = gcF; - d2lp.cz5(); - f[c++] = d2lp.csa(s_dir, dir); - d2lp.v0 = n++; - d2lp.v2 = prntLS; - d2lp.v3 = gcLS; - d2lp.v4 = chldF; - d2lp.cz5(); - f[c++] = d2lp.csa(s_dir, dir); - d2lp.v0 = n++; - d2lp.v2 = chldLS; - d2lp.v3 = gcLS; - d2lp.v4 = prntF; - d2lp.cz5(); - f[c++] = d2lp.csa(s_dir, dir); - - d2pp.v1 = label; - d2pp.v0 = n++; - d2pp.v2 = prntLS; - d2pp.v3 = chldLS; - d2pp.v4 = gP; - d2pp.cz5(); - f[c++] = d2pp.csa(s_dir, dir); - d2pp.v0 = n++; - d2pp.v2 = prntLS; - d2pp.v3 = gcLS; - d2pp.v4 = dP; - d2pp.cz5(); - f[c++] = d2pp.csa(s_dir, dir); - d2pp.v0 = n++; - d2pp.v2 = chldLS; - d2pp.v3 = gcLS; - d2pp.v4 = pP; - d2pp.cz5(); - f[c++] = d2pp.csa(s_dir, dir); - - // linear features - - int prntPm1 = p != 0 ? pos[p - 1] : s_str; // parent-pos-minus1 - int chldPm1 = d - 1 >= 0 ? pos[d - 1] : s_str; // child-pos-minus1 - int prntPp1 = p != pos.length - 1 ? pos[p + 1] : s_end; - int chldPp1 = d != pos.length - 1 ? pos[d + 1] : s_end; - - int gcPm1 = gc > 0 ? pos[gc - 1] : s_str; - int gcPp1 = gc < pos.length - 1 ? pos[gc + 1] : s_end; - - dl1.v0 = n++; - dl1.v2 = gP; - dl1.v3 = gcPp1; - dl1.v4 = dP; - dl1.cz5(); - f[c++] = dl1.csa(s_dir, dir); - dl1.v0 = n++; - dl1.v2 = gP; - dl1.v3 = gcPm1; - dl1.v4 = dP; - dl1.cz5(); - f[c++] = dl1.csa(s_dir, dir); - dl1.v0 = n++; - dl1.v2 = gP; - dl1.v3 = dP; - dl1.v4 = chldPp1; - dl1.cz5(); - f[c++] = dl1.csa(s_dir, dir); - dl1.v0 = n++; - dl1.v2 = gP; - dl1.v3 = dP; - dl1.v4 = chldPm1; - dl1.cz5(); - f[c++] = dl1.csa(s_dir, dir); - dl1.v0 = n++; - dl1.v2 = gP; - dl1.v3 = gcPp1; - dl1.v4 = chldPm1; - dl1.v5 = dP; - dl1.cz6(); - f[c++] = dl1.csa(s_dir, dir); - dl1.v0 = n++; - dl1.v2 = gcPm1; - dl1.v3 = gP; - dl1.v4 = chldPm1; - dl1.v5 = dP; - dl1.cz6(); - f[c++] = dl1.csa(s_dir, dir); - dl1.v0 = n++; - dl1.v2 = gP; - dl1.v3 = gcPp1; - dl1.v4 = dP; - dl1.v5 = chldPp1; - dl1.cz6(); - f[c++] = dl1.csa(s_dir, dir); - dl1.v0 = n++; - dl1.v2 = gcPm1; - dl1.v3 = gP; - dl1.v4 = dP; - dl1.cz6(); - f[c++] = dl1.csa(s_dir, dir); - dl1.v0 = n++; - dl1.v2 = gP; - dl1.v3 = gcPp1; - dl1.v4 = pP; - dl1.cz5(); - f[c++] = dl1.csa(s_dir, dir); - dl1.v0 = n++; - dl1.v2 = gP; - dl1.v3 = gcPm1; - dl1.v4 = pP; - dl1.cz5(); - f[c++] = dl1.csa(s_dir, dir); - dl1.v0 = n++; - dl1.v2 = gP; - dl1.v3 = pP; - dl1.v4 = prntPp1; - dl1.cz5(); - f[c++] = dl1.csa(s_dir, dir); - dl1.v0 = n++; - dl1.v2 = gP; - dl1.v3 = pP; - dl1.v4 = prntPm1; - dl1.cz5(); - f[c++] = dl1.csa(s_dir, dir); - dl1.v0 = n++; - dl1.v2 = gP; - dl1.v3 = gcPp1; - dl1.v4 = prntPm1; - dl1.v5 = pP; - dl1.cz6(); - f[c++] = dl1.csa(s_dir, dir); - dl1.v0 = n++; - dl1.v2 = gcPm1; - dl1.v3 = gP; - dl1.v4 = prntPm1; - dl1.v5 = pP; - dl1.cz6(); - f[c++] = dl1.csa(s_dir, dir); - dl1.v0 = n++; - dl1.v2 = gP; - dl1.v3 = gcPp1; - dl1.v4 = pP; - dl1.v5 = prntPp1; - dl1.cz6(); - f[c++] = dl1.csa(s_dir, dir); - dl1.v0 = n++; - dl1.v2 = gcPm1; - dl1.v3 = gP; - dl1.v4 = pP; - dl1.v5 = prntPp1; - dl1.cz6(); - f[c++] = dl1.csa(s_dir, dir); - - int pLSp1 = p != pos.length - 1 ? forms[p + 1] == -1 ? -1 : cluster.getLP(forms[p + 1]) : _cend; - int cLSp1 = d != pos.length - 1 ? forms[d + 1] == -1 ? -1 : cluster.getLP(forms[d + 1]) : _cend; - int gcLSp1 = gc < pos.length - 1 ? forms[gc + 1] == -1 ? -1 : cluster.getLP(forms[gc + 1]) : s_end; - - int pLSm1 = p != 0 ? lemmas[p - 1] == -1 ? -1 : cluster.getLP(lemmas[p - 1]) : _cstr; - int cLSm1 = d - 1 >= 0 ? lemmas[d - 1] == -1 ? -1 : cluster.getLP(lemmas[d - 1]) : _cstr; - int gcLSm1 = gc > 0 ? lemmas[gc - 1] == -1 ? -1 : cluster.getLP(lemmas[gc - 1]) : _cstr; - - dl1.v0 = n++; - dl1.v2 = gP; - dl1.v3 = gcLSp1; - dl1.v4 = dP; - dl1.cz5(); - f[c++] = dl1.csa(s_dir, dir); - dl1.v0 = n++; - dl1.v2 = gP; - dl1.v3 = gcLSm1; - dl1.v4 = dP; - dl1.cz5(); - f[c++] = dl1.csa(s_dir, dir); - dl1.v0 = n++; - dl1.v2 = gP; - dl1.v3 = dP; - dl1.v4 = cLSp1; - dl1.cz5(); - f[c++] = dl1.csa(s_dir, dir); - dl1.v0 = n++; - dl1.v2 = gP; - dl1.v3 = dP; - dl1.v4 = cLSm1; - dl1.cz5(); - f[c++] = dl1.csa(s_dir, dir); - dl1.v0 = n++; - dl1.v2 = gP; - dl1.v3 = gcLSp1; - dl1.v4 = cLSm1; - dl1.v5 = dP; - dl1.cz6(); - f[c++] = dl1.csa(s_dir, dir); - dl1.v0 = n++; - dl1.v2 = gcLSm1; - dl1.v3 = gP; - dl1.v4 = cLSm1; - dl1.v5 = dP; - dl1.cz6(); - f[c++] = dl1.csa(s_dir, dir); - dl1.v0 = n++; - dl1.v2 = gP; - dl1.v3 = gcLSp1; - dl1.v4 = dP; - dl1.v5 = cLSp1; - dl1.cz6(); - f[c++] = dl1.csa(s_dir, dir); - dl1.v0 = n++; - dl1.v2 = cLSm1; - dl1.v3 = gP; - dl1.v4 = dP; - dl1.cz6(); - f[c++] = dl1.csa(s_dir, dir); - dl1.v0 = n++; - dl1.v2 = gP; - dl1.v3 = gcLSp1; - dl1.v4 = pP; - dl1.cz5(); - f[c++] = dl1.csa(s_dir, dir); - dl1.v0 = n++; - dl1.v2 = gP; - dl1.v3 = gcLSm1; - dl1.v4 = pP; - dl1.cz5(); - f[c++] = dl1.csa(s_dir, dir); - dl1.v0 = n++; - dl1.v2 = gP; - dl1.v3 = pP; - dl1.v4 = pLSp1; - dl1.cz5(); - f[c++] = dl1.csa(s_dir, dir); - dl1.v0 = n++; - dl1.v2 = gP; - dl1.v3 = pP; - dl1.v4 = pLSm1; - dl1.cz5(); - f[c++] = dl1.csa(s_dir, dir); - dl1.v0 = n++; - dl1.v2 = gP; - dl1.v3 = gcLSp1; - dl1.v4 = pLSm1; - dl1.v5 = pP; - dl1.cz6(); - f[c++] = dl1.csa(s_dir, dir); - dl1.v0 = n++; - dl1.v2 = gcLSm1; - dl1.v3 = gP; - dl1.v4 = pLSm1; - dl1.v5 = pP; - dl1.cz6(); - f[c++] = dl1.csa(s_dir, dir); - dl1.v0 = n++; - dl1.v2 = gP; - dl1.v3 = gcLSp1; - dl1.v4 = pP; - dl1.v5 = pLSp1; - dl1.cz6(); - f[c++] = dl1.csa(s_dir, dir); - dl1.v0 = n++; - dl1.v2 = gcLSm1; - dl1.v3 = gP; - dl1.v4 = pP; - dl1.v5 = pLSp1; - dl1.cz6(); - f[c++] = dl1.csa(s_dir, dir); - - if (gc >= 0) { - } - - // take those in for stacking - /* - * dl2.v1=label; dl2.v0= - * n++;dl2.v2=prel[d];dl2.v3=g;dl2.v4=gP;dl2.v5=dP;dl2.cz6();f[c++]=dl2. - * csa(s_dir,dir); dl2.v0= - * n++;dl2.v2=prel[d];dl2.v3=g;dl2.v4=gP;dl2.v5=pP;dl2.cz6();f[c++]=dl2. - * csa(s_dir,dir); dl2.v0= - * n++;dl2.v2=prel[d];dl2.v3=g;dl2.v4=gP;dl2.v5=pP;dl2.v6=dP;dl2.cz7();f - * [c++]=dl2.csa(s_dir,dir); - * - * dl2.v0= - * n++;dl2.v2=gr;dl2.v3=g;dl2.v4=gP;dl2.v5=dP;dl2.cz6();f[c++]=dl2.csa( - * s_dir,dir); dl2.v0= - * n++;dl2.v2=gr;dl2.v3=g;dl2.v4=gP;dl2.v5=pP;dl2.cz6();f[c++]=dl2.csa( - * s_dir,dir); dl2.v0= - * n++;dl2.v2=gr;dl2.v3=g;dl2.v4=gP;dl2.v5=pP;dl2.v6=dP;dl2.cz7();f[c++] - * =dl2.csa(s_dir,dir); - * - */ - if (feats == null) - return; - - short[] featsP = feats[d]; - short[] featsD = gc != -1 ? feats[gc] : null; - - dlf.v0 = n++; - dlf.v1 = label; - dlf.v2 = gP; - dlf.v3 = dP; - extractFeat(f, c, dir, featsP, featsD); - return; - } - - @Override - public void siblingm(Instances is, int i, short pos[], int forms[], int[] lemmas, short[][] feats, int prnt, int d, - int sblng, int label, Cluster cluster, long[] f, int v) { - - for (int k = 0; k < f.length; k++) - f[k] = 0; - - int pP = pos[prnt], dP = pos[d]; - int prntF = forms[prnt], chldF = forms[d]; - int prntL = lemmas[prnt], chldL = lemmas[d]; - int prntLS = prntF == -1 ? -1 : cluster.getLP(prntF), chldLS = chldF == -1 ? -1 : cluster.getLP(chldF); - - int sP = sblng != -1 ? pos[sblng] : s_str, sblF = sblng != -1 ? forms[sblng] : s_stwrd, - sblL = sblng != -1 ? lemmas[sblng] : s_stwrd; - - int sblLS = (sblng != -1) && (sblF != -1) ? cluster.getLP(sblF) : s_stwrd; - - int dir = (prnt < d) ? ra : la; - - int abs = Math.abs(prnt - d); - - final int dist; - if (abs > 10) - dist = d10; - else if (abs > 5) - dist = d5; - else if (abs == 5) - dist = d4; - else if (abs == 4) - dist = d3; - else if (abs == 3) - dist = d2; - else if (abs == 2) - dist = d1; - else - dist = di0; - - int n = 147; - - if (prntF > maxForm) - prntF = -1; - if (prntL > maxForm) - prntL = -1; - - if (chldF > maxForm) - chldF = -1; - if (chldL > maxForm) - chldL = -1; - - if (sblF > maxForm) - sblF = -1; - if (sblL > maxForm) - sblL = -1; - - dl1.v0 = n++; - dl1.v1 = label; - dl1.v2 = pP; - dl1.v3 = dP; - dl1.v4 = sP; - dl1.cz5(); - f[0] = dl1.csa(s_dir, dir); - f[1] = dl1.csa(s_dist, dist); - dl1.v0 = n++; - dl1.v3 = sP; - dl1.cz4(); - f[2] = dl1.csa(s_dir, dir); - f[3] = dl1.csa(s_dist, dist); - dl1.v0 = n++; - dl1.v2 = dP; - dl1.cz4(); - f[4] = dl1.csa(s_dir, dir); - f[5] = dl1.csa(s_dist, dist); - - // sibling only could be tried - dwwp.v1 = label; - dwwp.v0 = n++; - dwwp.v2 = prntF; - dwwp.v3 = sblF; - dwwp.cz4(); - f[6] = dwwp.csa(s_dir, dir); - f[7] = dwwp.csa(s_dist, dist); - dwwp.v0 = n++; - dwwp.v2 = chldF; - dwwp.cz4(); - f[8] = dwwp.csa(s_dir, dir); - f[9] = dwwp.csa(s_dist, dist); - dwp.v0 = n++; - dwp.v1 = label; - dwp.v2 = sblF; - dwp.v3 = pP; - dwp.cz4(); - f[10] = dwp.csa(s_dir, dir); - f[11] = dwp.csa(s_dist, dist); - dwp.v0 = n++; - /* dwp.v1=label; */dwp.v3 = dP; - dwp.cz4(); - f[12] = dwp.csa(s_dir, dir); - f[13] = dwp.csa(s_dist, dist); - dwp.v0 = n++; - /* dwp.v1=label; */ dwp.v2 = prntF; - dwp.v3 = sP; - dwp.cz4(); - f[14] = dwp.csa(s_dir, dir); - f[15] = dwp.csa(s_dist, dist); - dwp.v0 = n++; - /* dwp.v1=label; */ dwp.v2 = chldF; - dwp.cz4(); - f[16] = dwp.csa(s_dir, dir); - f[17] = dwp.csa(s_dist, dist); - - // lemmas - dwwp.v0 = n++; - dwwp.v2 = prntL; - dwwp.v3 = sblL; - dwwp.cz4(); - f[18] = dwwp.csa(s_dir, dir); - dwwp.v0 = n++; - dwwp.v2 = chldL; - dwwp.cz4(); - f[19] = dwwp.csa(s_dir, dir); - f[20] = dwwp.csa(s_dist, dist); - dwp.v0 = n++; - /* dwp.v1=label; */ dwp.v2 = sblL; - dwp.v3 = pP; - dwp.cz4(); - f[21] = dwp.csa(s_dir, dir); - f[22] = dwp.csa(s_dist, dist); - dwp.v0 = n++; - /* dwp.v1=label; */ dwp.v3 = dP; - dwp.cz4(); - f[23] = dwp.csa(s_dir, dir); - f[24] = dwp.csa(s_dist, dist); - dwp.v0 = n++; - /* dwp.v1=label; */ dwp.v2 = prntL; - dwp.v3 = sP; - dwp.cz4(); - f[25] = dwp.csa(s_dir, dir); - f[26] = dwp.csa(s_dist, dist); - dwp.v0 = n++; - /* dwp.v1=label; */ dwp.v2 = chldL; - dwp.cz4(); - f[27] = dwp.csa(s_dir, dir); - f[28] = dwp.csa(s_dist, dist); - - // clusters - - d2lp.v1 = label; - d2lp.v0 = n++; - d2lp.v2 = prntLS; - d2lp.v3 = sblLS; - d2lp.cz4(); - f[29] = d2lp.csa(s_dir, dir); - d2lp.v0 = n++; - d2lp.v2 = chldLS; - d2lp.v3 = sblLS; - d2lp.cz4(); - f[30] = d2lp.csa(s_dir, dir); - f[31] = d2lp.csa(s_dist, dist); - - d3lp.v1 = label; - d3lp.v0 = n++; - d3lp.v2 = prntLS; - d3lp.v3 = chldLS; - d3lp.v4 = sblLS; - d3lp.cz5(); - f[32] = d3lp.csa(s_dir, dir); - - d2lp.v0 = n++; - d2lp.v2 = prntLS; - d2lp.v3 = chldLS; - d2lp.v4 = sblF; - d2lp.cz5(); - f[33] = d2lp.csa(s_dir, dir); - f[34] = d2lp.csa(s_dist, dist); - d2lp.v0 = n++; - d2lp.v2 = prntLS; - d2lp.v3 = sblLS; - d2lp.v4 = chldF; - d2lp.cz5(); - f[35] = d2lp.csa(s_dir, dir); - f[36] = d2lp.csa(s_dist, dist); - d2lp.v0 = n++; - d2lp.v2 = chldLS; - d2lp.v3 = sblLS; - d2lp.v4 = prntF; - d2lp.cz5(); - f[37] = d2lp.csa(s_dir, dir); - f[38] = d2lp.csa(s_dist, dist); - - d2pp.v1 = label; - d2pp.v0 = n++; - d2pp.v2 = prntLS; - d2pp.v3 = chldLS; - d2pp.v4 = sP; - d2pp.cz5(); - f[39] = d2pp.csa(s_dir, dir); - f[40] = d2pp.csa(s_dist, dist); - d2pp.v0 = n++; - d2pp.v2 = prntLS; - d2pp.v3 = sblLS; - d2pp.v4 = dP; - d2pp.cz5(); - f[41] = d2pp.csa(s_dir, dir); - f[42] = d2pp.csa(s_dist, dist); - d2pp.v0 = n++; - d2pp.v2 = chldLS; - d2pp.v3 = sblLS; - d2pp.v4 = pP; - d2pp.cz5(); - f[43] = d2pp.csa(s_dir, dir); - f[44] = d2pp.csa(s_dist, dist); - - int prntPm1 = prnt != 0 ? pos[prnt - 1] : s_str; - int chldPm1 = d - 1 >= 0 ? pos[d - 1] : s_str; - int prntPp1 = prnt != pos.length - 1 ? pos[prnt + 1] : s_end; - int chldPp1 = d != pos.length - 1 ? pos[d + 1] : s_end; - - // sibling part of speech minus and plus 1 - int sblPm1 = sblng > 0 ? pos[sblng - 1] : s_str; - int sblPp1 = sblng < pos.length - 1 ? pos[sblng + 1] : s_end; - - dl1.v0 = n++; - dl1.v2 = sP; - dl1.v3 = sblPp1; - dl1.v4 = pP; - dl1.cz5(); - f[45] = dl1.csa(s_dir, dir); - dl1.v0 = n++; - dl1.v2 = sP; - dl1.v3 = sblPm1; - dl1.v4 = pP; - dl1.cz5(); - f[46] = dl1.csa(s_dir, dir);// f.add(li.l2i(l)); - dl1.v0 = n++; - dl1.v2 = sP; - dl1.v3 = pP; - dl1.v4 = prntPp1; - dl1.cz5(); - f[47] = dl1.csa(s_dir, dir);// f.add(li.l2i(l)); - dl1.v0 = n++; - dl1.v2 = sP; - dl1.v3 = pP; - dl1.v4 = prntPm1; - dl1.cz5(); - f[48] = dl1.csa(s_dir, dir);// f.add(li.l2i(l)); - dl1.v0 = n++; - dl1.v2 = sP; - dl1.v3 = sblPp1; - dl1.v4 = prntPm1; - dl1.v5 = pP; - dl1.cz6(); - f[49] = dl1.csa(s_dir, dir); - dl1.v0 = n++; - dl1.v2 = sblPm1; - dl1.v3 = sP; - dl1.v4 = prntPm1; - dl1.v5 = pP; - dl1.cz6(); - f[50] = dl1.csa(s_dir, dir);// f.add(li.l2i(l)); - dl1.v0 = n++; - dl1.v2 = sP; - dl1.v3 = sblPp1; - dl1.v4 = pP; - dl1.v5 = prntPp1; - dl1.cz6(); - f[51] = dl1.csa(s_dir, dir);// f.add(li.l2i(l)); - dl1.v0 = n++; - dl1.v2 = sblPm1; - dl1.v3 = sP; - dl1.v4 = pP; - dl1.v5 = prntPp1; - dl1.cz6(); - f[52] = dl1.csa(s_dir, dir);// f.add(li.l2i(l)); - dl1.v0 = n++; - dl1.v2 = sP; - dl1.v3 = sblPp1; - dl1.v4 = dP; - dl1.cz5(); - f[53] = dl1.csa(s_dir, dir); - dl1.v0 = n++; - dl1.v2 = sP; - dl1.v3 = sblPm1; - dl1.v4 = dP; - dl1.cz5(); - f[54] = dl1.csa(s_dir, dir); - dl1.v0 = n++; - dl1.v2 = sP; - dl1.v3 = dP; - dl1.v4 = chldPp1; - dl1.cz5(); - f[55] = dl1.csa(s_dir, dir); - dl1.v0 = n++; - dl1.v2 = sP; - dl1.v3 = dP; - dl1.v4 = chldPm1; - dl1.cz5(); - f[56] = dl1.csa(s_dir, dir); - dl1.v0 = n++; - dl1.v2 = sP; - dl1.v3 = sblPp1; - dl1.v4 = chldPm1; - dl1.v5 = dP; - dl1.cz6(); - f[57] = dl1.csa(s_dir, dir);// f.add(li.l2i(l)); - dl1.v0 = n++; - dl1.v2 = sblPm1; - dl1.v3 = sP; - dl1.v4 = chldPm1; - dl1.v5 = dP; - dl1.cz6(); - f[58] = dl1.csa(s_dir, dir); - dl1.v0 = n++; - dl1.v2 = sP; - dl1.v3 = sblPp1; - dl1.v4 = dP; - dl1.v5 = chldPp1; - dl1.cz6(); - f[59] = dl1.csa(s_dir, dir);// f.add(li.l2i(l)); - dl1.v0 = n++; - dl1.v2 = sblPm1; - dl1.v3 = sP; - dl1.v4 = dP; - dl1.v5 = chldPp1; - dl1.cz6(); - f[60] = dl1.csa(s_dir, dir); - - int c = 61; - - int pLSp1 = prnt != pos.length - 1 ? forms[prnt + 1] == -1 ? -1 : cluster.getLP(forms[prnt + 1]) : _cend; - int cLSp1 = d != pos.length - 1 ? forms[d + 1] == -1 ? -1 : cluster.getLP(forms[d + 1]) : _cend; - int sLSp1 = sblng < pos.length - 1 ? forms[sblng + 1] == -1 ? -1 : cluster.getLP(forms[sblng + 1]) : _cend; - - int pLSm1 = prnt != 0 ? forms[prnt - 1] == -1 ? -1 : cluster.getLP(forms[prnt - 1]) : _cstr; - int cLSm1 = d - 1 >= 0 ? forms[d - 1] == -1 ? -1 : cluster.getLP(forms[d - 1]) : _cstr; - int sLSm1 = sblng > 0 ? forms[sblng - 1] == -1 ? -1 : cluster.getLP(forms[sblng - 1]) : _cstr; - - // int c=61; - - dl1.v0 = n++; - dl1.v2 = sP; - dl1.v3 = sLSp1; - dl1.v4 = pP; - dl1.cz5(); - f[c++] = dl1.csa(s_dir, dir); - dl1.v0 = n++; - dl1.v2 = sP; - dl1.v3 = sLSm1; - dl1.v4 = pP; - dl1.cz5(); - f[c++] = dl1.csa(s_dir, dir); - dl1.v0 = n++; - dl1.v2 = sP; - dl1.v3 = pP; - dl1.v4 = pLSp1; - dl1.cz5(); - f[c++] = dl1.csa(s_dir, dir); - dl1.v0 = n++; - dl1.v2 = sP; - dl1.v3 = pP; - dl1.v4 = pLSm1; - dl1.cz5(); - f[c++] = dl1.csa(s_dir, dir); - dl1.v0 = n++; - dl1.v2 = sP; - dl1.v3 = sLSp1; - dl1.v4 = pLSm1; - dl1.v5 = pP; - dl1.cz6(); - f[c++] = dl1.csa(s_dir, dir); - dl1.v0 = n++; - dl1.v2 = sLSm1; - dl1.v3 = sP; - dl1.v4 = pLSm1; - dl1.v5 = pP; - dl1.cz6(); - f[c++] = dl1.csa(s_dir, dir); - dl1.v0 = n++; - dl1.v2 = sP; - dl1.v3 = sLSp1; - dl1.v4 = pP; - dl1.v5 = pLSp1; - dl1.cz6(); - f[c++] = dl1.csa(s_dir, dir); - dl1.v0 = n++; - dl1.v2 = sLSm1; - dl1.v3 = sP; - dl1.v4 = pP; - dl1.v5 = pLSp1; - dl1.cz6(); - f[c++] = dl1.csa(s_dir, dir); - dl1.v0 = n++; - dl1.v2 = sP; - dl1.v3 = sLSp1; - dl1.v4 = dP; - dl1.cz5(); - f[c++] = dl1.csa(s_dir, dir); - dl1.v0 = n++; - dl1.v2 = sP; - dl1.v3 = sLSm1; - dl1.v4 = dP; - dl1.cz5(); - f[c++] = dl1.csa(s_dir, dir); - dl1.v0 = n++; - dl1.v2 = sP; - dl1.v3 = dP; - dl1.v4 = cLSp1; - dl1.cz5(); - f[c++] = dl1.csa(s_dir, dir); - dl1.v0 = n++; - dl1.v2 = sP; - dl1.v3 = dP; - dl1.v4 = cLSm1; - dl1.cz5(); - f[c++] = dl1.csa(s_dir, dir); - dl1.v0 = n++; - dl1.v2 = sP; - dl1.v3 = sLSm1; - dl1.v4 = cLSm1; - dl1.v5 = dP; - dl1.cz6(); - f[c++] = dl1.csa(s_dir, dir); - dl1.v0 = n++; - dl1.v2 = sLSm1; - dl1.v3 = sP; - dl1.v4 = cLSm1; - dl1.v5 = dP; - dl1.cz6(); - f[c++] = dl1.csa(s_dir, dir); - dl1.v0 = n++; - dl1.v2 = sP; - dl1.v3 = sLSp1; - dl1.v4 = dP; - dl1.v5 = cLSp1; - dl1.cz6(); - f[c++] = dl1.csa(s_dir, dir); - dl1.v0 = n++; - dl1.v2 = sLSm1; - dl1.v3 = sP; - dl1.v4 = dP; - dl1.v5 = cLSp1; - dl1.cz6(); - f[c++] = dl1.csa(s_dir, dir); - - dl1.v0 = n++; - dl1.v2 = sP; - dl1.v3 = sLSp1; - dl1.v4 = pP; - dl1.cz5(); - f[c++] = dl1.csa(s_dir, dir); - dl1.v0 = n++; - dl1.v2 = sP; - dl1.v3 = sLSm1; - dl1.v4 = pP; - dl1.cz5(); - f[c++] = dl1.csa(s_dir, dir); - dl1.v0 = n++; - dl1.v2 = sP; - dl1.v3 = pP; - dl1.v4 = pLSp1; - dl1.cz5(); - f[c++] = dl1.csa(s_dir, dir); - dl1.v0 = n++; - dl1.v2 = sP; - dl1.v3 = pP; - dl1.v4 = pLSm1; - dl1.cz5(); - f[c++] = dl1.csa(s_dir, dir); - dl1.v0 = n++; - dl1.v2 = sP; - dl1.v3 = sLSp1; - dl1.v4 = pLSm1; - dl1.v5 = pP; - dl1.cz6(); - f[c++] = dl1.csa(s_dir, dir); - dl1.v0 = n++; - dl1.v2 = sLSm1; - dl1.v3 = sP; - dl1.v4 = pLSm1; - dl1.v5 = pP; - dl1.cz6(); - f[c++] = dl1.csa(s_dir, dir); - dl1.v0 = n++; - dl1.v2 = sP; - dl1.v3 = sLSp1; - dl1.v4 = pP; - dl1.v5 = pLSp1; - dl1.cz6(); - f[c++] = dl1.csa(s_dir, dir); - dl1.v0 = n++; - dl1.v2 = sLSm1; - dl1.v3 = sP; - dl1.v4 = pP; - dl1.v5 = pLSp1; - dl1.cz6(); - f[c++] = dl1.csa(s_dir, dir); - dl1.v0 = n++; - dl1.v2 = sP; - dl1.v3 = sLSp1; - dl1.v4 = dP; - dl1.cz5(); - f[c++] = dl1.csa(s_dir, dir); - dl1.v0 = n++; - dl1.v2 = sP; - dl1.v3 = sLSm1; - dl1.v4 = dP; - dl1.cz5(); - f[c++] = dl1.csa(s_dir, dir); - dl1.v0 = n++; - dl1.v2 = sP; - dl1.v3 = dP; - dl1.v4 = cLSp1; - dl1.cz5(); - f[c++] = dl1.csa(s_dir, dir); - dl1.v0 = n++; - dl1.v2 = sP; - dl1.v3 = dP; - dl1.v4 = cLSm1; - dl1.cz5(); - f[c++] = dl1.csa(s_dir, dir); - dl1.v0 = n++; - dl1.v2 = sP; - dl1.v3 = sLSm1; - dl1.v4 = cLSm1; - dl1.v5 = dP; - dl1.cz6(); - f[c++] = dl1.csa(s_dir, dir); - dl1.v0 = n++; - dl1.v2 = sLSm1; - dl1.v3 = sP; - dl1.v4 = cLSm1; - dl1.v5 = dP; - dl1.cz6(); - f[c++] = dl1.csa(s_dir, dir); - dl1.v0 = n++; - dl1.v2 = sP; - dl1.v3 = sLSp1; - dl1.v4 = dP; - dl1.v5 = cLSp1; - dl1.cz6(); - f[c++] = dl1.csa(s_dir, dir); - dl1.v0 = n++; - dl1.v2 = sLSm1; - dl1.v3 = sP; - dl1.v4 = dP; - dl1.v5 = cLSp1; - dl1.cz6(); - f[c++] = dl1.csa(s_dir, dir); - - // take those in for stacking - - /* - * short[] prel = is.plabels[i],phead=is.pheads[i]; - * - * int g = prnt==phead[d]?1:2 ; if (sblng>=0) g += - * prnt==phead[sblng]?4:8; - * - * int gr = sblng==-1?s_relend:prel[sblng]; - * - * - * dl2.v0= - * n++;dl2.v2=prel[d];dl2.v3=g;dl2.v4=sP;dl2.v5=dP;dl2.cz6();f[c++]=dl2. - * csa(s_dir,dir); dl2.v0= - * n++;dl2.v2=prel[d];dl2.v3=g;dl2.v4=sP;dl2.v5=pP;dl2.cz6();f[c++]=dl2. - * csa(s_dir,dir); dl2.v0= - * n++;dl2.v2=prel[d];dl2.v3=g;dl2.v4=sP;dl2.v5=pP;dl2.v6=dP;dl2.cz7();f - * [c++]=dl2.csa(s_dir,dir); - * - * dl2.v0= - * n++;dl2.v2=gr;dl2.v3=g;dl2.v4=sP;dl2.v5=dP;dl2.cz6();f[c++]=dl2.csa( - * s_dir,dir); dl2.v0= - * n++;dl2.v2=gr;dl2.v3=g;dl2.v4=sP;dl2.v5=pP;dl2.cz6();f[c++]=dl2.csa( - * s_dir,dir); dl2.v0= - * n++;dl2.v2=gr;dl2.v3=g;dl2.v4=sP;dl2.v5=pP;dl2.v6=dP;dl2.cz7();f[c++] - * =dl2.csa(s_dir,dir); - */ - - if (feats == null) - return; - - int cnt = c; - - short[] featsP = feats[d]; - short[] featsSbl = sblng != -1 ? feats[sblng] : null; - - dlf.v0 = n++; - dlf.v1 = label; - dlf.v2 = sP; - dlf.v3 = dP; - - cnt = extractFeat(f, cnt, dir, featsP, featsSbl); - - featsP = feats[prnt]; - featsSbl = sblng != -1 ? feats[sblng] : null; - - dlf.v0 = n++; - dlf.v1 = label; - dlf.v2 = pP; - dlf.v3 = sP; - if (featsP != null && featsSbl != null) { - for (short i1 = 0; i1 < featsP.length; i1++) { - for (short i2 = 0; i2 < featsSbl.length; i2++) { - dlf.v4 = featsP[i1]; - dlf.v5 = featsSbl[i2]; - dlf.cz6(); - f[cnt++] = dlf.csa(s_dir, prnt < sblng ? 1 : 2); - } - } - } else if (featsP == null && featsSbl != null) { - - for (short i2 = 0; i2 < featsSbl.length; i2++) { - dlf.v4 = nofeat; - dlf.v5 = featsSbl[i2]; - dlf.cz6(); - f[cnt++] = dlf.csa(s_dir, dir); - } - - } else if (featsP != null && featsSbl == null) { - - for (short i1 = 0; i1 < featsP.length; i1++) { - dlf.v4 = featsP[i1]; - dlf.v5 = nofeat; - dlf.cz6(); - f[cnt++] = dlf.csa(s_dir, dir); - } - } - - return; - } - - private int extractFeat(long[] f, int cnt, int dir, short[] featsP, short[] featsD) { - if (featsP != null && featsD != null) { - for (short i1 = 0; i1 < featsP.length; i1++) { - for (short i2 = 0; i2 < featsD.length; i2++) { - dlf.v4 = featsP[i1]; - dlf.v5 = featsD[i2]; - dlf.cz6(); - f[cnt++] = dlf.csa(s_dir, dir); - } - } - } else if (featsP == null && featsD != null) { - - for (short i2 = 0; i2 < featsD.length; i2++) { - dlf.v4 = nofeat; - dlf.v5 = featsD[i2]; - dlf.cz6(); - f[cnt++] = dlf.csa(s_dir, dir); - - } - } else if (featsP != null && featsD == null) { - - for (short i1 = 0; i1 < featsP.length; i1++) { - dlf.v4 = featsP[i1]; - dlf.v5 = nofeat; - dlf.cz6(); - f[cnt++] = dlf.csa(s_dir, dir); - - } - } - return cnt; - } - - @Override - public FV encodeCat(Instances is, int ic, short pposs[], int forms[], int[] lemmas, short[] heads, short[] types, - short feats[][], Cluster cluster, FV f) { - - long[] svs = new long[250]; - - for (int i = 1; i < heads.length; i++) { - - int n = basic(pposs, forms, heads[i], i, cluster, f); - - firstm(is, ic, heads[i], i, types[i], cluster, svs); - for (long sv : svs) - dl1.map(f, sv); - - int ch, cmi, cmo; - if (heads[i] < i) { - ch = rightmostRight(heads, heads[i], i); - cmi = leftmostLeft(heads, i, heads[i]); - cmo = rightmostRight(heads, i, heads.length); - - } else { - ch = leftmostLeft(heads, heads[i], i); - cmi = rightmostRight(heads, i, heads[i]); - cmo = leftmostLeft(heads, i, 0); - } - - siblingm(is, ic, pposs, forms, lemmas, feats, heads[i], i, ch, types[i], cluster, svs, n); - for (long sv : svs) - dl1.map(f, sv); - - gcm(is, ic, heads[i], i, cmi, types[i], cluster, svs); - for (long sv : svs) - dl1.map(f, sv); - - gcm(is, ic, heads[i], i, cmo, types[i], cluster, svs); - for (long sv : svs) - dl1.map(f, sv); - } - - return f; - } - - @Override - public float encode3(short[] pos, short heads[], short[] types, DataF d2) { - - double v = 0; - for (int i = 1; i < heads.length; i++) { - - int dir = (heads[i] < i) ? 0 : 1; - - v += d2.pl[heads[i]][i]; - v += d2.lab[heads[i]][i][types[i]][dir]; - - boolean left = i < heads[i]; - short[] labels = Edges.get(pos[heads[i]], pos[i], left); - int lid = -1; - for (int k = 0; k < labels.length; k++) - if (types[i] == labels[k]) { - lid = k; - break; - } - - int ch, cmi, cmo; - if (heads[i] < i) { - ch = rightmostRight(heads, heads[i], i); - cmi = leftmostLeft(heads, i, heads[i]); - cmo = rightmostRight(heads, i, heads.length); - - if (ch == -1) - ch = heads[i]; - if (cmi == -1) - cmi = heads[i]; - if (cmo == -1) - cmo = heads[i]; - - } else { - ch = leftmostLeft(heads, heads[i], i); - cmi = rightmostRight(heads, i, heads[i]); - cmo = leftmostLeft(heads, i, 0); - - if (ch == -1) - ch = i; - if (cmi == -1) - cmi = i; - if (cmo == -1) - cmo = i; - } - v += d2.sib[heads[i]][i][ch][dir][lid]; - v += d2.gra[heads[i]][i][cmi][dir][lid]; - v += d2.gra[heads[i]][i][cmo][dir][lid]; - } - return (float) v; - } - - /** - * Provide the scores of the edges - * - * @param pos - * @param heads - * @param types - * @param edgesScores - * @param d2 - * @return - */ - public static float encode3(short[] pos, short heads[], short[] types, float[] edgesScores, DataF d2) { - - double v = 0; - for (int i = 1; i < heads.length; i++) { - - int dir = (heads[i] < i) ? 0 : 1; - - edgesScores[i] = d2.pl[heads[i]][i]; - edgesScores[i] += d2.lab[heads[i]][i][types[i]][dir]; - - boolean left = i < heads[i]; - short[] labels = Edges.get(pos[heads[i]], pos[i], left); - int lid = -1; - for (int k = 0; k < labels.length; k++) - if (types[i] == labels[k]) { - lid = k; - break; - } - - int ch, cmi, cmo; - if (heads[i] < i) { - ch = rightmostRight(heads, heads[i], i); - cmi = leftmostLeft(heads, i, heads[i]); - cmo = rightmostRight(heads, i, heads.length); - - if (ch == -1) - ch = heads[i]; - if (cmi == -1) - cmi = heads[i]; - if (cmo == -1) - cmo = heads[i]; - - } else { - ch = leftmostLeft(heads, heads[i], i); - cmi = rightmostRight(heads, i, heads[i]); - cmo = leftmostLeft(heads, i, 0); - - if (ch == -1) - ch = i; - if (cmi == -1) - cmi = i; - if (cmo == -1) - cmo = i; - } - edgesScores[i] += d2.sib[heads[i]][i][ch][dir][lid]; - edgesScores[i] += d2.gra[heads[i]][i][cmi][dir][lid]; - edgesScores[i] += d2.gra[heads[i]][i][cmo][dir][lid]; - v += edgesScores[i]; - } - return (float) v; - } - - private static int rightmostRight(short[] heads, int head, int max) { - int rightmost = -1; - for (int i = head + 1; i < max; i++) - if (heads[i] == head) - rightmost = i; - - return rightmost; - } - - private static int leftmostLeft(short[] heads, int head, int min) { - int leftmost = -1; - for (int i = head - 1; i > min; i--) - if (heads[i] == head) - leftmost = i; - return leftmost; - } - - public static final String REL = "REL", END = "END", STR = "STR", LA = "LA", RA = "RA"; - - private static int ra, la; - private static int s_str; - private static int s_end, _cend, _cstr, s_stwrd; - - protected static final String TYPE = "TYPE", DIR = "D", FEAT = "F"; - public static final String POS = "POS"; - protected static final String DIST = "DIST", MID = "MID"; - - private static final String _0 = "0", _4 = "4", _3 = "3", _2 = "2", _1 = "1", _5 = "5", _10 = "10"; - - private static int di0, d4, d3, d2, d1, d5, d10; - - private static final String WORD = "WORD", STWRD = "STWRD", STPOS = "STPOS"; - - private static int nofeat; - - private static int maxForm; - - /** - * Initialize the features. - * - * @param maxFeatures - */ - static public void initFeatures() { - - MFB mf = new MFB(); - mf.register(POS, MID); - s_str = mf.register(POS, STR); - s_end = mf.register(POS, END); - - mf.register(REL, END); - - _cstr = mf.register(Cluster.SPATH, STR); - _cend = mf.register(Cluster.SPATH, END); - - mf.register(TYPE, POS); - - s_stwrd = mf.register(WORD, STWRD); - mf.register(POS, STPOS); - - la = mf.register(DIR, LA); - ra = mf.register(DIR, RA); - - // mf.register(TYPE, CHAR); - - mf.register(TYPE, FEAT); - nofeat = mf.register(FEAT, "NOFEAT"); - - for (int k = 0; k < 215; k++) - mf.register(TYPE, "F" + k); - - di0 = mf.register(DIST, _0); - d1 = mf.register(DIST, _1); - d2 = mf.register(DIST, _2); - d3 = mf.register(DIST, _3); - d4 = mf.register(DIST, _4); - d5 = mf.register(DIST, _5); - // d5l=mf.register(DIST, _5l); - d10 = mf.register(DIST, _10); - - } - - /* - * (non-Javadoc) - * - * @see extractors.Extractor#getType() - */ - @Override - public int getType() { - return s_type; - } - - /* - * (non-Javadoc) - * - * @see extractors.Extractor#setMaxForm(java.lang.Integer) - */ - @Override - public void setMaxForm(int max) { - maxForm = max; - } - - /* - * (non-Javadoc) - * - * @see extractors.Extractor#getMaxForm() - */ - @Override - public int getMaxForm() { - return maxForm; - } - -} diff --git a/dependencyParser/mate-tools/src/extractors/ExtractorFactory.java b/dependencyParser/mate-tools/src/extractors/ExtractorFactory.java deleted file mode 100644 index 20827d4..0000000 --- a/dependencyParser/mate-tools/src/extractors/ExtractorFactory.java +++ /dev/null @@ -1,42 +0,0 @@ -/** - * - */ -package extractors; - -import is2.data.Long2IntInterface; - -/** - * @author Dr. Bernd Bohnet, 29.04.2011 - * - * - */ -public class ExtractorFactory { - - public static final int StackedClustered = 4; - public static final int StackedClusteredR2 = 5; - - private int type = -1; - - /** - * @param stackedClusteredR22 - */ - public ExtractorFactory(int t) { - type = t; - } - - /** - * @param stackedClusteredR22 - * @param l2i - * @return - */ - public Extractor getExtractor(Long2IntInterface l2i) { - switch (type) { - case StackedClustered: - return new ExtractorClusterStacked(l2i); - case StackedClusteredR2: - return new ExtractorClusterStackedR2(l2i); - } - return null; - } - -} diff --git a/dependencyParser/mate-tools/src/extractors/ExtractorReranker.java b/dependencyParser/mate-tools/src/extractors/ExtractorReranker.java deleted file mode 100644 index bf068b2..0000000 --- a/dependencyParser/mate-tools/src/extractors/ExtractorReranker.java +++ /dev/null @@ -1,1080 +0,0 @@ -package extractors; - -import java.util.Arrays; - -import is2.data.Cluster; -import is2.data.D4; -import is2.data.Instances; -import is2.data.Long2IntInterface; -import is2.data.MFB; -import is2.data.ParseNBest; -import is2.util.DB; - -final public class ExtractorReranker { - - public static int s_rel, s_word, s_type, s_dir, s_dist, s_feat, s_child, s_spath, s_lpath, s_pos; - public static int d0, d1, d2, d3, d4, d5, d10; - - MFB mf; - - final D4 dl1, dl2, dwr, dr, dwwp, dw, dwp, dlf, d3lp, d2lp, d2pw, d2pp; - - public final Long2IntInterface li; - - public ExtractorReranker(Long2IntInterface li) { - this.li = li; - dl1 = new D4(li); - dl2 = new D4(li); - dwr = new D4(li); - dr = new D4(li); - dwwp = new D4(li); - - dw = new D4(li); - dwp = new D4(li); - - dlf = new D4(li); - d3lp = new D4(li); - d2lp = new D4(li); - d2pw = new D4(li); - d2pp = new D4(li); - - } - - public static void initStat() { - DB.println("init called "); - MFB mf = new MFB(); - s_rel = mf.getFeatureCounter().get(REL).intValue(); - ; - s_pos = mf.getFeatureCounter().get(POS).intValue(); - s_word = mf.getFeatureCounter().get(WORD).intValue(); - s_type = mf.getFeatureCounter().get(TYPE).intValue();// mf.getFeatureBits(); - s_dir = mf.getFeatureCounter().get(DIR); - mf.getValue(DIR, LA); - mf.getValue(DIR, RA); - s_dist = mf.getFeatureCounter().get(DIST);// mf.getFeatureBits(DIST); - s_feat = mf.getFeatureCounter().get(FEAT);// mf.getFeatureBits(Pipe.FEAT); - s_spath = mf.getFeatureCounter().get(Cluster.SPATH) == null ? 0 : mf.getFeatureCounter().get(Cluster.SPATH);// mf.getFeatureBits(Cluster.SPATH); - s_lpath = mf.getFeatureCounter().get(Cluster.LPATH) == null ? 0 : mf.getFeatureCounter().get(Cluster.LPATH);// mf.getFeatureBits(Cluster.LPATH); - } - - public void init() { - mf = new MFB(); - - dl1.a0 = s_type; - dl1.a1 = 3; - dl1.a2 = s_pos; - dl1.a3 = s_pos; - dl1.a4 = s_pos; - dl1.a5 = s_pos; - dl1.a6 = s_pos; - dl1.a7 = s_pos; - dl2.a0 = s_type; - dl2.a1 = 3; - dl2.a2 = s_rel; - dl2.a3 = s_rel; - dl2.a4 = s_rel; - dl2.a5 = s_rel; - dl2.a6 = s_rel; - dl2.a7 = s_rel; - dl2.a8 = s_rel; - dl2.a9 = s_rel; - dwp.a0 = s_type; - dwp.a1 = 3; - dwp.a2 = s_word; - dwp.a3 = s_rel; - dwp.a4 = s_rel; - dwp.a5 = s_rel; - dwp.a6 = s_rel; - dwp.a7 = s_rel; - dwwp.a0 = s_type; - dwwp.a1 = 3; - dwwp.a2 = s_word; - dwwp.a3 = s_word; - dwwp.a4 = s_pos; - dwwp.a5 = s_word; - dwwp.a6 = s_pos; - dwwp.a7 = s_pos; - } - - public static final String REL = "REL", END = "END", STR = "STR", LA = "LA", RA = "RA", FEAT = "F"; - - private static int s_end, s_stwrd, s_relend; - - protected static final String TYPE = "TYPE", DIR = "D"; - public static final String POS = "POS"; - protected static final String DIST = "DIST", MID = "MID"; - - private static final String _0 = "0", _4 = "4", _3 = "3", _2 = "2", _1 = "1", _5 = "5", _10 = "10"; - - private static final String WORD = "WORD", STWRD = "STWRD", STPOS = "STPOS"; - - public static int maxForm; - - final public static int _FC = 60; - - /** - * Initialize the features. - * - * @param maxFeatures - */ - static public void initFeatures() { - - MFB mf = new MFB(); - mf.register(POS, MID); - mf.register(POS, STR); - s_end = mf.register(POS, END); - - s_relend = mf.register(REL, END); - - mf.register(Cluster.SPATH, STR); - mf.register(Cluster.SPATH, END); - - mf.register(TYPE, POS); - - s_stwrd = mf.register(WORD, STWRD); - mf.register(POS, STPOS); - - mf.register(DIR, LA); - mf.register(DIR, RA); - - // mf.register(TYPE, CHAR); - - mf.register(TYPE, FEAT); - mf.register(FEAT, "NOFEAT"); - - for (int k = 0; k < 60; k++) - mf.register(TYPE, "F" + k); - - d0 = mf.register(DIST, _0); - d1 = mf.register(DIST, _1); - d2 = mf.register(DIST, _2); - d3 = mf.register(DIST, _3); - d4 = mf.register(DIST, _4); - d5 = mf.register(DIST, _5); - // d5l=mf.register(DIST, _5l); - d10 = mf.register(DIST, _10); - - } - - /** - * @param is - * @param n - * @param parseNBest - * @param vs - */ - public void extractFeatures3(Instances is, int i, ParseNBest parse, int rank, long[] v) { - - int f = 1, n = 0; - - for (short k = 0; k < is.length(i) - 1; k++) { - - short[] chld = children(parse.heads, k); - - f = 2; - - int fm = is.forms[i][k]; - int hh = k != 0 ? is.pposs[i][parse.heads[k]] : s_end; - int h = is.pposs[i][k]; - int hrel = parse.labels[k]; - int hhrel = k != 0 ? parse.labels[parse.heads[k]] : s_relend; - int hhf = k != 0 ? is.forms[i][parse.heads[k]] : s_stwrd; - - int rlast = chld.length > 0 ? parse.labels[chld[chld.length - 1]] : s_relend; - - int[] rels = new int[chld.length]; - int[] pss = new int[chld.length]; - for (int j = 0; j < chld.length; j++) { - rels[j] = parse.labels[chld[j]]; - pss[j] = is.pposs[i][chld[j]]; - } - - StringBuilder rl = new StringBuilder(chld.length); - StringBuilder psl = new StringBuilder(chld.length); - for (int j = 0; j < chld.length; j++) { - rl.append((char) rels[j]); - psl.append((char) pss[j]); - } - - int rli = mf.register("rli", rl.toString()); - int pli = mf.register("pli", psl.toString()); - - dwwp.v0 = f++; - dwwp.v2 = rli; - dwwp.cz3(); - v[n++] = dwwp.getVal(); - dwwp.v0 = f++; - dwwp.v2 = pli; - dwwp.cz3(); - v[n++] = dwwp.getVal(); - - dwwp.v0 = f++; - dwwp.v2 = rli; - dwwp.v3 = h; - dwwp.cz4(); - v[n++] = dwwp.getVal(); - dwwp.v0 = f++; - dwwp.v2 = pli; - dwwp.v3 = h; - dwwp.cz4(); - v[n++] = dwwp.getVal(); - - dwwp.v0 = f++; - dwwp.v2 = pli; - dwwp.v3 = hh; - dwwp.v4 = h; - dwwp.cz5(); - v[n++] = dwwp.getVal(); - dwwp.v0 = f++; - dwwp.v2 = rli; - dwwp.v3 = hh; - dwwp.v4 = h; - dwwp.cz5(); - v[n++] = dwwp.getVal(); - - dwwp.v0 = f++; - dwwp.v2 = pli; - dwwp.v3 = rli; - dwwp.v4 = h; - dwwp.cz5(); - v[n++] = dwwp.getVal(); - dwwp.v0 = f++; - dwwp.v2 = fm; - dwwp.v3 = rli; - dwwp.v4 = h; - dwwp.cz5(); - v[n++] = dwwp.getVal(); - dwwp.v0 = f++; - dwwp.v2 = pli; - dwwp.v3 = fm; - dwwp.v4 = h; - dwwp.cz5(); - v[n++] = dwwp.getVal(); - - dwwp.v0 = f++; - dwwp.v2 = pli; - dwwp.v3 = rli; - dwwp.v4 = hh; - dwwp.cz5(); - v[n++] = dwwp.getVal(); - dwwp.v0 = f++; - dwwp.v2 = pli; - dwwp.v3 = rli; - dwwp.v4 = hh; - dwwp.v5 = h; - dwwp.cz6(); - v[n++] = dwwp.getVal(); - - dwp.v0 = f++; - dwp.v2 = rli; - dwp.v3 = hrel; - dwp.v4 = hh; - dwp.v5 = h; - dwp.cz6(); - v[n++] = dwp.getVal(); - - Arrays.sort(rels); - Arrays.sort(pss); - - rl = new StringBuilder(chld.length); - psl = new StringBuilder(chld.length); - for (int j = 0; j < chld.length; j++) { - rl.append((char) rels[j]); - psl.append((char) pss[j]); - } - rli = mf.register("rli", rl.toString()); - pli = mf.register("pli", psl.toString()); - - dwwp.v0 = f++; - dwwp.v2 = pli; - dwwp.v3 = rli; - dwwp.v4 = h; - dwwp.cz5(); - v[n++] = dwwp.getVal(); - dwwp.v0 = f++; - dwwp.v2 = fm; - dwwp.v3 = rli; - dwwp.v4 = h; - dwwp.cz5(); - v[n++] = dwwp.getVal(); - dwwp.v0 = f++; - dwwp.v2 = pli; - dwwp.v3 = fm; - dwwp.v4 = h; - dwwp.cz5(); - v[n++] = dwwp.getVal(); - - dwwp.v0 = f++; - dwwp.v2 = rli; - dwwp.v3 = h; - dwwp.cz4(); - v[n++] = dwwp.getVal(); - - dl1.v0 = f++; - dl1.v2 = h; - dl1.v3 = hrel; - dl1.v4 = hhrel; - dl1.v5 = hh; - dl1.v6 = rlast; - dl1.cz6(); - v[n++] = dl1.getVal(); - dwp.v0 = f++; - dwp.v2 = fm; - dwp.v3 = hrel; - dwp.v4 = hh; - dwp.cz5(); - v[n++] = dwp.getVal(); - dwp.v0 = f++; - dwp.v2 = hhf; - dwp.v3 = hrel; - dwp.v4 = hh; - dwp.v5 = h; - dwp.cz6(); - v[n++] = dwp.getVal(); - - dwwp.v0 = f++; - dwwp.v2 = fm; - dwwp.v3 = hhf; - dwwp.v4 = hrel; - dwwp.v5 = hhrel; - dwwp.cz6(); - v[n++] = dwwp.getVal(); - dwwp.v0 = f++; - dwwp.v2 = h; - dwwp.v3 = hhf; - dwwp.v4 = hrel; - dwwp.v5 = hhrel; - dwwp.cz6(); - v[n++] = dwwp.getVal(); - dwwp.v0 = f++; - dwwp.v2 = fm; - dwwp.v3 = hh; - dwwp.v4 = hrel; - dwwp.v5 = hhrel; - dwwp.cz6(); - v[n++] = dwwp.getVal(); - - dwwp.v0 = f++; - dwwp.v2 = fm; - dwwp.v3 = hhf; - dwwp.v4 = h; - dwwp.v5 = hh; - dwwp.cz6(); - v[n++] = dwwp.getVal(); - dwwp.v0 = f++; - dwwp.v2 = h; - dwwp.v3 = hhf; - dwwp.v4 = hrel; - dwwp.v5 = hh; - dwwp.cz6(); - v[n++] = dwwp.getVal(); - dwwp.v0 = f++; - dwwp.v2 = fm; - dwwp.v3 = hh; - dwwp.v4 = h; - dwwp.v5 = hrel; - dwwp.cz6(); - v[n++] = dwwp.getVal(); - - // dl1.v0= f++; dl1.v2=h;dl1.v3=hrel; dl1.v4=hhrel;dl1.v5=hh; - // dl1.v6=hhhrel;dl1.v7=hhh; dl1.v8=rlast; dl1.cz9(); - // v[n++]=dl1.getVal(); - // dl1.v0= f++; dl1.v2=h;dl1.v3=hrel; dl1.v4=hhrel;dl1.v5=hh; - // dl1.v6=hhhrel;dl1.v7=hhh; dl1.v8=rlast; dl1.cz9(); - // v[n++]=dl1.getVal(); - // dl1.v0= f++; dl1.v2=h;dl1.v3=hrel; dl1.v4=dir;dl1.v5=hh; - // dl1.v6=hhh;dl1.v7=rlast; dl1.v8=r1; dl1.cz9(); - // v[n++]=dl1.getVal(); - // dl1.v0= f++; dl1.v2=h;dl1.v3=hh; dl1.v4=hhh;dl1.v5=hrel; - // dl1.cz6(); v[n++]=dl1.getVal(); - - short hp = parse.heads[k]; - short[] hchld = hp == -1 ? new short[0] : children(parse.heads, hp); - - int[] hrels = new int[hchld.length]; - int[] hpss = new int[hchld.length]; - for (int j = 0; j < hchld.length; j++) { - hrels[j] = parse.labels[hchld[j]]; - hpss[j] = is.pposs[i][hchld[j]]; - } - - StringBuilder hrl = new StringBuilder(hchld.length); - StringBuilder hpsl = new StringBuilder(hchld.length); - for (int j = 0; j < hchld.length; j++) { - hrl.append((char) hrels[j]); - hpsl.append((char) hpss[j]); - } - int hrli = mf.register("rli", hrl.toString()); - int hpli = mf.register("pli", hpsl.toString()); - - dwwp.v0 = f++; - dwwp.v2 = hpli; - dwwp.v3 = hrli; - dwwp.cz4(); - v[n++] = dwwp.getVal(); - dwwp.v0 = f++; - dwwp.v2 = fm; - dwwp.v3 = hrli; - dwwp.cz4(); - v[n++] = dwwp.getVal(); - dwwp.v0 = f++; - dwwp.v2 = hpli; - dwwp.v3 = fm; - dwwp.cz4(); - v[n++] = dwwp.getVal(); - - dwwp.v0 = f++; - dwwp.v2 = hpli; - dwwp.v3 = rli; - dwwp.v4 = hrel; - dwwp.v5 = h; - dwwp.cz5(); - v[n++] = dwwp.getVal(); - dwwp.v0 = f++; - dwwp.v2 = pli; - dwwp.v3 = hrli; - dwwp.v4 = hrel; - dwwp.v5 = h; - dwwp.cz5(); - v[n++] = dwwp.getVal(); - dwwp.v0 = f++; - dwwp.v2 = hpli; - dwwp.v3 = hpli; - dwwp.v4 = hrel; - dwwp.v5 = h; - dwwp.cz5(); - v[n++] = dwwp.getVal(); - - } - - v[n] = Integer.MIN_VALUE; - } - - /** - * This works seem works well with n-best n=8 (88.858074) , n=10 - * (88.836884), n=12 (88.858) n=14 (88.913417) n=16 (88.79546) n=20 - * (88.80621) n 50 (88.729364) 1-best: 88.749605 - * - * @param is - * @param i - * @param parse - * @param rank - * @param v - * @param cluster - */ - public void extractFeatures(Instances is, int i, ParseNBest parse, int rank, long[] v, Cluster cluster) { - - // mf.getValue(REL, "SB"); - - int f = 1, n = 0; - - for (short k = 0; k < is.length(i) - 1; k++) { - - short[] chld = children(parse.heads, k); - - int abs = Math.abs(parse.heads[k] - k); - if (abs > 10) { - } else if (abs > 5) { - } else if (abs == 5) { - } else if (abs == 4) { - } else if (abs == 3) { - } else if (abs == 2) { - } else { - } - - f = 2; - - int fm = is.forms[i][k]; - int hh = k != 0 ? is.pposs[i][parse.heads[k]] : s_end; - int h = is.pposs[i][k]; - int hrel = parse.labels[k];// is.labels[i][k]; - int hhrel = k != 0 ? parse.labels[parse.heads[k]] : s_relend; - int hhf = k != 0 ? is.forms[i][parse.heads[k]] : s_stwrd; - - int rlast = chld.length > 0 ? parse.labels[chld[chld.length - 1]] : s_relend; - - int[] rels = new int[chld.length]; - int[] pss = new int[chld.length]; - int[] rc = new int[30]; // 20 was a good length - - for (int j = 0; j < chld.length; j++) { - rels[j] = parse.labels[chld[j]]; - if (rels[j] < rc.length) - rc[rels[j]]++; - pss[j] = is.pposs[i][chld[j]]; - // cls[j] = - // is.forms[i][chld[j]]==-1?0:cluster.getLP(is.forms[i][chld[j]]); - // cls[j] = cls[j]==-1?0:cls[j]; - } - - StringBuilder rl = new StringBuilder(chld.length); - StringBuilder psl = new StringBuilder(chld.length); - new StringBuilder(chld.length); - for (int j = 0; j < chld.length; j++) { - rl.append((char) rels[j]); - psl.append((char) pss[j]); - // csl.append((char)cls[j]); - } - - int rli = mf.register("rli", rl.toString()); - int pli = mf.register("pli", psl.toString()); - // int cli = mf.register("cli", csl.toString()); - - dwwp.v0 = f++; - dwwp.v2 = pli; - dwwp.v3 = rli; - dwwp.v4 = h; - dwwp.cz5(); - v[n++] = dwwp.getVal(); - dwwp.v0 = f++; - dwwp.v2 = fm; - dwwp.v3 = rli; - dwwp.v4 = h; - dwwp.cz5(); - v[n++] = dwwp.getVal(); - dwwp.v0 = f++; - dwwp.v2 = pli; - dwwp.v3 = fm; - dwwp.v4 = h; - dwwp.cz5(); - v[n++] = dwwp.getVal(); - // dwwp.v0=f++; dwwp.v2=cli; dwwp.v3=fm; dwwp.v4=h; dwwp.cz5(); - // v[n++]=dwwp.getVal(); - - dwwp.v0 = f++; - dwwp.v2 = rli; - dwwp.cz3(); - v[n++] = dwwp.getVal(); - dwwp.v0 = f++; - dwwp.v2 = pli; - dwwp.cz3(); - v[n++] = dwwp.getVal(); - // dwwp.v0=f++; dwwp.v2=cli; dwwp.cz3(); v[n++]=dwwp.getVal(); - - // dwwp.v0=f++; dwwp.v2=cli;dwwp.v3=h; dwwp.cz4(); - // v[n++]=dwwp.getVal(); - - for (int j = 1; j < rc.length; j++) { - dwwp.v0 = f++; - dwwp.v2 = rc[j] == 0 ? 1 : rc[j] == 1 ? 2 : 3; - dwwp.v3 = j; - dwwp.cz4(); - v[n++] = dwwp.getVal();// - } - - dwwp.v0 = f++; - dwwp.v2 = rli; - dwwp.v3 = h; - dwwp.cz4(); - v[n++] = dwwp.getVal(); - dwwp.v0 = f++; - dwwp.v2 = pli; - dwwp.v3 = h; - dwwp.cz4(); - v[n++] = dwwp.getVal(); - - dwwp.v0 = f++; - dwwp.v2 = pli; - dwwp.v3 = hh; - dwwp.v4 = h; - dwwp.cz5(); - v[n++] = dwwp.getVal(); - dwwp.v0 = f++; - dwwp.v2 = rli; - dwwp.v3 = hh; - dwwp.v4 = h; - dwwp.cz5(); - v[n++] = dwwp.getVal(); - - dwwp.v0 = f++; - dwwp.v2 = pli; - dwwp.v3 = rli; - dwwp.v4 = hh; - dwwp.cz5(); - v[n++] = dwwp.getVal(); - dwwp.v0 = f++; - dwwp.v2 = pli; - dwwp.v3 = rli; - dwwp.v4 = hh; - dwwp.v5 = h; - dwwp.cz6(); - v[n++] = dwwp.getVal(); - - dwp.v0 = f++; - dwp.v2 = rli; - dwp.v3 = hrel; - dwp.v4 = hh; - dwp.v5 = h; - dwp.cz6(); - v[n++] = dwp.getVal(); - - // dwwp.v0=f++; dwwp.v2=h; dwwp.v3=hh; dwwp.v4=dist; dwwp.cz5(); - // v[n++]=dwwp.getVal(); - - Arrays.sort(rels); - Arrays.sort(pss); - - rl = new StringBuilder(chld.length); - psl = new StringBuilder(chld.length); - for (int j = 0; j < chld.length; j++) { - rl.append((char) rels[j]); - psl.append((char) pss[j]); - } - rli = mf.register("rli", rl.toString()); - pli = mf.register("pli", psl.toString()); - - dwwp.v0 = f++; - dwwp.v2 = pli; - dwwp.v3 = rli; - dwwp.v4 = 1; - dwwp.v5 = h; - dwwp.cz6(); - v[n++] = dwwp.getVal(); - dwwp.v0 = f++; - dwwp.v2 = fm; - dwwp.v3 = rli; - dwwp.v4 = 1; - dwwp.v5 = h; - dwwp.cz6(); - v[n++] = dwwp.getVal(); - dwwp.v0 = f++; - dwwp.v2 = pli; - dwwp.v3 = fm; - dwwp.v4 = 1; - dwwp.v5 = h; - dwwp.cz6(); - v[n++] = dwwp.getVal(); - - dwwp.v0 = f++; - dwwp.v2 = rli; - dwwp.v3 = h; - dwwp.cz4(); - v[n++] = dwwp.getVal(); - - dl1.v0 = f++; - dl1.v2 = h; - dl1.v3 = hrel; - dl1.v4 = hhrel; - dl1.v5 = hh; - dl1.v6 = rlast; - dl1.cz6(); - v[n++] = dl1.getVal(); - dwp.v0 = f++; - dwp.v2 = fm; - dwp.v3 = hrel; - dwp.v4 = hh; - dwp.cz5(); - v[n++] = dwp.getVal(); - dwp.v0 = f++; - dwp.v2 = hhf; - dwp.v3 = hrel; - dwp.v4 = hh; - dwp.v5 = h; - dwp.cz6(); - v[n++] = dwp.getVal(); - } - - v[n] = Integer.MIN_VALUE; - } - - /** - * - * Works well! - * - * @param is - * @param i - * @param parse - * @param rank - * @param v - */ - public void extractFeatures6(Instances is, int i, ParseNBest parse, int rank, long[] v) { - - // mf.getValue(REL, "SB"); - - int f = 1, n = 0; - - for (short k = 0; k < is.length(i) - 1; k++) { - - short[] chld = children(parse.heads, k); - - f = 2; - - int fm = is.forms[i][k]; - int hh = k != 0 ? is.pposs[i][parse.heads[k]] : s_end; - int h = is.pposs[i][k]; - int hrel = parse.labels[k];// is.labels[i][k]; - int hhrel = k != 0 ? parse.labels[parse.heads[k]] : s_relend; - int hhf = k != 0 ? is.forms[i][parse.heads[k]] : s_stwrd; - - int rlast = chld.length > 0 ? parse.labels[chld[chld.length - 1]] : s_relend; - - int[] rels = new int[chld.length]; - int[] pss = new int[chld.length]; - - int[] rc = new int[30]; // 20 was a good length - - for (int j = 0; j < chld.length; j++) { - rels[j] = parse.labels[chld[j]]; - if (rels[j] < rc.length) - rc[rels[j]]++; - // if (rels[j]==sb) numSB++; - pss[j] = is.pposs[i][chld[j]]; - } - - StringBuilder rl = new StringBuilder(chld.length); - StringBuilder psl = new StringBuilder(chld.length); - for (int j = 0; j < chld.length; j++) { - rl.append((char) rels[j]); - psl.append((char) pss[j]); - } - - int rli = mf.register("rli", rl.toString()); - int pli = mf.register("pli", psl.toString()); - - dwwp.v0 = f++; - dwwp.v2 = pli; - dwwp.v3 = rli; - dwwp.v4 = h; - dwwp.cz5(); - v[n++] = dwwp.getVal(); - dwwp.v0 = f++; - dwwp.v2 = fm; - dwwp.v3 = rli; - dwwp.v4 = h; - dwwp.cz5(); - v[n++] = dwwp.getVal(); - dwwp.v0 = f++; - dwwp.v2 = pli; - dwwp.v3 = fm; - dwwp.v4 = h; - dwwp.cz5(); - v[n++] = dwwp.getVal(); - - dwwp.v0 = f++; - dwwp.v2 = rli; - dwwp.cz3(); - v[n++] = dwwp.getVal(); - dwwp.v0 = f++; - dwwp.v2 = pli; - dwwp.cz3(); - v[n++] = dwwp.getVal(); - - for (int j = 1; j < rc.length; j++) { - dwwp.v0 = f++; - dwwp.v2 = rc[j] == 0 ? 1 : rc[j] == 1 ? 2 : 3; - dwwp.v3 = j; - dwwp.cz4(); - v[n++] = dwwp.getVal();// - } - - dwwp.v0 = f++; - dwwp.v2 = rli; - dwwp.v3 = h; - dwwp.cz4(); - v[n++] = dwwp.getVal(); - dwwp.v0 = f++; - dwwp.v2 = pli; - dwwp.v3 = h; - dwwp.cz4(); - v[n++] = dwwp.getVal(); - - dwwp.v0 = f++; - dwwp.v2 = pli; - dwwp.v3 = hh; - dwwp.v4 = h; - dwwp.cz5(); - v[n++] = dwwp.getVal(); - dwwp.v0 = f++; - dwwp.v2 = rli; - dwwp.v3 = hh; - dwwp.v4 = h; - dwwp.cz5(); - v[n++] = dwwp.getVal(); - - dwwp.v0 = f++; - dwwp.v2 = pli; - dwwp.v3 = rli; - dwwp.v4 = hh; - dwwp.cz5(); - v[n++] = dwwp.getVal(); - dwwp.v0 = f++; - dwwp.v2 = pli; - dwwp.v3 = rli; - dwwp.v4 = hh; - dwwp.v5 = h; - dwwp.cz6(); - v[n++] = dwwp.getVal(); - - dwp.v0 = f++; - dwp.v2 = rli; - dwp.v3 = hrel; - dwp.v4 = hh; - dwp.v5 = h; - dwp.cz6(); - v[n++] = dwp.getVal(); - - Arrays.sort(rels); - Arrays.sort(pss); - - rl = new StringBuilder(chld.length); - psl = new StringBuilder(chld.length); - for (int j = 0; j < chld.length; j++) { - rl.append((char) rels[j]); - psl.append((char) pss[j]); - } - rli = mf.register("rli", rl.toString()); - pli = mf.register("pli", psl.toString()); - - dwwp.v0 = f++; - dwwp.v2 = pli; - dwwp.v3 = rli; - dwwp.v4 = 1; - dwwp.v5 = h; - dwwp.cz6(); - v[n++] = dwwp.getVal(); - dwwp.v0 = f++; - dwwp.v2 = fm; - dwwp.v3 = rli; - dwwp.v4 = 1; - dwwp.v5 = h; - dwwp.cz6(); - v[n++] = dwwp.getVal(); - dwwp.v0 = f++; - dwwp.v2 = pli; - dwwp.v3 = fm; - dwwp.v4 = 1; - dwwp.v5 = h; - dwwp.cz6(); - v[n++] = dwwp.getVal(); - - dwwp.v0 = f++; - dwwp.v2 = rli; - dwwp.v3 = h; - dwwp.cz4(); - v[n++] = dwwp.getVal(); - - dl1.v0 = f++; - dl1.v2 = h; - dl1.v3 = hrel; - dl1.v4 = hhrel; - dl1.v5 = hh; - dl1.v6 = rlast; - dl1.cz6(); - v[n++] = dl1.getVal(); - dwp.v0 = f++; - dwp.v2 = fm; - dwp.v3 = hrel; - dwp.v4 = hh; - dwp.cz5(); - v[n++] = dwp.getVal(); - dwp.v0 = f++; - dwp.v2 = hhf; - dwp.v3 = hrel; - dwp.v4 = hh; - dwp.v5 = h; - dwp.cz6(); - v[n++] = dwp.getVal(); - - } - - v[n] = Integer.MIN_VALUE; - } - - public void extractFeatures2(Instances is, int i, ParseNBest parse, int rank, long[] v) { - - int f = 1, n = 0; - - for (short k = 0; k < is.length(i) - 1; k++) { - - short[] chld = children(parse.heads, k); - - f = 2; - - int fm = is.forms[i][k]; - int hh = k != 0 ? is.pposs[i][parse.heads[k]] : s_end; - int h = is.pposs[i][k]; - int hrel = parse.labels[k];// is.labels[i][k]; - int hhrel = k != 0 ? parse.labels[parse.heads[k]] : s_relend; - int hhf = k != 0 ? is.forms[i][parse.heads[k]] : s_stwrd; - - int rlast = chld.length > 0 ? parse.labels[chld[chld.length - 1]] : s_relend; - - int[] rels = new int[chld.length]; - int[] pss = new int[chld.length]; - - for (int j = 0; j < chld.length; j++) { - rels[j] = parse.labels[chld[j]]; - pss[j] = is.pposs[i][chld[j]]; - } - - StringBuilder rl = new StringBuilder(chld.length); - StringBuilder psl = new StringBuilder(chld.length); - for (int j = 0; j < chld.length; j++) { - rl.append((char) rels[j]); - psl.append((char) pss[j]); - } - - int rli = mf.register("rli", rl.toString()); - int pli = mf.register("pli", psl.toString()); - - dwwp.v0 = f++; - dwwp.v2 = pli; - dwwp.v3 = rli; - dwwp.v4 = h; - dwwp.cz5(); - v[n++] = dwwp.getVal(); - dwwp.v0 = f++; - dwwp.v2 = fm; - dwwp.v3 = rli; - dwwp.v4 = h; - dwwp.cz5(); - v[n++] = dwwp.getVal(); - dwwp.v0 = f++; - dwwp.v2 = pli; - dwwp.v3 = fm; - dwwp.v4 = h; - dwwp.cz5(); - v[n++] = dwwp.getVal(); - - dwwp.v0 = f++; - dwwp.v2 = rli; - dwwp.cz3(); - v[n++] = dwwp.getVal(); - dwwp.v0 = f++; - dwwp.v2 = pli; - dwwp.cz3(); - v[n++] = dwwp.getVal(); - - dwwp.v0 = f++; - dwwp.v2 = rli; - dwwp.v3 = h; - dwwp.cz4(); - v[n++] = dwwp.getVal(); - dwwp.v0 = f++; - dwwp.v2 = pli; - dwwp.v3 = h; - dwwp.cz4(); - v[n++] = dwwp.getVal(); - - dwwp.v0 = f++; - dwwp.v2 = pli; - dwwp.v3 = hh; - dwwp.v4 = h; - dwwp.cz5(); - v[n++] = dwwp.getVal(); - dwwp.v0 = f++; - dwwp.v2 = rli; - dwwp.v3 = hh; - dwwp.v4 = h; - dwwp.cz5(); - v[n++] = dwwp.getVal(); - - dwwp.v0 = f++; - dwwp.v2 = pli; - dwwp.v3 = rli; - dwwp.v4 = hh; - dwwp.cz5(); - v[n++] = dwwp.getVal(); - dwwp.v0 = f++; - dwwp.v2 = pli; - dwwp.v3 = rli; - dwwp.v4 = hh; - dwwp.v5 = h; - dwwp.cz6(); - v[n++] = dwwp.getVal(); - - dwp.v0 = f++; - dwp.v2 = rli; - dwp.v3 = hrel; - dwp.v4 = hh; - dwp.v5 = h; - dwp.cz6(); - v[n++] = dwp.getVal(); - - Arrays.sort(rels); - Arrays.sort(pss); - - rl = new StringBuilder(chld.length); - psl = new StringBuilder(chld.length); - for (int j = 0; j < chld.length; j++) { - rl.append((char) rels[j]); - psl.append((char) pss[j]); - } - rli = mf.register("rli", rl.toString()); - pli = mf.register("pli", psl.toString()); - - dwwp.v0 = f++; - dwwp.v2 = pli; - dwwp.v3 = rli; - dwwp.v4 = 1; - dwwp.v5 = h; - dwwp.cz6(); - v[n++] = dwwp.getVal(); - dwwp.v0 = f++; - dwwp.v2 = fm; - dwwp.v3 = rli; - dwwp.v4 = 1; - dwwp.v5 = h; - dwwp.cz6(); - v[n++] = dwwp.getVal(); - dwwp.v0 = f++; - dwwp.v2 = pli; - dwwp.v3 = fm; - dwwp.v4 = 1; - dwwp.v5 = h; - dwwp.cz6(); - v[n++] = dwwp.getVal(); - - dwwp.v0 = f++; - dwwp.v2 = rli; - dwwp.v3 = h; - dwwp.cz4(); - v[n++] = dwwp.getVal(); - - dl1.v0 = f++; - dl1.v2 = h; - dl1.v3 = hrel; - dl1.v4 = hhrel; - dl1.v5 = hh; - dl1.v6 = rlast; - dl1.cz6(); - v[n++] = dl1.getVal(); - dwp.v0 = f++; - dwp.v2 = fm; - dwp.v3 = hrel; - dwp.v4 = hh; - dwp.cz5(); - v[n++] = dwp.getVal(); - dwp.v0 = f++; - dwp.v2 = hhf; - dwp.v3 = hrel; - dwp.v4 = hh; - dwp.v5 = h; - dwp.cz6(); - v[n++] = dwp.getVal(); - - } - - v[n] = Integer.MIN_VALUE; - } - - /** - * @param parse - * @param k - * @return - */ - private short[] children(short[] heads, short h) { - - int c = 0; - for (short head : heads) - if (head == h) - c++; - - short[] clds = new short[c]; - c = 0; - for (int k = 0; k < heads.length; k++) - if (heads[k] == h) - clds[c++] = (short) k; - return clds; - } - -} diff --git a/dependencyParser/mate-tools/src/extractors/ParallelExtract.java b/dependencyParser/mate-tools/src/extractors/ParallelExtract.java deleted file mode 100755 index 5e0ec08..0000000 --- a/dependencyParser/mate-tools/src/extractors/ParallelExtract.java +++ /dev/null @@ -1,193 +0,0 @@ -package extractors; - -import java.util.ArrayList; -import java.util.concurrent.Callable; - -import is2.data.Cluster; -import is2.data.DataF; -import is2.data.Edges; -import is2.data.F2SF; -import is2.data.Instances; -import is2.data.Long2IntInterface; - -/** - * @author Bernd Bohnet, 30.08.2009 - * - * This class implements a parallel feature extractor. - */ -final public class ParallelExtract implements Callable<Object> { - // the data space of the weights for a dependency tree - final DataF d; - - // the data extractor does the actual work - final Extractor extractor; - - private Instances is; - private int i; - - private F2SF para; - - private Cluster cluster; - - private Long2IntInterface li; - - public ParallelExtract(Extractor e, Instances is, int i, DataF d, F2SF para, Cluster cluster, - Long2IntInterface li) { - - this.is = is; - extractor = e; - this.d = d; - this.i = i; - this.para = para; - this.cluster = cluster; - this.li = li; - } - - public static class DSet { - int w1, w2; - } - - @Override - public Object call() { - - try { - - F2SF f = para; - - short[] pos = is.pposs[i]; - int[] forms = is.forms[i]; - int[] lemmas = is.plemmas[i]; - short[][] feats = is.feats[i]; - int length = pos.length; - - long[] svs = new long[250]; - - int type = extractor.getType(); - - while (true) { - - DSet set = get(); - if (set == null) - break; - - int w1 = set.w1; - int w2 = set.w2; - - f.clear(); - int n = extractor.basic(pos, forms, w1, w2, cluster, f); - d.pl[w1][w2] = f.getScoreF(); - - short[] labels = Edges.get(pos[w1], pos[w2], false); - float[][] lab = d.lab[w1][w2]; - - extractor.firstm(is, i, w1, w2, 0, cluster, svs); - - if (labels != null) { - - for (int l = labels.length - 1; l >= 0; l--) { - - short label = labels[l]; - - f.clear(); - for (int k = svs.length - 1; k >= 0; k--) - if (svs[k] > 0) - f.add(li.l2i(svs[k] + label * type)); - lab[label][0] = f.getScoreF(); - } - } - - labels = Edges.get(pos[w1], pos[w2], true); - - if (labels != null) { - - for (int l = labels.length - 1; l >= 0; l--) { - - int label = labels[l]; - f.clear(); - for (int k = svs.length - 1; k >= 0; k--) - if (svs[k] > 0) - f.add(li.l2i(svs[k] + label * type)); - lab[label][1] = f.getScoreF(); - } - } - - int s = w1 < w2 ? w1 : w2; - int e = w1 < w2 ? w2 : w1; - - int sg = w1 < w2 ? w1 : 0; - int eg = w1 < w2 ? length : w1 + 1; - - for (int m = s; m < e; m++) { - for (int dir = 0; dir < 2; dir++) { - labels = Edges.get(pos[w1], pos[w2], dir == 1); - float lab2[] = new float[labels.length]; - - int g = (m == s || e == m) ? -1 : m; - - extractor.siblingm(is, i, pos, forms, lemmas, feats, w1, w2, g, 0, cluster, svs, n); - - for (int l = labels.length - 1; l >= 0; l--) { - - int label = labels[l]; - f.clear(); - - for (int k = svs.length - 1; k >= 0; k--) { - if (svs[k] > 0) - f.add(li.l2i(svs[k] + label * type)); - } - lab2[l] = f.score;// f.getScoreF(); - } - d.sib[w1][w2][m][dir] = lab2; - } - } - - for (int m = sg; m < eg; m++) { - for (int dir = 0; dir < 2; dir++) { - labels = Edges.get(pos[w1], pos[w2], dir == 1); - float[] lab2 = new float[labels.length]; - - int g = (m == s || e == m) ? -1 : m; - - extractor.gcm(is, i, w1, w2, g, 0, cluster, svs); - - for (int l = labels.length - 1; l >= 0; l--) { - - int label = labels[l]; - - f.clear(); - for (int k = svs.length - 1; k >= 0; k--) { - if (svs[k] > 0) - f.add(li.l2i(svs[k] + label * type)); - } - lab2[l] = f.getScoreF(); - } - d.gra[w1][w2][m][dir] = lab2; - } - } - - } - } catch (Exception e) { - e.printStackTrace(); - } - return null; - } - - static ArrayList<DSet> sets = new ArrayList<DSet>(); - - private DSet get() { - - synchronized (sets) { - if (sets.size() == 0) - return null; - return sets.remove(sets.size() - 1); - } - } - - static public void add(int w1, int w2) { - DSet ds = new DSet(); - ds.w1 = w1; - ds.w2 = w2; - sets.add(ds); - } - -} diff --git a/dependencyParser/mate-tools/src/is2/data/Closed.java b/dependencyParser/mate-tools/src/is2/data/Closed.java deleted file mode 100755 index 3e938a8..0000000 --- a/dependencyParser/mate-tools/src/is2/data/Closed.java +++ /dev/null @@ -1,28 +0,0 @@ -package is2.data; - -final public class Closed { - - public double p; - short b, e, m; - byte dir; - - Closed d; - Open u; - - public Closed(short s, short t, int m, int dir, Open u, Closed d, float score) { - this.b = s; - this.e = t; - this.m = (short) m; - this.dir = (byte) dir; - this.u = u; - this.d = d; - p = score; - } - - public void create(Parse parse) { - if (u != null) - u.create(parse); - if (d != null) - d.create(parse); - } -} diff --git a/dependencyParser/mate-tools/src/is2/data/Cluster.java b/dependencyParser/mate-tools/src/is2/data/Cluster.java deleted file mode 100644 index 5cc8427..0000000 --- a/dependencyParser/mate-tools/src/is2/data/Cluster.java +++ /dev/null @@ -1,163 +0,0 @@ -/** - * - */ -package is2.data; - -import java.io.BufferedReader; -import java.io.DataInputStream; -import java.io.DataOutputStream; -import java.io.FileInputStream; -import java.io.IOException; -import java.io.InputStreamReader; - -import is2.util.DB; - -/** - * @author Dr. Bernd Bohnet, 28.10.2010 - * - * - */ -final public class Cluster { - - public static final String LPATH = "LP"; - public static final String SPATH = "SP"; - - // [word][p] p = [0:long-path | 1:short-path] - final private short[][] word2path; - - public Cluster() { - word2path = new short[0][0]; - } - - /** - * @param clusterFile - * @param mf - * - */ - public Cluster(String clusterFile, IEncoderPlus mf, int ls) { - - final String REGEX = "\t"; - - // register words - try { - BufferedReader inputReader = new BufferedReader( - new InputStreamReader(new FileInputStream(clusterFile), "UTF-8"), 32768); - - int cnt = 0; - String line; - while ((line = inputReader.readLine()) != null) { - - cnt++; - try { - String[] split = line.split(REGEX); - mf.register(SPATH, split[0].length() < ls ? split[0] : split[0].substring(0, ls)); - mf.register(LPATH, split[0]); - mf.register(PipeGen.WORD, split[1]); - } catch (Exception e) { - System.out.println("Error in cluster line " + cnt + " error: " + e.getMessage()); - } - } - System.out.println("read number of clusters " + cnt); - inputReader.close(); - - } catch (Exception e) { - e.printStackTrace(); - } - - word2path = new short[mf.getFeatureCounter().get(PipeGen.WORD)][2]; - - // insert words - try { - String line; - BufferedReader inputReader = new BufferedReader( - new InputStreamReader(new FileInputStream(clusterFile), "UTF-8"), 32768); - - while ((line = inputReader.readLine()) != null) { - - String[] split = line.split(REGEX); - int wd = mf.getValue(PipeGen.WORD, split[1]); - word2path[wd][0] = (short) mf.getValue(SPATH, - split[0].length() < ls ? split[0] : split[0].substring(0, ls)); - word2path[wd][1] = (short) mf.getValue(LPATH, split[0]); - } - inputReader.close(); - int fill = 0; - for (short[] element : word2path) { - if (element[0] != 0) - fill++; - } - /* - * for(int l = 0; l<word2path.length; l++ ){ if (word2path[l][1]!=0) - * fillL++; if (word2path[l][1]<-1) - * System.out.println("lower "+word2path[l][1]); } - */ - System.out.println("filled " + fill + " of " + word2path.length); - - } catch (Exception e) { - e.printStackTrace(); - } - } - - /** - * Read the cluster - * - * @param dos - * @throws IOException - */ - public Cluster(DataInputStream dis) throws IOException { - - word2path = new short[dis.readInt()][2]; - for (int i = 0; i < word2path.length; i++) { - word2path[i][0] = dis.readShort(); - word2path[i][1] = dis.readShort(); - } - DB.println("Read cluster with " + word2path.length + " words "); - } - - /** - * Write the cluster - * - * @param dos - * @throws IOException - */ - public void write(DataOutputStream dos) throws IOException { - - dos.writeInt(word2path.length); - for (short[] i : word2path) { - dos.writeShort(i[0]); - dos.writeShort(i[1]); - } - - } - - /** - * @param form - * the id of a word form - * @return the short path to the word form in the cluster - * - * final public int getSP(int form) { if (word2path.length<form) - * return -1; return word2path[form][0]; } - */ - /** - * get the long path to a word form in the cluster - * - * @param form - * the id of a word form - * @return the long path to the word - */ - final public int getLP(int form) { - if (word2path.length <= form || word2path[form].length <= 0) - return -1; - return word2path[form][0] == 0 ? -1 : word2path[form][0]; - } - - final public int getLP(int form, int l) { - if (word2path.length < form) - return -1; - return word2path[form][l] == 0 ? -1 : word2path[form][l]; - } - - final public int size() { - return word2path.length; - } -} diff --git a/dependencyParser/mate-tools/src/is2/data/D4.java b/dependencyParser/mate-tools/src/is2/data/D4.java deleted file mode 100644 index d607668..0000000 --- a/dependencyParser/mate-tools/src/is2/data/D4.java +++ /dev/null @@ -1,252 +0,0 @@ -/** - * - */ -package is2.data; - -/** - * @author Dr. Bernd Bohnet, 30.10.2010 - * - * This class computes the mapping of features to the weight vector. - */ -final public class D4 extends DX { - private long shift; - private long h; - - private final Long2IntInterface _li; - - public D4(Long2IntInterface li) { - _li = li; - } - - @Override - final public void clean() { - v0 = 0; - v1 = 0; - v2 = 0; - v3 = 0; - v4 = 0; - v5 = 0; - v6 = 0; - v7 = 0; - v8 = 0; - shift = 0; - h = 0; - } - - @Override - final public void cz3() { - if (v0 < 0 || v1 < 0 || v2 < 0) { - h = -1; - return; - } - - h = v0 + v1 * (shift = a0) + v2 * (shift *= a1); - shift *= a2; - } - - final public long c3() { - if (v0 < 0 || v1 < 0 || v2 < 0) { - h = -1; - return h; - } - - h = v0 + v1 * (shift = a0) + v2 * (shift *= a1); - shift *= a2; - return h; - } - - @Override - final public void cz4() { - if (v0 < 0 || v1 < 0 || v2 < 0 || v3 < 0) { - h = -1; - return; - } - - h = v0 + v1 * (shift = a0) + v2 * (shift *= a1) + v3 * (shift *= a2); - shift *= a3; - } - - final public long c4() { - if (v0 < 0 || v1 < 0 || v2 < 0 || v3 < 0) { - h = -1; - return h; - } - - h = v0 + v1 * (shift = a0) + v2 * (shift *= a1) + v3 * (shift *= a2); - shift *= a3; - return h; - } - - @Override - final public void cz5() { - - if (v0 < 0 || v1 < 0 || v2 < 0 || v3 < 0 || v4 < 0) { - h = -1; - return; - } - - h = v0 + v1 * (shift = a0) + v2 * (shift *= a1) + v3 * (shift *= a2) + v4 * (shift *= a3); - shift *= a4; - - } - - final public long c5() { - - if (v0 < 0 || v1 < 0 || v2 < 0 || v3 < 0 || v4 < 0) { - h = -1; - return h; - } - - h = v0 + v1 * (shift = a0) + v2 * (shift *= a1) + v3 * (shift *= a2) + v4 * (shift *= a3); - shift *= a4; - return h; - } - - @Override - final public void cz6() { - - if (v0 < 0 || v1 < 0 || v2 < 0 || v3 < 0 || v4 < 0 || v5 < 0) { - h = -1; - return; - } - - h = v0 + v1 * (shift = a0) + v2 * (shift *= a1) + v3 * (shift *= a2); - h += v4 * (shift *= a3) + v5 * (shift *= a4); - shift *= a5; - } - - final public long c6() { - - if (v0 < 0 || v1 < 0 || v2 < 0 || v3 < 0 || v4 < 0 || v5 < 0) { - h = -1; - return h; - } - - h = v0 + v1 * (shift = a0) + v2 * (shift *= a1) + v3 * (shift *= a2); - h += v4 * (shift *= a3) + v5 * (shift *= a4); - shift *= a5; - return h; - } - - @Override - final public long cs(int b, int v) { - if (h < 0) { - h = -1; - return h; - } - - h += v * shift; - shift *= b; - return h; - - } - - @Override - final public void csa(int b, int v, IFV f) { - if (h < 0) { - h = -1; - return; - } - - h += v * shift; - shift *= b; - f.add(_li.l2i(h)); - } - - @Override - final public long csa(int b, int v) { - if (h < 0) { - h = -1; - return -1; - } - - h += v * shift; - shift *= b; - return h; - } - - @Override - public final long getVal() { - return h; - } - - @Override - public final void map(IFV f, long l) { - if (l > 0) - f.add(this._li.l2i(l)); - } - - /** - * @param f - */ - final public void add(IFV f) { - f.add(_li.l2i(h)); - } - - @Override - final public void cz7() { - if (v0 < 0 || v1 < 0 || v2 < 0 || v3 < 0 || v4 < 0 || v5 < 0 || v6 < 0) { - h = -1; - return; - } - - h = v0 + v1 * (shift = a0) + v2 * (shift *= a1) + v3 * (shift *= a2); - h += v4 * (shift *= a3) + v5 * (shift *= a4) + v6 * (shift *= a5); - shift *= a6; - - } - - final public long c7() { - if (v0 < 0 || v1 < 0 || v2 < 0 || v3 < 0 || v4 < 0 || v5 < 0 || v6 < 0) { - h = -1; - return h; - } - - h = v0 + v1 * (shift = a0) + v2 * (shift *= a1) + v3 * (shift *= a2); - h += v4 * (shift *= a3) + v5 * (shift *= a4) + v6 * (shift *= a5); - shift *= a6; - return h; - } - - /** - * - */ - @Override - final public void cz8() { - if (v0 < 0 || v1 < 0 || v2 < 0 || v3 < 0 || v4 < 0 || v5 < 0 || v6 < 0 || v7 < 0) { - h = -1; - return; - } - - h = v0 + v1 * (shift = a0) + v2 * (shift *= a1) + v3 * (shift *= a2); - h += v4 * (shift *= a3) + v5 * (shift *= a4) + v6 * (shift *= a5) + v7 * (shift *= a6); - shift *= a7; - } - - final public void cz9() { - if (v0 < 0 || v1 < 0 || v2 < 0 || v3 < 0 || v4 < 0 || v5 < 0 || v6 < 0 || v7 < 0 || v8 < 0) { - h = -1; - return; - } - - h = v0 + v1 * (shift = a0) + v2 * (shift *= a1) + v3 * (shift *= a2); - h += v4 * (shift *= a3) + v5 * (shift *= a4) + v6 * (shift *= a5) + v7 * (shift *= a6) + v8 * (shift *= a7); - shift *= a8; - } - - /* - * (non-Javadoc) - * - * @see is2.data.DX#computeLabeValue(short, short) - */ - @Override - public int computeLabeValue(int label, int shift) { - return label * shift; - } - - @Override - public void fix() { - - } - -} \ No newline at end of file diff --git a/dependencyParser/mate-tools/src/is2/data/D6.java b/dependencyParser/mate-tools/src/is2/data/D6.java deleted file mode 100644 index 0a17d51..0000000 --- a/dependencyParser/mate-tools/src/is2/data/D6.java +++ /dev/null @@ -1,260 +0,0 @@ -/** - * - */ -package is2.data; - -import is2.util.DB; - -/** - * @author Dr. Bernd Bohnet, 30.10.2010 - * - * This class computes the mapping of features to the weight vector. - */ -final public class D6 extends DX { - private long shift; - private long h; - - private final Long2IntInterface _li; - - public D6(Long2IntInterface li) { - _li = li; - } - - boolean fixed = false; - - @Override - public void fix() { - - if (fixed) { - DB.println("warning: already fixed"); - // return; - } - - long t0 = 1, t1 = a0, t2 = t1 * a1, t3 = t2 * a2, t4 = t3 * a3, t5 = t4 * a4, t6 = t5 * a5, t7 = t6 * a6, - t8 = t7 * a7, t9 = t8 * a8; - - a0 = t0; - a1 = t1; - a2 = t2; - a3 = t3; - a4 = t4; - a5 = t5; - a6 = t6; - a7 = t7; - a8 = t8; - a9 = t9; - - fixed = true; - } - - @Override - final public void clean() { - v0 = 0; - v1 = 0; - v2 = 0; - v3 = 0; - v4 = 0; - v5 = 0; - v6 = 0; - v7 = 0; - v8 = 0; - shift = 0; - h = 0; - } - - @Override - final public void cz3() { - if (v0 < 0 || v1 < 0 || v2 < 0) { - h = -1; - return; - } - - h = v0 + v1 * a1 + v2 * a2; - shift = a3; - } - - final public long c3() { - if (v0 < 0 || v1 < 0 || v2 < 0) { - h = -1; - return h; - } - - h = v0 + v1 * a1 + v2 * a2; - shift = a3; - return h; - } - - @Override - final public void cz4() { - if (v0 < 0 || v1 < 0 || v2 < 0 || v3 < 0) { - h = -1; - return; - } - - h = v0 + v1 * a1 + v2 * a2 + v3 * a3; - shift = a4; - } - - final public long c4() { - if (v0 < 0 || v1 < 0 || v2 < 0 || v3 < 0) { - h = -1; - return h; - } - - h = v0 + v1 * a1 + v2 * a2 + v3 * a3; - shift = a4; - return h; - } - - @Override - final public void cz5() { - - if (v0 < 0 || v1 < 0 || v2 < 0 || v3 < 0 || v4 < 0) { - h = -1; - return; - } - - h = v0 + v1 * a1 + v2 * a2 + v3 * a3 + v4 * a4; - shift = a5; - - } - - final public long c5() { - - if (v0 < 0 || v1 < 0 || v2 < 0 || v3 < 0 || v4 < 0) { - h = -1; - return h; - } - - h = v0 + v1 * a1 + v2 * a2 + v3 * a3 + v4 * a4; - shift = a5; - return h; - } - - @Override - final public void cz6() { - - if (v0 < 0 || v1 < 0 || v2 < 0 || v3 < 0 || v4 < 0 || v5 < 0) { - h = -1; - return; - } - - h = v0 + v1 * a1 + v2 * a2 + v3 * a3 + v4 * a4 + v5 * a5; - shift = a6; - } - - final public long c6() { - - if (v0 < 0 || v1 < 0 || v2 < 0 || v3 < 0 || v4 < 0 || v5 < 0) { - h = -1; - return h; - } - - h = v0 + v1 * a1 + v2 * a2 + v3 * a3 + v4 * a4 + v5 * a5; - shift = a6; - return h; - } - - @Override - final public long cs(int b, int v) { - if (h < 0) { - h = -1; - return h; - } - - h += v * shift; - shift *= b; - return h; - - } - - @Override - final public void csa(int b, int v, IFV f) { - if (h < 0) { - h = -1; - return; - } - - h += v * shift; - shift *= b; - f.add(_li.l2i(h)); - } - - @Override - final public long csa(int b, int v) { - if (h < 0) { - h = -1; - return -1; - } - - h += v * shift; - shift *= b; - return h; - } - - @Override - public final long getVal() { - return h; - } - - @Override - public final void map(IFV f, long l) { - if (l > 0) - f.add(this._li.l2i(l)); - } - - /** - * @param f - */ - final public void add(IFV f) { - f.add(_li.l2i(h)); - } - - @Override - final public void cz7() { - if (v0 < 0 || v1 < 0 || v2 < 0 || v3 < 0 || v4 < 0 || v5 < 0 || v6 < 0) { - h = -1; - return; - } - - h = v0 + v1 * a1 + v2 * a2 + v3 * a3 + v4 * a4 + v5 * a5 + v6 * a6; - shift = a7; - - } - - final public long c7() { - if (v0 < 0 || v1 < 0 || v2 < 0 || v3 < 0 || v4 < 0 || v5 < 0 || v6 < 0) { - h = -1; - return h; - } - - h = v0 + v1 * a1 + v2 * a2 + v3 * a3 + v4 * a4 + v5 * a5 + v6 * a6; - shift = a7; - return h; - } - - /** - * - */ - @Override - final public void cz8() { - if (v0 < 0 || v1 < 0 || v2 < 0 || v3 < 0 || v4 < 0 || v5 < 0 || v6 < 0 || v7 < 0) { - h = -1; - return; - } - - h = v0 + v1 * a1 + v2 * a2 + v3 * a3 + v4 * a4 + v5 * a5 + v6 * a6 + v7 * a7; - shift = a8; - } - - /* - * (non-Javadoc) - * - * @see is2.data.DX#computeLabeValue(short, short) - */ - @Override - public int computeLabeValue(int label, int shift) { - return label * shift; - } - -} \ No newline at end of file diff --git a/dependencyParser/mate-tools/src/is2/data/D7.java b/dependencyParser/mate-tools/src/is2/data/D7.java deleted file mode 100644 index 319c54a..0000000 --- a/dependencyParser/mate-tools/src/is2/data/D7.java +++ /dev/null @@ -1,290 +0,0 @@ -/** - * - */ -package is2.data; - -/** - * @author Dr. Bernd Bohnet, 30.10.2010 - * - * This class computes the mapping of features to the weight vector. - */ -final public class D7 extends DX { - - private long shift; - private long h; - private final Long2IntInterface _li; - - public D7(Long2IntInterface li) { - _li = li; - } - - boolean fixed = false; - - @Override - public void fix() { - - long t0 = 1, t1 = a0, t2 = t1 * a1, t3 = t2 * a2, t4 = t3 * a3, t5 = t4 * a4, t6 = t5 * a5, t7 = t6 * a6, - t8 = t7 * a7, t9 = t8 * a8; - - a0 = t0; - a1 = t1; - a2 = t2; - a3 = t3; - a4 = t4; - a5 = t5; - a6 = t6; - a7 = t7; - a8 = t8; - a9 = t9; - - } - - @Override - final public void clean() { - v0 = 0; - v1 = 0; - v2 = 0; - v3 = 0; - v4 = 0; - v5 = 0; - v6 = 0; - v7 = 0; - v8 = 0; - shift = 0; - h = 0; - } - - @Override - final public void cz3() { - if (v2 < 0) { - h = -1; - return; - } - - h = v0 + v1 * a1 + v2 * a2; - shift = a3; - } - - final public long c3() { - if (v2 < 0) { - h = -1; - return h; - } - - h = v0 + v1 * a1 + v2 * a2; - shift = a3; - return h; - } - - final public long d3() { - if (v2 < 0) - return -1; - return v0 + v2 * a2; - } - - @Override - final public void cz4() { - // if (v0<0||v1<0||v2<0||v3<0) {h=-1;return;} - if (v2 < 0 || v3 < 0) { - h = -1; - return; - } - - h = v0 + v1 * a1 + v2 * a2 + v3 * a3; - shift = a4; - } - - final public long c4() { - if (v2 < 0 || v3 < 0) { - h = -1; - return h; - } - - h = v0 + v1 * a1 + v2 * a2 + v3 * a3; - shift = a4; - return h; - } - - final public long d4() { - if (v2 < 0 || v3 < 0) - return -1; - return v0 + v2 * a2 + v3 * a3; - } - - @Override - final public void cz5() { - - if (v2 < 0 || v3 < 0 || v4 < 0) { - h = -1; - return; - } - - h = v0 + v1 * a1 + v2 * a2 + v3 * a3 + v4 * a4; - shift = a5; - - } - - final public long c5() { - - if (v2 < 0 || v3 < 0 || v4 < 0) { - h = -1; - return h; - } - - h = v0 + v1 * a1 + v2 * a2 + v3 * a3 + v4 * a4; - shift = a5; - return h; - } - - final public long d5() { - if (v2 < 0 || v3 < 0 || v4 < 0) - return -1; - return v0 + v2 * a2 + v3 * a3 + v4 * a4; - } - - @Override - final public void cz6() { - - if (v0 < 0 || v1 < 0 || v2 < 0 || v3 < 0 || v4 < 0 || v5 < 0) { - h = -1; - return; - } - - h = v0 + v1 * a1 + v2 * a2 + v3 * a3 + v4 * a4 + v5 * a5; - shift = a6; - } - - final public long c6() { - - if (v2 < 0 || v3 < 0 || v4 < 0 || v5 < 0) { - h = -1; - return h; - } - - h = v0 + v1 * a1 + v2 * a2 + v3 * a3 + v4 * a4 + v5 * a5; - shift = a6; - return h; - } - - final public long d6() { - if (v2 < 0 || v3 < 0 || v4 < 0 || v5 < 0) - return -1; - return v0 + v2 * a2 + v3 * a3 + v4 * a4 + v5 * a5; - } - - @Override - final public long cs(int b, int v) { - if (h < 0) { - h = -1; - return h; - } - - h += v * shift; - shift *= b; - return h; - - } - - @Override - final public void csa(int b, int v, IFV f) { - if (h < 0) { - h = -1; - return; - } - - h += v * shift; - shift *= b; - f.add(_li.l2i(h)); - } - - @Override - final public long csa(int b, int v) { - if (h < 0) { - h = -1; - return -1; - } - - h += v * shift; - shift *= b; - return h; - } - - @Override - public final long getVal() { - return h; - } - - @Override - public final void map(IFV f, long l) { - if (l > 0) - f.add(this._li.l2i(l)); - } - - /** - * @param f - */ - final public void add(IFV f) { - f.add(_li.l2i(h)); - } - - @Override - final public void cz7() { - if (v0 < 0 || v1 < 0 || v2 < 0 || v3 < 0 || v4 < 0 || v5 < 0 || v6 < 0) { - h = -1; - return; - } - - h = v0 + v1 * a1 + v2 * a2 + v3 * a3 + v4 * a4 + v5 * a5 + v6 * a6; - shift = a7; - - } - - final public long c7() { - if (v2 < 0 || v3 < 0 || v4 < 0 || v5 < 0 || v6 < 0) { - h = -1; - return h; - } - - h = v0 + v1 * a1 + v2 * a2 + v3 * a3 + v4 * a4 + v5 * a5 + v6 * a6; - shift = a7; - return h; - } - - final public long d7() { - if (v2 < 0 || v3 < 0 || v4 < 0 || v5 < 0 || v6 < 0) - return -1; - return v0 + v2 * a2 + v3 * a3 + v4 * a4 + v5 * a5 + v6 * a6; - } - - /** - * - */ - @Override - final public void cz8() { - if (v0 < 0 || v1 < 0 || v2 < 0 || v3 < 0 || v4 < 0 || v5 < 0 || v6 < 0 || v7 < 0) { - h = -1; - return; - } - - h = v0 + v1 * a1 + v2 * a2 + v3 * a3 + v4 * a4 + v5 * a5 + v6 * a6 + v7 * a7; - shift = a8; - } - - final public long d8() { - if (v2 < 0 || v3 < 0 || v4 < 0 || v5 < 0 || v6 < 0 || v7 < 0) { - return -1; - } - return v0 + v2 * a2 + v3 * a3 + v4 * a4 + v5 * a5 + v6 * a6 + v7 * a7; - } - - /* - * (non-Javadoc) - * - * @see is2.data.DX#computeLabeValue(short, short) - */ - @Override - public int computeLabeValue(int label, int shift) { - return label * shift; - } - -} \ No newline at end of file diff --git a/dependencyParser/mate-tools/src/is2/data/DPSTree.java b/dependencyParser/mate-tools/src/is2/data/DPSTree.java deleted file mode 100644 index 085c0c7..0000000 --- a/dependencyParser/mate-tools/src/is2/data/DPSTree.java +++ /dev/null @@ -1,109 +0,0 @@ -/** - * - */ -package is2.data; - -/** - * @author Dr. Bernd Bohnet, 17.01.2011 - * - * Dynamic phrase structure tree. - */ -public class DPSTree { - - private int size = 0; - - public int[] heads; - public int[] labels; - - public DPSTree() { - this(30); - } - - public DPSTree(int initialCapacity) { - heads = new int[initialCapacity]; - labels = new int[initialCapacity]; - } - - /** - * Increases the capacity of this <tt>Graph</tt> instance, if necessary, to - * ensure that it can hold at least the number of nodes specified by the - * minimum capacity argument. - * - * @param minCapacity - * the desired minimum capacity. - */ - private void ensureCapacity(int minCapacity) { - - if (minCapacity > heads.length) { - - int newCapacity = minCapacity + 1; - - if (newCapacity < minCapacity) - newCapacity = minCapacity; - int oldIndex[] = heads; - heads = new int[newCapacity]; - System.arraycopy(oldIndex, 0, heads, 0, oldIndex.length); - - oldIndex = labels; - labels = new int[newCapacity]; - System.arraycopy(oldIndex, 0, labels, 0, oldIndex.length); - - } - } - - final public int size() { - return size; - } - - final public boolean isEmpty() { - return size == 0; - } - - final public void clear() { - size = 0; - } - - final public void createTerminals(int terminals) { - ensureCapacity(terminals + 1); - size = terminals + 1; - } - - final public int create(int phrase) { - - ensureCapacity(size + 1); - labels[size] = phrase; - size++; - return size - 1; - } - - public int create(int phrase, int nodeId) { - - if (nodeId < 0) - return this.create(phrase); - // DB.println("create phrase "+nodeId+" label "+phrase); - ensureCapacity(nodeId + 1); - labels[nodeId] = phrase; - if (size < nodeId) - size = nodeId + 1; - return nodeId; - } - - public void createEdge(int i, int j) { - heads[i] = j; - // DB.println("create edge "+i+"\t "+j); - } - - @Override - public DPSTree clone() { - DPSTree ps = new DPSTree(this.size + 1); - - for (int k = 0; k < size; k++) { - ps.heads[k] = heads[k]; - ps.labels[k] = labels[k]; - } - ps.size = size; - return ps; - - } - -} \ No newline at end of file diff --git a/dependencyParser/mate-tools/src/is2/data/DX.java b/dependencyParser/mate-tools/src/is2/data/DX.java deleted file mode 100644 index 8650038..0000000 --- a/dependencyParser/mate-tools/src/is2/data/DX.java +++ /dev/null @@ -1,56 +0,0 @@ -/** - * - */ -package is2.data; - -/** - * @author Dr. Bernd Bohnet, 30.08.2011 - * - * - */ -public abstract class DX { - - public long a0, a1, a2, a3, a4, a5, a6, a7, a8, a9; - public long v0, v1, v2, v3, v4, v5, v6, v7, v8, v9; - - public abstract void cz3(); - - public abstract void cz4(); - - public abstract void cz5(); - - public abstract void cz6(); - - public abstract void cz7(); - - public abstract void cz8(); - - public abstract void clean(); - - public abstract long cs(int b, int v); - - public abstract long csa(int b, int v); - - public abstract void csa(int b, int v, IFV f); - - /** - * @return - */ - public abstract long getVal(); - - /** - * @param f - * @param l - */ - public abstract void map(IFV f, long l); - - /** - * @param label - * @param s_type - * @return - */ - public abstract int computeLabeValue(int label, int s_type); - - public abstract void fix(); - -} \ No newline at end of file diff --git a/dependencyParser/mate-tools/src/is2/data/DataF.java b/dependencyParser/mate-tools/src/is2/data/DataF.java deleted file mode 100755 index 0ec145f..0000000 --- a/dependencyParser/mate-tools/src/is2/data/DataF.java +++ /dev/null @@ -1,35 +0,0 @@ -package is2.data; - -final public class DataF { - - final public short typesLen; - final public int len; - - // first order features - final public float[][] pl; - - // remove !!!! - // final public float[][] highestLab; - - // final public FV[][][] label; - final public float[][][][] lab; - - public FV fv; - - final public float[][][][][] sib; - - final public float[][][][][] gra; - - public DataF(int length, short types) { - typesLen = types; - len = length; - - pl = new float[length][length]; - lab = new float[length][length][types][2]; - // highestLab = new float[length][length]; - - sib = new float[length][length][length][2][]; - gra = new float[length][length][length][2][]; - - } -} diff --git a/dependencyParser/mate-tools/src/is2/data/DataFES.java b/dependencyParser/mate-tools/src/is2/data/DataFES.java deleted file mode 100644 index 751ddc3..0000000 --- a/dependencyParser/mate-tools/src/is2/data/DataFES.java +++ /dev/null @@ -1,71 +0,0 @@ -package is2.data; - -import java.util.Arrays; - -final public class DataFES { - - final public short typesLen; - final public int len; - - // first order features - final public float[][] pl; - - // remove !!!! - // final public float[][] highestLab; - - // final public FV[][][] label; - final public float[][][] lab; - - public FV fv; - - final public float[][][][] sib; - - final public float[][][][] gra; - - public DataFES(int length, short types) { - typesLen = types; - len = length; - - pl = new float[length][length]; - lab = new float[length][length][types]; - - sib = new float[length][length][length][]; - gra = new float[length][length][length][]; - - } - - public void print2DFloatArray(float[][] a, String name) { - for(int i = 0; i < a.length; ++i) - if(a[i] != null) - for(int j = 0; j < a[i].length; ++j) - System.out.println(name + "[" + i + "][" + j + "] = " + a[i][j]); - } - - public void print3DFloatArray(float[][][] a, String name) { - for(int i = 0; i < a.length; ++i) - if(a[i] != null) - for(int j = 0; j < a[i].length; ++j) - if(a[i][j] != null) - System.out.println(name + "[" + i + "][" + j + "] = " + Arrays.toString(a[i][j])); - } - - public void print4DFloatArray(float[][][][] a, String name) { - for(int i = 0; i < a.length; ++i) - if(a[i] != null) - for(int j = 0; j < a[i].length; ++j) - if(a[i][j] != null) - for(int k = 0; k < a[i][j].length; ++k) - if(a[i][j][k] != null) - System.out.println(name + "[" + i + "][" + j + "][" + k + "] = " + Arrays.toString(a[i][j][k])); - } - - public void print() { - System.out.println("typesLen = " + typesLen); - System.out.println("len = " + len); - print2DFloatArray(pl, "pl"); - print3DFloatArray(lab, "lab"); - System.out.println("fv = a feature vector"); - print4DFloatArray(sib, "sib"); - print4DFloatArray(gra, "gra"); - } -} diff --git a/dependencyParser/mate-tools/src/is2/data/DataT.java b/dependencyParser/mate-tools/src/is2/data/DataT.java deleted file mode 100644 index 2ae816d..0000000 --- a/dependencyParser/mate-tools/src/is2/data/DataT.java +++ /dev/null @@ -1,19 +0,0 @@ -package is2.data; - -final public class DataT { - - final public short typesLen; - final public int len; - - // final public FV[][][] label; - // a b lab op - final public float[][][][] lab; - - public DataT(int length, short types) { - typesLen = types; - len = length; - - lab = new float[length][length][types][4]; - - } -} diff --git a/dependencyParser/mate-tools/src/is2/data/Edges.java b/dependencyParser/mate-tools/src/is2/data/Edges.java deleted file mode 100644 index a14db91..0000000 --- a/dependencyParser/mate-tools/src/is2/data/Edges.java +++ /dev/null @@ -1,216 +0,0 @@ -/** - * - */ -package is2.data; - -import java.io.DataInputStream; -import java.io.DataOutputStream; -import java.io.IOException; -import java.util.Comparator; -import java.util.HashMap; -import java.util.Map.Entry; - -/** - * @author Dr. Bernd Bohnet, 13.05.2009; - * - * - */ -public final class Edges { - - private static short[][][][] edges; - private static HashMap<Short, Integer> labelCount = new HashMap<Short, Integer>(); - - private static HashMap<String, Integer> slabelCount = new HashMap<String, Integer>(); - - static short[] def = new short[1]; - - private Edges() { - } - - /** - * @param length - */ - public static void init(int length) { - edges = new short[length][length][2][]; - } - - public static void findDefault() { - - int best = 0; - - for (Entry<Short, Integer> e : labelCount.entrySet()) { - - if (best < e.getValue()) { - best = e.getValue(); - def[0] = e.getKey(); - } - } - - // labelCount=null; - // String[] types = new String[mf.getFeatureCounter().get(PipeGen.REL)]; - // for (Entry<String, Integer> e : - // MFO.getFeatureSet().get(PipeGen.REL).entrySet()) types[e.getValue()] - // = e.getKey(); - - is2.util.DB.println("set default label to " + def[0] + " "); - - // System.out.println("found default "+def[0]); - - } - - final static public void put(int pos1, int pos2, boolean dir, short label) { - putD(pos1, pos2, dir, label); - // putD(pos2, pos1,!dir, label); - } - - final static public void putD(int pos1, int pos2, boolean dir, short label) { - - Integer lc = labelCount.get(label); - if (lc == null) - labelCount.put(label, 1); - else - labelCount.put(label, lc + 1); - - String key = pos1 + "-" + pos2 + dir + label; - Integer lcs = slabelCount.get(key); - if (lcs == null) - slabelCount.put(key, 1); - else - slabelCount.put(key, lcs + 1); - - if (edges[pos1][pos2][dir ? 0 : 1] == null) { - edges[pos1][pos2][dir ? 0 : 1] = new short[1]; - edges[pos1][pos2][dir ? 0 : 1][0] = label; - - // edgesh[pos1][pos2][dir?0:1] = new TIntHashSet(2); - // edgesh[pos1][pos2][dir?0:1].add(label); - } else { - short labels[] = edges[pos1][pos2][dir ? 0 : 1]; - for (short l : labels) { - // contains label already? - if (l == label) - return; - } - - short[] nlabels = new short[labels.length + 1]; - System.arraycopy(labels, 0, nlabels, 0, labels.length); - nlabels[labels.length] = label; - edges[pos1][pos2][dir ? 0 : 1] = nlabels; - - // edgesh[pos1][pos2][dir?0:1].add(label); - } - } - - final static public short[] get(int pos1, int pos2, boolean dir) { - - if (pos1 < 0 || pos2 < 0 || edges[pos1][pos2][dir ? 0 : 1] == null) - return def; - return edges[pos1][pos2][dir ? 0 : 1]; - } - - /** - * @param dis - */ - static public void write(DataOutputStream d) throws IOException { - - int len = edges.length; - d.writeShort(len); - - for (int p1 = 0; p1 < len; p1++) { - for (int p2 = 0; p2 < len; p2++) { - if (edges[p1][p2][0] == null) - d.writeShort(0); - else { - d.writeShort(edges[p1][p2][0].length); - for (int l = 0; l < edges[p1][p2][0].length; l++) { - d.writeShort(edges[p1][p2][0][l]); - } - - } - - if (edges[p1][p2][1] == null) - d.writeShort(0); - else { - d.writeShort(edges[p1][p2][1].length); - for (int l = 0; l < edges[p1][p2][1].length; l++) { - d.writeShort(edges[p1][p2][1][l]); - } - } - } - } - - d.writeShort(def[0]); - - } - - /** - * @param dis - */ - public static void read(DataInputStream d) throws IOException { - int len = d.readShort(); - - edges = new short[len][len][2][]; - for (int p1 = 0; p1 < len; p1++) { - for (int p2 = 0; p2 < len; p2++) { - int ll = d.readShort(); - if (ll == 0) { - edges[p1][p2][0] = null; - } else { - edges[p1][p2][0] = new short[ll]; - for (int l = 0; l < ll; l++) { - edges[p1][p2][0][l] = d.readShort(); - } - } - - ll = d.readShort(); - if (ll == 0) { - edges[p1][p2][1] = null; - } else { - edges[p1][p2][1] = new short[ll]; - for (int l = 0; l < ll; l++) { - edges[p1][p2][1][l] = d.readShort(); - } - } - } - } - - def[0] = d.readShort(); - - } - - public static class C implements Comparator<Short> { - - public C() { - super(); - } - - String _key; - - public C(String key) { - super(); - _key = key; - } - - /* - * (non-Javadoc) - * - * @see java.util.Comparator#compare(java.lang.Object, java.lang.Object) - */ - @Override - public int compare(Short l1, Short l2) { - - // int c1 = labelCount.get(l1); - // int c2 = labelCount.get(l2); - // if (true) return c1==c2?0:c1>c2?-1:1; - - int x1 = slabelCount.get(_key + l1.shortValue()); - int x2 = slabelCount.get(_key + l2.shortValue()); - // System.out.println(x1+" "+x2); - - return x1 == x2 ? 0 : x1 > x2 ? -1 : 1; - - } - - } - -} diff --git a/dependencyParser/mate-tools/src/is2/data/F2S.java b/dependencyParser/mate-tools/src/is2/data/F2S.java deleted file mode 100755 index 37ee11a..0000000 --- a/dependencyParser/mate-tools/src/is2/data/F2S.java +++ /dev/null @@ -1,54 +0,0 @@ -package is2.data; - -final public class F2S extends IFV { - - private double[] parameters; - - public F2S() { - } - - public double score; - - /** - * @param parameters2 - */ - public F2S(double[] parameters2) { - parameters = parameters2; - } - - @Override - public void add(int i) { - if (i > 0) - score += parameters[i]; - } - - public void setParameters(double[] p) { - parameters = p; - } - - @Override - public void clear() { - score = 0; - } - - /* - * (non-Javadoc) - * - * @see is2.IFV#getScore() - */ - @Override - public double getScore() { - return score; - } - - /* - * (non-Javadoc) - * - * @see is2.IFV#clone() - */ - @Override - public IFV clone() { - return new F2S(parameters); - } - -} diff --git a/dependencyParser/mate-tools/src/is2/data/F2SD.java b/dependencyParser/mate-tools/src/is2/data/F2SD.java deleted file mode 100755 index 2cdd793..0000000 --- a/dependencyParser/mate-tools/src/is2/data/F2SD.java +++ /dev/null @@ -1,44 +0,0 @@ -package is2.data; - -final public class F2SD extends IFV { - - final private double[] parameters; - - public double score = 0; - - public F2SD(double[] p) { - parameters = p; - } - - @Override - public void add(int i) { - if (i > 0) - score += parameters[i]; - } - - @Override - public void clear() { - score = 0; - } - - /* - * (non-Javadoc) - * - * @see is2.IFV#getScore() - */ - @Override - public double getScore() { - return score; - } - - /* - * (non-Javadoc) - * - * @see is2.IFV#clone() - */ - @Override - public IFV clone() { - return new F2SD(parameters); - } - -} diff --git a/dependencyParser/mate-tools/src/is2/data/F2SF.java b/dependencyParser/mate-tools/src/is2/data/F2SF.java deleted file mode 100755 index 394352f..0000000 --- a/dependencyParser/mate-tools/src/is2/data/F2SF.java +++ /dev/null @@ -1,77 +0,0 @@ -package is2.data; - -final public class F2SF extends IFV { - - final private float[] parameters; - - public float score = 0; - - public F2SF(float[] p) { - parameters = p; - } - - @Override - final public void add(int i) { - if (i > 0) - score += parameters[i]; - } - - final public void add(int[] i) { - for (int element : i) { - if (element > 0) - score += parameters[element]; - } - } - - final public void sub(float[] px, int i, Long2IntInterface li) { - - if (i > 0) { - score -= px[li.l2i(i)]; - // score -= px[i]; - // else score -=px[]; - } - } - - @Override - public void clear() { - score = 0; - } - - /* - * (non-Javadoc) - * - * @see is2.IFV#getScore() - */ - @Override - public double getScore() { - return score; - } - - public float getScoreF() { - return score; - } - - /* - * (non-Javadoc) - * - * @see is2.IFV#clone() - */ - @Override - public IFV clone() { - return new F2SF(this.parameters); - } - - /** - * @param l2i - */ - public void addRel(int i, float f) { - if (i > 0) - score += parameters[i] * f; - - } - - public int length() { - return this.parameters.length; - } - -} diff --git a/dependencyParser/mate-tools/src/is2/data/F2SP.java b/dependencyParser/mate-tools/src/is2/data/F2SP.java deleted file mode 100644 index 513fa33..0000000 --- a/dependencyParser/mate-tools/src/is2/data/F2SP.java +++ /dev/null @@ -1,77 +0,0 @@ -package is2.data; - -final public class F2SP extends IFV { - - final private float[] parameters; - - public double score = 0; - - public F2SP(float[] p) { - parameters = p; - } - - @Override - final public void add(int i) { - if (i > 0) - score += parameters[i]; - } - - final public void add(int[] i) { - for (int element : i) { - if (element > 0) - score += parameters[element]; - } - } - - final public void sub(float[] px, int i, Long2IntInterface li) { - - if (i > 0) { - score -= px[li.l2i(i)]; - // score -= px[i]; - // else score -=px[]; - } - } - - @Override - public void clear() { - score = 0; - } - - /* - * (non-Javadoc) - * - * @see is2.IFV#getScore() - */ - @Override - public double getScore() { - return score; - } - - public double getScoreF() { - return score; - } - - /* - * (non-Javadoc) - * - * @see is2.IFV#clone() - */ - @Override - public IFV clone() { - return new F2SP(this.parameters); - } - - /** - * @param l2i - */ - public void addRel(int i, float f) { - if (i > 0) - score += parameters[i] * f; - - } - - public int length() { - return this.parameters.length; - } - -} diff --git a/dependencyParser/mate-tools/src/is2/data/F2ST.java b/dependencyParser/mate-tools/src/is2/data/F2ST.java deleted file mode 100644 index 4c30144..0000000 --- a/dependencyParser/mate-tools/src/is2/data/F2ST.java +++ /dev/null @@ -1,48 +0,0 @@ -package is2.data; - -final public class F2ST extends IFV { - - final private short[] parameters; - - public int score = 0; - - public F2ST(short[] p) { - parameters = p; - } - - @Override - final public void add(int i) { - if (i > 0) - score += parameters[i]; - } - - @Override - public void clear() { - score = 0; - } - - /* - * (non-Javadoc) - * - * @see is2.IFV#getScore() - */ - @Override - public double getScore() { - return score; - } - - public float getScoreF() { - return score; - } - - /* - * (non-Javadoc) - * - * @see is2.IFV#clone() - */ - @Override - public IFV clone() { - return new F2ST(this.parameters); - } - -} diff --git a/dependencyParser/mate-tools/src/is2/data/FV.java b/dependencyParser/mate-tools/src/is2/data/FV.java deleted file mode 100755 index 10c0030..0000000 --- a/dependencyParser/mate-tools/src/is2/data/FV.java +++ /dev/null @@ -1,562 +0,0 @@ -package is2.data; - -import java.io.DataInputStream; -import java.io.DataOutputStream; -import java.io.IOException; - -public final class FV extends IFV { - - private FV subfv1; - private FV subfv2; - private boolean negateSecondSubFV = false; - - private int size; - - // content of the nodes NxC - private int m_index[]; - - // type of the nodes NxT - - public FV() { - this(10); - } - - public FV(int initialCapacity) { - m_index = new int[initialCapacity]; - } - - public FV(FV fv1, FV fv2) { - subfv1 = fv1; - subfv2 = fv2; - } - - public FV(FV fv1, FV fv2, boolean negSecond) { - this(0); - subfv1 = fv1; - subfv2 = fv2; - negateSecondSubFV = negSecond; - } - - /** - * Read a feature vector - * - * @param index - * @param value - */ - public FV(DataInputStream dos, int capacity) throws IOException { - this(capacity); - size = m_index.length; - - for (int i = 0; i < size; i++) - m_index[i] = dos.readInt(); - } - - /** - * Read a feature vector - * - * @param index - * @param value - */ - public FV(DataInputStream dos) throws IOException { - this(dos.readInt()); - size = m_index.length; - - for (int i = 0; i < size; i++) - m_index[i] = dos.readInt(); - - } - - /** - * Increases the capacity of this <tt>Graph</tt> instance, if necessary, to - * ensure that it can hold at least the number of nodes specified by the - * minimum capacity argument. - * - * @param minCapacity - * the desired minimum capacity. - */ - private void ensureCapacity(int minCapacity) { - - if (minCapacity > m_index.length) { - - int oldIndex[] = m_index; - - int newCapacity = (m_index.length * 3) / 2 + 1; - - if (newCapacity < minCapacity) - newCapacity = minCapacity; - - m_index = new int[newCapacity]; - System.arraycopy(oldIndex, 0, m_index, 0, oldIndex.length); - - } - } - - final public int size() { - return size; - } - - final public boolean isEmpty() { - return size == 0; - } - - @Override - final public void clear() { - size = 0; - } - - final public int createFeature(int i, double v) { - - ensureCapacity(size + 1); - m_index[size] = i; - size++; - return size - 1; - } - - final public int createFeature(int i) { - - ensureCapacity(size + 1); - m_index[size] = i; - size++; - return size - 1; - } - - final public int getIndex(int i) { - return m_index[i]; - } - - public void setIndex(int p, int i) { - m_index[p] = i; - } - - /** - * Trims the capacity of this <tt>Graph</tt> instance to true size. An - * application can use this operation to minimize the storage of an - * <tt>Graph</tt> instance. - */ - public void trimToSize() { - - if (size < m_index.length) { - - int oldIndex[] = m_index; - - m_index = new int[size]; - System.arraycopy(oldIndex, 0, m_index, 0, size); - - } - - } - - @Override - final public void add(int i) { - if (i >= 0) { - ensureCapacity(size + 1); - m_index[size] = i; - size++; - } - } - - final public void add(int[] i) { - - for (int element : i) - add(element); - - } - - final public void put(int i, double f) { - if (i >= 0) - createFeature(i, f); - } - - // fv1 - fv2 - public FV getDistVector(FV fl2) { - return new FV(this, fl2, true); - } - - public double getScore(double[] parameters, boolean negate) { - double score = 0.0; - - if (null != subfv1) { - score += subfv1.getScore(parameters, negate); - - if (null != subfv2) { - if (negate) - score += subfv2.getScore(parameters, !negateSecondSubFV); - else - score += subfv2.getScore(parameters, negateSecondSubFV); - - } - } - - if (negate) - for (int i = 0; i < size; i++) - score -= parameters[m_index[i]]; - else - for (int i = 0; i < size; i++) - score += parameters[m_index[i]]; - - return score; - } - - final public float getScore(float[] parameters, boolean negate) { - float score = 0.0F; - - if (null != subfv1) { - score += subfv1.getScore(parameters, negate); - - if (null != subfv2) { - if (negate) - score += subfv2.getScore(parameters, !negateSecondSubFV); - else - score += subfv2.getScore(parameters, negateSecondSubFV); - - } - } - - // warning changed the the value - - if (negate) - for (int i = 0; i < size; i++) - score -= parameters[m_index[i]];// *m_value[i]; - else - for (int i = 0; i < size; i++) - score += parameters[m_index[i]];// *m_value[i]; - - return score; - } - - final public int getScore(short[] parameters, boolean negate) { - int score = 0; - - if (null != subfv1) { - score += subfv1.getScore(parameters, negate); - - if (null != subfv2) { - if (negate) - score += subfv2.getScore(parameters, !negateSecondSubFV); - else - score += subfv2.getScore(parameters, negateSecondSubFV); - - } - } - - // warning changed the value - - if (negate) - for (int i = 0; i < size; i++) - score -= parameters[m_index[i]];// *m_value[i]; - else - for (int i = 0; i < size; i++) - score += parameters[m_index[i]];// *m_value[i]; - - return score; - } - - public void update(double[] parameters, double[] total, double alpha_k, double upd) { - update(parameters, total, alpha_k, upd, false); - } - - public final void update(double[] parameters, double[] total, double alpha_k, double upd, boolean negate) { - - if (null != subfv1) { - subfv1.update(parameters, total, alpha_k, upd, negate); - - if (null != subfv2) { - if (negate) - subfv2.update(parameters, total, alpha_k, upd, !negateSecondSubFV); - else - subfv2.update(parameters, total, alpha_k, upd, negateSecondSubFV); - } - } - - if (negate) { - for (int i = 0; i < size; i++) { - parameters[m_index[i]] -= alpha_k;// *getValue(i); - total[m_index[i]] -= upd * alpha_k;// *getValue(i); - } - } else { - for (int i = 0; i < size; i++) { - parameters[m_index[i]] += alpha_k;// *getValue(i); - total[m_index[i]] += upd * alpha_k;// *getValue(i); - } - } - - } - - public final void update(short[] parameters, short[] total, double alpha_k, double upd, boolean negate) { - - if (null != subfv1) { - subfv1.update(parameters, total, alpha_k, upd, negate); - - if (null != subfv2) { - if (negate) - subfv2.update(parameters, total, alpha_k, upd, !negateSecondSubFV); - else - subfv2.update(parameters, total, alpha_k, upd, negateSecondSubFV); - } - } - - if (negate) { - for (int i = 0; i < size; i++) { - parameters[m_index[i]] -= alpha_k;// *getValue(i); - total[m_index[i]] -= upd * alpha_k;// *getValue(i); - } - } else { - for (int i = 0; i < size; i++) { - parameters[m_index[i]] += alpha_k;// *getValue(i); - total[m_index[i]] += upd * alpha_k;// *getValue(i); - } - } - - } - - public final void update(float[] parameters, float[] total, double alpha_k, double upd, boolean negate) { - - if (null != subfv1) { - subfv1.update(parameters, total, alpha_k, upd, negate); - - if (null != subfv2 && negate) { - subfv2.update(parameters, total, alpha_k, upd, !negateSecondSubFV); - } else { - subfv2.update(parameters, total, alpha_k, upd, negateSecondSubFV); - } - - } - - if (negate) { - for (int i = 0; i < size; i++) { - parameters[getIndex(i)] -= alpha_k; - total[getIndex(i)] -= upd * alpha_k; - } - } else { - for (int i = 0; i < size; i++) { - parameters[getIndex(i)] += alpha_k; - total[getIndex(i)] += upd * alpha_k; // - } - } - - } - - public final void update(float[] parameters, float[] total, double alpha_k, double upd, boolean negate, - float[] totalp, Long2IntInterface li) { - - if (null != subfv1) { - subfv1.update(parameters, total, alpha_k, upd, negate, totalp, li); - - if (null != subfv2 && negate) { - subfv2.update(parameters, total, alpha_k, upd, !negateSecondSubFV, totalp, li); - } else { - subfv2.update(parameters, total, alpha_k, upd, negateSecondSubFV, totalp, li); - } - } - - if (negate) { - for (int i = 0; i < size; i++) { - parameters[getIndex(i)] -= alpha_k; - total[getIndex(i)] -= upd * alpha_k; - - totalp[li.l2i(getIndex(i))] -= upd * alpha_k; - // totalp[getIndex(i)] -=upd*alpha_k; - } - } else { - for (int i = 0; i < size; i++) { - parameters[getIndex(i)] += alpha_k; - total[getIndex(i)] += upd * alpha_k; // - - totalp[li.l2i(getIndex(i))] += upd * alpha_k; - // totalp[getIndex(i)] +=upd*alpha_k; - } - } - } - - private static IntIntHash hm1; - private static IntIntHash hm2; - - public int dotProduct(FV fl2) { - - if (hm1 == null) - hm1 = new IntIntHash(size(), 0.4F); - else - hm1.clear(); - - addFeaturesToMap(hm1); - - if (hm2 == null) - hm2 = new IntIntHash(fl2.size, 0.4F); - else - hm2.clear(); - - fl2.addFeaturesToMap(hm2); - - int[] keys = hm1.keys(); - - int result = 0; - for (int key : keys) - result += hm1.get(key) * hm2.get(key); - - return result; - - } - - public double twoNorm(FV fl2) { - - if (hm1 == null) - hm1 = new IntIntHash(size(), 0.4F); - else - hm1.clear(); - - addFeaturesToMap(hm1); - - if (hm2 == null) - hm2 = new IntIntHash(fl2.size, 0.4F); - else - hm2.clear(); - - fl2.addFeaturesToMap(hm2); - - int[] keys = hm1.keys(); - - int result = 0; - for (int key : keys) - result += hm1.get(key) * hm2.get(key); - - return Math.sqrt(result); - - } - - public void addFeaturesToMap(IntIntHash map) { - - if (null != subfv1) { - subfv1.addFeaturesToMap(map); - - if (null != subfv2) { - subfv2.addFeaturesToMap(map, negateSecondSubFV); - - } - } - - for (int i = 0; i < size; i++) - if (!map.adjustValue(getIndex(i), 1)) - map.put(getIndex(i), 1); - - } - - private void addFeaturesToMap(IntIntHash map, boolean negate) { - - if (null != subfv1) { - subfv1.addFeaturesToMap(map, negate); - - if (null != subfv2) { - if (negate) - subfv2.addFeaturesToMap(map, !negateSecondSubFV); - else - subfv2.addFeaturesToMap(map, negateSecondSubFV); - - } - } - - if (negate) { - for (int i = 0; i < size; i++) - if (!map.adjustValue(getIndex(i), -1)) - map.put(getIndex(i), -1); - } else { - for (int i = 0; i < size; i++) - if (!map.adjustValue(getIndex(i), 1)) - map.put(getIndex(i), 1); - } - - } - - @Override - public final String toString() { - StringBuilder sb = new StringBuilder(); - toString(sb); - return sb.toString(); - } - - private final void toString(StringBuilder sb) { - if (null != subfv1) { - subfv1.toString(sb); - - if (null != subfv2) - subfv2.toString(sb); - } - for (int i = 0; i < size; i++) - sb.append(getIndex(i)).append(' '); - } - - public void writeKeys(DataOutputStream dos) throws IOException { - - // int keys[] = keys(); - // dos.writeInt(keys.length); - // for(int i=0;i<keys.length;i++) { - // dos.writeInt(keys[i]); - // } - - // int keys[] = keys(); - dos.writeInt(size); - for (int i = 0; i < size; i++) { - dos.writeInt(m_index[i]); - } - - } - - public void readKeys(DataInputStream dos) throws IOException { - - int keys = dos.readInt(); - for (int i = 0; i < keys; i++) - createFeature(dos.readInt(), 1.0); - - } - - final public static FV cat(FV f1, FV f2) { - if (f1 == null) - return f2; - if (f2 == null) - return f1; - return new FV(f1, f2); - } - - final public static FV cat(FV f1, FV f2, FV f3) { - return FV.cat(f1, FV.cat(f2, f3)); - } - - final public static FV cat(FV f1, FV f2, FV f3, FV f4) { - return FV.cat(f1, FV.cat(f2, FV.cat(f3, f4))); - } - - final public static FV read(DataInputStream dis) throws IOException { - int cap = dis.readInt(); - if (cap == 0) - return null; - return new FV(dis, cap); - - } - - /* - * (non-Javadoc) - * - * @see is2.IFV#getScore() - */ - @Override - public double getScore() { - // System.out.println("not implemented"); - // TODO Auto-generated method stub - return 0; - } - - /* - * (non-Javadoc) - * - * @see is2.IFV#clone() - */ - @Override - public IFV clone() { - FV f = new FV(this.size); - for (int i = 0; i < this.size; i++) { - f.m_index[i] = m_index[i]; - } - f.size = this.size; - return f; - } - -} diff --git a/dependencyParser/mate-tools/src/is2/data/FVR.java b/dependencyParser/mate-tools/src/is2/data/FVR.java deleted file mode 100644 index c5bc073..0000000 --- a/dependencyParser/mate-tools/src/is2/data/FVR.java +++ /dev/null @@ -1,435 +0,0 @@ -package is2.data; - -import java.io.DataInputStream; -import java.io.DataOutputStream; -import java.io.IOException; - -import gnu.trove.TIntDoubleHashMap; - -public final class FVR extends IFV { - - private FVR subfv1; - private FVR subfv2; - private boolean negateSecondSubFV = false; - - private int size; - - // content of the nodes NxC - private int m_index[]; - private float m_value[]; - - // type of the nodes NxT - - public FVR() { - this(10); - } - - public FVR(int initialCapacity) { - m_index = new int[initialCapacity]; - m_value = new float[initialCapacity]; - } - - /* - * public FVR (FVR fv1, FVR fv2) { subfv1 = fv1; subfv2 = fv2; } - */ - public FVR(FVR fv1, FVR fv2, boolean negSecond) { - this(0); - subfv1 = fv1; - subfv2 = fv2; - negateSecondSubFV = negSecond; - } - - /** - * Read a feature vector - * - * @param index - * @param value - */ - public FVR(DataInputStream dos, int capacity) throws IOException { - this(capacity); - size = m_index.length; - - for (int i = 0; i < size; i++) - m_index[i] = dos.readInt(); - } - - /** - * Read a feature vector - * - * @param index - * @param value - */ - public FVR(DataInputStream dos) throws IOException { - this(dos.readInt()); - size = m_index.length; - - for (int i = 0; i < size; i++) - m_index[i] = dos.readInt(); - - } - - /** - * Increases the capacity of this <tt>Graph</tt> instance, if necessary, to - * ensure that it can hold at least the number of nodes specified by the - * minimum capacity argument. - * - * @param minCapacity - * the desired minimum capacity. - */ - private void ensureCapacity(int minCapacity) { - - if (minCapacity > m_index.length) { - - int oldIndex[] = m_index; - float oldValue[] = m_value; - - int newCapacity = (m_index.length * 3) / 2 + 1; - - if (newCapacity < minCapacity) - newCapacity = minCapacity; - - m_index = new int[newCapacity]; - m_value = new float[newCapacity]; - - System.arraycopy(oldIndex, 0, m_index, 0, oldIndex.length); - System.arraycopy(oldValue, 0, m_value, 0, oldValue.length); - - } - } - - final public int size() { - return size; - } - - final public boolean isEmpty() { - return size == 0; - } - - @Override - final public void clear() { - size = 0; - } - - final public int createFeature(int i, float v) { - - ensureCapacity(size + 1); - m_index[size] = i; - m_value[size] = v; - size++; - return size - 1; - } - /* - * final public int createFeature(int i) { - * - * ensureCapacity(size+1); m_index[size] =i; size++; return size-1; } - */ - - final public int getIndex(int i) { - return m_index[i]; - } - - public void setIndex(int p, int i) { - m_index[p] = i; - } - - /** - * Trims the capacity of this <tt>Graph</tt> instance to true size. An - * application can use this operation to minimize the storage of an - * <tt>Graph</tt> instance. - */ - public void trimToSize() { - - if (size < m_index.length) { - - int oldIndex[] = m_index; - - m_index = new int[size]; - System.arraycopy(oldIndex, 0, m_index, 0, size); - - } - - } - - @Override - final public void add(int i) { - if (i >= 0) { - ensureCapacity(size + 1); - m_index[size] = i; - m_value[size] = 1.0f; - size++; - } - } - - final public void add(int i, float f) { - if (i >= 0) - createFeature(i, f); - } - - // fv1 - fv2 - public FVR getDistVector(FVR fl2) { - return new FVR(this, fl2, true); - } - - public double getScore(double[] parameters, boolean negate) { - double score = 0.0; - - if (null != subfv1) { - score += subfv1.getScore(parameters, negate); - - if (null != subfv2) { - if (negate) - score += subfv2.getScore(parameters, !negateSecondSubFV); - else - score += subfv2.getScore(parameters, negateSecondSubFV); - - } - } - - if (negate) - for (int i = 0; i < size; i++) - score -= parameters[m_index[i]]; - else - for (int i = 0; i < size; i++) - score += parameters[m_index[i]]; - - return score; - } - - final public float getScore(float[] parameters, boolean negate) { - float score = 0.0F; - - if (null != subfv1) { - score += subfv1.getScore(parameters, negate); - - if (null != subfv2) { - if (negate) - score += subfv2.getScore(parameters, !negateSecondSubFV); - else - score += subfv2.getScore(parameters, negateSecondSubFV); - - } - } - - // warning changed the value - - if (negate) - for (int i = 0; i < size; i++) - score -= parameters[m_index[i]] * m_value[i]; - else - for (int i = 0; i < size; i++) - score += parameters[m_index[i]] * m_value[i]; - - return score; - } - - final public int getScore(short[] parameters, boolean negate) { - int score = 0; - - if (null != subfv1) { - score += subfv1.getScore(parameters, negate); - - if (null != subfv2) { - if (negate) - score += subfv2.getScore(parameters, !negateSecondSubFV); - else - score += subfv2.getScore(parameters, negateSecondSubFV); - - } - } - - // warning changed the value - - if (negate) - for (int i = 0; i < size; i++) - score -= parameters[m_index[i]] * m_value[i]; - else - for (int i = 0; i < size; i++) - score += parameters[m_index[i]] * m_value[i]; - - return score; - } - - public final void update(float[] parameters, float[] total, double alpha_k, double upd, boolean negate) { - - if (null != subfv1) { - subfv1.update(parameters, total, alpha_k, upd, negate); - - if (null != subfv2 && negate) { - subfv2.update(parameters, total, alpha_k, upd, !negateSecondSubFV); - } else { - subfv2.update(parameters, total, alpha_k, upd, negateSecondSubFV); - } - - } - - if (negate) { - for (int i = 0; i < size; i++) { - parameters[getIndex(i)] -= alpha_k * m_value[i]; - total[getIndex(i)] -= upd * alpha_k * m_value[i]; - } - } else { - for (int i = 0; i < size; i++) { - parameters[getIndex(i)] += alpha_k * m_value[i]; - total[getIndex(i)] += upd * alpha_k * m_value[i]; // - } - } - - } - - // private static IntIntHash hm1; - // private static IntIntHash hm2; - - private static TIntDoubleHashMap hd1; - private static TIntDoubleHashMap hd2; - - public int dotProduct(FVR fl2) { - - if (hd1 == null) - hd1 = new TIntDoubleHashMap(size(), 0.4F); - else - hd1.clear(); - - addFeaturesToMap(hd1); - - if (hd2 == null) - hd2 = new TIntDoubleHashMap(fl2.size, 0.4F); - else - hd2.clear(); - - fl2.addFeaturesToMap(hd2); - - int[] keys = hd1.keys(); - - int result = 0; - for (int key : keys) - result += hd1.get(key) * hd2.get(key); - - return result; - - } - - private void addFeaturesToMap(TIntDoubleHashMap map) { - - if (null != subfv1) { - subfv1.addFeaturesToMap(map); - - if (null != subfv2) { - subfv2.addFeaturesToMap(map, negateSecondSubFV); - - } - } - - for (int i = 0; i < size; i++) - if (!map.adjustValue(getIndex(i), m_value[i])) - map.put(getIndex(i), m_value[i]); - - } - - private void addFeaturesToMap(TIntDoubleHashMap map, boolean negate) { - - if (null != subfv1) { - subfv1.addFeaturesToMap(map, negate); - - if (null != subfv2) { - if (negate) - subfv2.addFeaturesToMap(map, !negateSecondSubFV); - else - subfv2.addFeaturesToMap(map, negateSecondSubFV); - - } - } - - if (negate) { - for (int i = 0; i < size; i++) - if (!map.adjustValue(getIndex(i), -m_value[i])) - map.put(getIndex(i), -m_value[i]); - } else { - for (int i = 0; i < size; i++) - if (!map.adjustValue(getIndex(i), m_value[i])) - map.put(getIndex(i), m_value[i]); - } - - } - - @Override - public final String toString() { - StringBuilder sb = new StringBuilder(); - toString(sb); - return sb.toString(); - } - - private final void toString(StringBuilder sb) { - if (null != subfv1) { - subfv1.toString(sb); - - if (null != subfv2) - subfv2.toString(sb); - } - for (int i = 0; i < size; i++) - sb.append(getIndex(i)).append('=').append(m_value[i]).append(' '); - } - - public void writeKeys(DataOutputStream dos) throws IOException { - - // int keys[] = keys(); - // dos.writeInt(keys.length); - // for(int i=0;i<keys.length;i++) { - // dos.writeInt(keys[i]); - // } - - // int keys[] = keys(); - dos.writeInt(size); - for (int i = 0; i < size; i++) { - dos.writeInt(m_index[i]); - } - - } - - /* - * - * final public static FVR cat(FVR f1,FVR f2) { if (f1==null) return f2; if - * (f2==null) return f1; return new FVR(f1, f2); } - * - * final public static FVR cat(FVR f1,FVR f2, FVR f3) { return FVR.cat(f1, - * FVR.cat(f2, f3)); } final public static FVR cat(FVR f1,FVR f2, FVR f3, - * FVR f4) { return FVR.cat(f1, FVR.cat(f2, FVR.cat(f3, f4))); } - */ - - final public static FVR read(DataInputStream dis) throws IOException { - int cap = dis.readInt(); - if (cap == 0) - return null; - return new FVR(dis, cap); - - } - - /* - * (non-Javadoc) - * - * @see is2.IFV#getScore() - */ - @Override - public double getScore() { - System.out.println("not implemented"); - new Exception().printStackTrace(); - // TODO Auto-generated method stub - return 0; - } - - /* - * (non-Javadoc) - * - * @see is2.IFV#clone() - */ - @Override - public IFV clone() { - FVR f = new FVR(this.size); - for (int i = 0; i < this.size; i++) { - f.m_index[i] = m_index[i]; - f.m_value[i] = m_value[i]; - } - f.size = this.size; - return f; - } - -} diff --git a/dependencyParser/mate-tools/src/is2/data/IEncoder.java b/dependencyParser/mate-tools/src/is2/data/IEncoder.java deleted file mode 100755 index 2a784af..0000000 --- a/dependencyParser/mate-tools/src/is2/data/IEncoder.java +++ /dev/null @@ -1,27 +0,0 @@ -/** - * - */ -package is2.data; - -/** - * @author Bernd Bohnet, 20.09.2009 - * - * - */ -public interface IEncoder { - public int getValue(String a, String v); - - default public void print() { - throw new UnsupportedOperationException(); - }; - /** - * @param spath - * @param substring - */ - // public int register(String spath, String substring); - - /** - * @return - */ - // public HashMap<String,Integer> getFeatureCounter(); -} diff --git a/dependencyParser/mate-tools/src/is2/data/IEncoderPlus.java b/dependencyParser/mate-tools/src/is2/data/IEncoderPlus.java deleted file mode 100644 index b033381..0000000 --- a/dependencyParser/mate-tools/src/is2/data/IEncoderPlus.java +++ /dev/null @@ -1,27 +0,0 @@ -/** - * - */ -package is2.data; - -import java.util.HashMap; - -/** - * @author Bernd Bohnet, 20.09.2009 - * - * - */ -public interface IEncoderPlus extends IEncoder { - - final public static String NONE = "<None>"; - - /** - * @param spath - * @param substring - */ - public int register(String spath, String substring); - - /** - * @return - */ - public HashMap<String, Integer> getFeatureCounter(); -} diff --git a/dependencyParser/mate-tools/src/is2/data/IFV.java b/dependencyParser/mate-tools/src/is2/data/IFV.java deleted file mode 100755 index 010f411..0000000 --- a/dependencyParser/mate-tools/src/is2/data/IFV.java +++ /dev/null @@ -1,29 +0,0 @@ -package is2.data; - -public abstract class IFV { - - // public double score=0; - - public abstract void add(int i); - - public abstract double getScore(); - - public abstract void clear(); - - @Override - public abstract IFV clone(); - - /** - * @param gvs - * @param li - */ - public void add(long[] gvs, Long2IntInterface li, int l) { - for (long gv : gvs) { - if (gv == Integer.MIN_VALUE) - break; - if (gv > 0) - add(li.l2i(gv + l)); - } - } - -} diff --git a/dependencyParser/mate-tools/src/is2/data/Instances.java b/dependencyParser/mate-tools/src/is2/data/Instances.java deleted file mode 100755 index 20493a9..0000000 --- a/dependencyParser/mate-tools/src/is2/data/Instances.java +++ /dev/null @@ -1,408 +0,0 @@ -package is2.data; - -import java.util.Arrays; -import java.util.BitSet; - -public class Instances { - - public IEncoder m_encoder; - - protected int size = 0; - - protected int capacity; - - public int[][] forms; - - public int[][] plemmas; - public int[][] glemmas; - - public short[][] heads; - public short[][] pheads; - - public short[][] labels; - public short[][] plabels; - - public short[][] gpos; - public short[][] pposs; - - public short[][][] feats; - - public int[][] predicat; - - public short[][] predicateId; - - public short[][] semposition; - - public short[][][] arg; - - public short[][][] argposition; - - public BitSet[] pfill; - - public short[][] gfeats; - public short[][] pfeats; - - public Instances() { - } - - public static int m_unkown = 0; - public static int m_count = 0; - - public static boolean m_report; - public static boolean m_found = false; - - final public void setForm(int i, int p, String x) { - - forms[i][p] = m_encoder.getValue(PipeGen.WORD, x); - if (forms[i][p] == -1) { - if (m_report) - System.out.println("unkwrd " + x); - m_unkown++; - m_found = true; - } - m_count++; - } - - final public void setRel(int i, int p, String x) { - labels[i][p] = (short) m_encoder.getValue(PipeGen.REL, x); - - } - - final public void setHead(int i, int c, int p) { - heads[i][c] = (short) p; - } - - final public int size() { - return size; - } - - public void setSize(int n) { - size = n; - } - - public void init(int ic, IEncoder mf) { - init(ic, mf, -1); - } - - public void init(int ic, IEncoder mf, int version) { - capacity = ic; - m_encoder = mf; - - forms = new int[capacity][]; - plemmas = new int[capacity][]; - glemmas = new int[capacity][]; - pposs = new short[capacity][]; - - gpos = new short[capacity][]; - labels = new short[capacity][]; - heads = new short[capacity][]; - plabels = new short[capacity][]; - pheads = new short[capacity][]; - feats = new short[capacity][][]; - gfeats = new short[capacity][]; - pfeats = new short[capacity][]; - - predicat = new int[ic][]; - predicateId = new short[ic][]; - semposition = new short[ic][]; - arg = new short[ic][][]; - argposition = new short[ic][][]; - - pfill = new BitSet[ic]; - } - - public int length(int i) { - return forms[i].length; - } - - public int createInstance09(int length) { - - forms[size] = new int[length]; - plemmas[size] = new int[length]; - glemmas[size] = new int[length]; - - pposs[size] = new short[length]; - - gpos[size] = new short[length]; - - labels[size] = new short[length]; - heads[size] = new short[length]; - - this.pfill[size] = new BitSet(length); - - feats[size] = new short[length][]; - gfeats[size] = new short[length]; - pfeats[size] = new short[length]; - plabels[size] = new short[length]; - pheads[size] = new short[length]; - - size++; - - return size - 1; - - } - - /* - * public final void setPPos(int i, int p, String x) { ppos[i][p] = - * (short)m_encoder.getValue(PipeGen.POS,x); - * - * } - */ - - public final void setPPoss(int i, int p, String x) { - pposs[i][p] = (short) m_encoder.getValue(PipeGen.POS, x); - - } - - public final void setGPos(int i, int p, String x) { - gpos[i][p] = (short) m_encoder.getValue(PipeGen.POS, x); - } - - public void setLemma(int i, int p, String x) { - plemmas[i][p] = m_encoder.getValue(PipeGen.WORD, x); - } - - public void setGLemma(int i, int p, String x) { - glemmas[i][p] = m_encoder.getValue(PipeGen.WORD, x); - } - - public void setFeats(int i, int p, String[] fts) { - if (fts == null) { - feats[i][p] = null; - return; - } - feats[i][p] = new short[fts.length]; - - for (int k = 0; k < fts.length; k++) { - feats[i][p][k] = (short) m_encoder.getValue(PipeGen.FEAT, fts[k]); - } - - } - - public void setFeature(int i, int p, String feature) { - if (feature == null) - return; - this.gfeats[i][p] = (short) m_encoder.getValue(PipeGen.FFEATS, feature); - /* - * if (gfeats[i][p]==-1) { System.out.println("+"+feature); new - * Exception().printStackTrace(); System.exit(0); } - */ - } - - public void setPFeature(int i, int p, String feature) { - if (feature == null) - return; - this.pfeats[i][p] = (short) m_encoder.getValue(PipeGen.FFEATS, feature); - } - - public int getWValue(String v) { - return m_encoder.getValue(PipeGen.WORD, v); - } - - public final void setPRel(int i, int p, String x) { - plabels[i][p] = (short) m_encoder.getValue(PipeGen.REL, x); - } - - public final void setPHead(int i, int c, int p) { - pheads[i][c] = (short) p; - } - - /* - * public String toString(int c) { StringBuffer s = new StringBuffer(); - * for(int i=0;i<length(c);i++) { - * s.append(i).append('\t').append(forms[c][i]).append("\t_\t").append(ppos[ - * c][i]).append('\t'). append('\t').append(heads[c][i]).append('\n'); } - * - * return s.toString(); } - */ - - /* - * public void setPos(int i, int p, String x) { ppos[i][p] = - * (short)m_encoder.getValue(PipeGen.POS,x); - * - * } - */ - - /** - * Create the semantic representation - * - * @param inst - * @param it - * @return - */ - public boolean createSem(int inst, SentenceData09 it) { - - boolean error = false; - - if (it.sem == null) - return error; - - predicat[inst] = new int[it.sem.length]; - semposition[inst] = new short[it.sem.length]; - predicateId[inst] = new short[it.sem.length]; - - if (it.sem != null) { - arg[inst] = new short[it.sem.length][]; - argposition[inst] = new short[it.sem.length][]; - } - if (it.sem == null) - return error; - - // init sems - - for (int i = 0; i < it.sem.length; i++) { - - String pred; - short predSense = 0; - if (it.sem[i].indexOf('.') > 0) { - pred = it.sem[i].substring(0, it.sem[i].indexOf('.')); - predSense = (short) m_encoder.getValue(PipeGen.SENSE, - it.sem[i].substring(it.sem[i].indexOf('.') + 1, it.sem[i].length())); - // Short.parseShort(it.sem[i].substring(it.sem[i].indexOf('.')+1, - // it.sem[i].length())); - } else { - pred = it.sem[i]; - predSense = (short) m_encoder.getValue(PipeGen.SENSE, ""); - } - - predicat[inst][i] = m_encoder.getValue(PipeGen.PRED, pred); - predicateId[inst][i] = predSense; - - semposition[inst][i] = (short) it.semposition[i]; - - // this can happen too when no arguments have values - if (it.arg == null) { - // DB.println("error arg == null "+i+" sem"+it.sem[i]+" inst - // number "+inst); - // error =true; - continue; - } - - // last pred(s) might have no argument - if (it.arg.length <= i) { - // DB.println("error in instance "+inst+" argument list and - // number of predicates different arg lists: "+it.arg.length+" - // preds "+sem.length); - // error =true; - continue; - } - - // this happens from time to time, if the predicate has no arguments - if (it.arg[i] == null) { - // DB.println("error no args for pred "+i+" "+it.sem[i]+" length - // "+it.ppos.length); - // error =true; - continue; - } - - int argCount = it.arg[i].length; - arg[inst][i] = new short[it.arg[i].length]; - argposition[inst][i] = new short[it.arg[i].length]; - - // add the content of the argument - for (int a = 0; a < argCount; a++) { - arg[inst][i][a] = (short) m_encoder.getValue(PipeGen.ARG, it.arg[i][a]); - argposition[inst][i][a] = (short) it.argposition[i][a]; - - // System.out.print(" #"+a+" pos: "+argposition[inst][i][a]+" - // "+it.arg[i][a]+" "); - } - // System.out.println(""); - - } - - return error; - - } - - public int predCount(int n) { - return pfill[n].cardinality(); - } - - public void print2DIntArray(int[][] a, String name) { - for(int i = 0; i < a.length; ++i) - if(a[i] != null) - for(int j = 0; j < a[i].length; ++j) - System.out.println(name + "[" + i + "][" + j + "] = " + a[i][j]); - } - - public void print2DShortArray(short[][] a, String name) { - for(int i = 0; i < a.length; ++i) - if(a[i] != null) - for(int j = 0; j < a[i].length; ++j) - System.out.println(name + "[" + i + "][" + j + "] = " + a[i][j]); - } - - public void print3DShortArray(short[][][] a, String name) { - for(int i = 0; i < a.length; ++i) - if(a[i] != null) - for(int j = 0; j < a[i].length; ++j) - if(a[i][j] != null) - System.out.println(name + "[" + i + "][" + j + "] = " + Arrays.toString(a[i][j])); - } - - public void print() { - System.out.println("-----m_encoder-----"); - m_encoder.print(); - System.out.println("-------------------"); - - System.out.println("size = " + size); - System.out.println("capacity = " + capacity); - - print2DIntArray(forms, "forms"); - print2DIntArray(plemmas, "plemmas"); - print2DIntArray(glemmas, "glemmas"); - print2DShortArray(heads, "heads"); - print2DShortArray(pheads, "pheads"); - print2DShortArray(labels, "labels"); - print2DShortArray(plabels, "plabels"); - print2DShortArray(gpos, "gpos"); - print2DShortArray(pposs, "pposs"); - print3DShortArray(feats, "feats"); - print2DIntArray(predicat, "predicat"); - print2DShortArray(predicateId, "predicateId"); - print2DShortArray(semposition, "semposition"); - print3DShortArray(arg, "arg"); - print3DShortArray(argposition, "argposition"); - for(int i = 0; i < pfill.length; ++i) - System.out.println("pfill [" + i + "] = " + pfill[i]); - print2DShortArray(gfeats, "gfeats"); - print2DShortArray(pfeats, "pfeats"); - - System.out.println("m_unkown = " + m_unkown); - System.out.println("m_count = " + m_count); - System.out.println("m_report = " + m_report); - System.out.println("m_found = " + m_found); - } - - /** - * @param pscnt - * @return - */ - public String print(int pscnt) { - StringBuilder s = new StringBuilder(); - - for (int i = 0; i < this.length(pscnt); i++) { - s.append(i + "\t" + forms[pscnt][i] + "\t" + this.glemmas[pscnt][i] + "\t" + this.plemmas[pscnt][i] + "\t" - + this.gpos[pscnt][i] + "\t" + this.pposs[pscnt][i] + "\t" + this.gfeats[pscnt][i] + "\t" - + (this.feats[pscnt][i] != null && this.feats[pscnt][i].length > 0 ? this.feats[pscnt][i][0] : null) - + "\t l " + (labels[pscnt] != null && labels[pscnt].length > i ? labels[pscnt][i] : null) + "\t" - + "\t" + heads[pscnt][i] + "\t" - + (plabels[pscnt] != null && plabels[pscnt].length > i ? plabels[pscnt][i] : null) + "\t" - + this.predicat[pscnt][i] + "\n"); - } - return s.toString(); - } - - public String print1(int pscnt) { - StringBuilder s = new StringBuilder(); - - for (int i = 0; i < this.length(pscnt); i++) { - s.append(i + "\t" + forms[pscnt][i] + "\t" + "\t" + this.plemmas[pscnt][i] + "\t" + +this.pposs[pscnt][i] - + "\t l " + (labels[pscnt] != null && labels[pscnt].length > i ? labels[pscnt][i] : null) + "\t" - + "\t" + heads[pscnt][i] + "\t" - + (plabels[pscnt] != null && plabels[pscnt].length > i ? plabels[pscnt][i] : null) + "\n"); - } - return s.toString(); - } -} diff --git a/dependencyParser/mate-tools/src/is2/data/InstancesTagger.java b/dependencyParser/mate-tools/src/is2/data/InstancesTagger.java deleted file mode 100644 index 4cf894a..0000000 --- a/dependencyParser/mate-tools/src/is2/data/InstancesTagger.java +++ /dev/null @@ -1,95 +0,0 @@ -/** - * - */ -package is2.data; - -/** - * @author Dr. Bernd Bohnet, 06.11.2010 - * - * - */ -public class InstancesTagger extends Instances { - - public short[][][] chars; - public int[][] formlc; - - @Override - public void init(int ic, IEncoder mf) { - super.init(ic, mf, 9); - chars = new short[capacity][][]; - formlc = new int[capacity][]; - // System.out.println("create chars "+capacity ); - } - - public void fillChars(SentenceData09 instance, int i, int cend) { - chars[i] = new short[instance.length()][13]; - formlc[i] = new int[instance.length()]; - - for (int k = 0; k < instance.length(); k++) { - chars[i][k][0] = (short) (instance.forms[k].length() > 0 - ? m_encoder.getValue(PipeGen.CHAR, String.valueOf(instance.forms[k].charAt(0))) : cend); - chars[i][k][1] = (short) (instance.forms[k].length() > 1 - ? m_encoder.getValue(PipeGen.CHAR, String.valueOf(instance.forms[k].charAt(1))) : cend);// m_encoder.getValue(PipeGen.CHAR, - // END); - chars[i][k][2] = (short) (instance.forms[k].length() > 2 - ? m_encoder.getValue(PipeGen.CHAR, String.valueOf(instance.forms[k].charAt(2))) : cend); - chars[i][k][3] = (short) (instance.forms[k].length() > 3 - ? m_encoder.getValue(PipeGen.CHAR, String.valueOf(instance.forms[k].charAt(3))) : cend); - chars[i][k][4] = (short) (instance.forms[k].length() > 4 - ? m_encoder.getValue(PipeGen.CHAR, String.valueOf(instance.forms[k].charAt(4))) : cend); - chars[i][k][5] = (short) (instance.forms[k].length() > 5 - ? m_encoder.getValue(PipeGen.CHAR, String.valueOf(instance.forms[k].charAt(5))) : cend); - - chars[i][k][6] = (short) (instance.forms[k].length() > 0 ? m_encoder.getValue(PipeGen.CHAR, - String.valueOf(instance.forms[k].charAt(instance.forms[k].length() - 1))) : cend); - chars[i][k][7] = (short) (instance.forms[k].length() > 1 ? m_encoder.getValue(PipeGen.CHAR, - String.valueOf(instance.forms[k].charAt(instance.forms[k].length() - 2))) : cend);// m_encoder.getValue(PipeGen.CHAR, - // END); - chars[i][k][8] = (short) (instance.forms[k].length() > 2 ? m_encoder.getValue(PipeGen.CHAR, - String.valueOf(instance.forms[k].charAt(instance.forms[k].length() - 3))) : cend); - chars[i][k][9] = (short) (instance.forms[k].length() > 3 ? m_encoder.getValue(PipeGen.CHAR, - String.valueOf(instance.forms[k].charAt(instance.forms[k].length() - 4))) : cend); - chars[i][k][10] = (short) (instance.forms[k].length() > 4 ? m_encoder.getValue(PipeGen.CHAR, - String.valueOf(instance.forms[k].charAt(instance.forms[k].length() - 5))) : cend); - chars[i][k][11] = (short) instance.forms[k].length(); - chars[i][k][12] = (short) (instance.forms[k].length() > 0 - ? m_encoder.getValue(PipeGen.CHAR, String.valueOf(instance.forms[k].charAt(0))) : cend); - formlc[i][k] = m_encoder.getValue(PipeGen.WORD, instance.forms[k].toLowerCase()); - } - } - - public void fillChars(SentenceData09 instance, int i, String[] what, int cend) { - chars[i] = new short[instance.length()][13]; - formlc[i] = new int[instance.length()]; - - for (int k = 0; k < instance.length(); k++) { - chars[i][k][0] = (short) m_encoder.getValue(PipeGen.CHAR, String.valueOf(what[k].charAt(0))); - chars[i][k][1] = (short) (what[k].length() > 1 - ? m_encoder.getValue(PipeGen.CHAR, String.valueOf(what[k].charAt(1))) : cend);// m_encoder.getValue(PipeGen.CHAR, - // END); - chars[i][k][2] = (short) (what[k].length() > 2 - ? m_encoder.getValue(PipeGen.CHAR, String.valueOf(what[k].charAt(2))) : cend); - chars[i][k][3] = (short) (what[k].length() > 3 - ? m_encoder.getValue(PipeGen.CHAR, String.valueOf(what[k].charAt(3))) : cend); - chars[i][k][4] = (short) (what[k].length() > 4 - ? m_encoder.getValue(PipeGen.CHAR, String.valueOf(what[k].charAt(4))) : cend); - chars[i][k][5] = (short) (what[k].length() > 5 - ? m_encoder.getValue(PipeGen.CHAR, String.valueOf(what[k].charAt(5))) : cend); - - chars[i][k][6] = (short) (m_encoder.getValue(PipeGen.CHAR, - String.valueOf(what[k].charAt(what[k].length() - 1)))); - chars[i][k][7] = (short) (what[k].length() > 1 - ? m_encoder.getValue(PipeGen.CHAR, String.valueOf(what[k].charAt(what[k].length() - 2))) : cend);// m_encoder.getValue(PipeGen.CHAR, - // END); - chars[i][k][8] = (short) (what[k].length() > 2 - ? m_encoder.getValue(PipeGen.CHAR, String.valueOf(what[k].charAt(what[k].length() - 3))) : cend); - chars[i][k][9] = (short) (what[k].length() > 3 - ? m_encoder.getValue(PipeGen.CHAR, String.valueOf(what[k].charAt(what[k].length() - 4))) : cend); - chars[i][k][10] = (short) (what[k].length() > 4 - ? m_encoder.getValue(PipeGen.CHAR, String.valueOf(what[k].charAt(what[k].length() - 5))) : cend); - chars[i][k][11] = (short) what[k].length(); - formlc[i][k] = m_encoder.getValue(PipeGen.WORD, what[k].toLowerCase()); - } - } - -} diff --git a/dependencyParser/mate-tools/src/is2/data/IntIntHash.java b/dependencyParser/mate-tools/src/is2/data/IntIntHash.java deleted file mode 100644 index 1019507..0000000 --- a/dependencyParser/mate-tools/src/is2/data/IntIntHash.java +++ /dev/null @@ -1,255 +0,0 @@ -package is2.data; - -import java.util.Arrays; - -final public class IntIntHash { - - protected int _size; - protected int _free; - protected float _loadFactor; - public int _maxSize; - protected int _autoCompactRemovesRemaining; - protected float _autoCompactionFactor; - public int _set[]; - private int _values[]; - - public IntIntHash() { - this(102877, 0.5F); - } - - public IntIntHash(int initialCapacity, float loadFactor) { - _loadFactor = loadFactor; - _autoCompactionFactor = loadFactor; - setUp((int) Math.ceil(initialCapacity / loadFactor)); - } - - public int size() { - return _size; - } - - public void ensureCapacity(int desiredCapacity) { - - if (desiredCapacity > _maxSize - size()) { - rehash(PrimeFinder.nextPrime((int) Math.ceil((desiredCapacity + size()) / _loadFactor) + 1)); - computeMaxSize(capacity()); - } - } - - public void compact() { - rehash(PrimeFinder.nextPrime((int) Math.ceil(size() / _loadFactor) + 1)); - computeMaxSize(capacity()); - if (_autoCompactionFactor != 0.0F) - computeNextAutoCompactionAmount(size()); - } - - public void setAutoCompactionFactor(float factor) { - if (factor < 0.0F) { - throw new IllegalArgumentException( - (new StringBuilder()).append("Factor must be >= 0: ").append(factor).toString()); - } else { - _autoCompactionFactor = factor; - return; - } - } - - public float getAutoCompactionFactor() { - return _autoCompactionFactor; - } - - private void computeMaxSize(int capacity) { - _maxSize = Math.min(capacity - 1, (int) Math.floor(capacity * _loadFactor)); - _free = capacity - _size; - } - - private void computeNextAutoCompactionAmount(int size) { - if (_autoCompactionFactor != 0.0F) - _autoCompactRemovesRemaining = Math.round(size * _autoCompactionFactor); - } - - protected final void postInsertHook(boolean usedFreeSlot) { - if (usedFreeSlot) - _free--; - if (++_size > _maxSize || _free == 0) { - int newCapacity = _size <= _maxSize ? capacity() : PrimeFinder.nextPrime(capacity() << 1); - rehash(newCapacity); - computeMaxSize(capacity()); - } - } - - protected int calculateGrownCapacity() { - return capacity() << 1; - } - - protected int capacity() { - return _values.length; - } - - public boolean contains(int val) { - return index(val) >= 0; - } - - private int index(int v) { - - int length = _set.length; - int index = Math.abs((computeHashCode(v) /* & 2147483647 */ ) % length); - - while (true) { - // first - long l = _set[index]; - if (l == 0) { - // good++; - return -1; - } - // second - if (l == v) { - return index; - } - if (--index < 0) - index += length; - } - // return -1; - } - - protected int insertionIndex(long val) { - int length = _set.length; - int index = Math.abs((computeHashCode(val) /* & 2147483647 */ ) % length); - while (true) { - if (_set[index] == 0) - return index; - if (_set[index] == val) - return -index - 1; - if (--index < 0) - index += length; - - } - } - - public int computeHashCode(long value) { - return (int) ((value ^ (value & 0xffffffff00000000L) >>> 32) * 31);// 0x811c9dc5 - // ^ - // // - // 29 - } - - protected int setUp(int initialCapacity) { - int capacity = PrimeFinder.nextPrime(initialCapacity); - computeMaxSize(capacity); - computeNextAutoCompactionAmount(initialCapacity); - _set = new int[capacity]; - _values = new int[capacity]; - return capacity; - } - - public void put(int key, int value) { - int index = insertionIndex(key); - doPut(key, value, index); - } - - private void doPut(int key, int value, int index) { - boolean isNewMapping = true; - if (index < 0) { - index = -index - 1; - isNewMapping = false; - } - _set[index] = key; - _values[index] = value; - if (isNewMapping) - postInsertHook(true); - - } - - protected void rehash(int newCapacity) { - int oldCapacity = _set.length; - int oldKeys[] = _set; - int oldVals[] = _values; - _set = new int[newCapacity]; - _values = new int[newCapacity]; - int i = oldCapacity; - - while (true) { - if (i-- <= 0) - break; - if (oldVals[i] != 0) { - int o = oldKeys[i]; - int index = insertionIndex(o); - _set[index] = o; - _values[index] = oldVals[i]; - } - } - } - - int index = 0; - - public int get(int key) { - int index = index(key); - return index >= 0 ? _values[index] : 0; - } - - public void clear() { - _size = 0; - _free = capacity(); - Arrays.fill(_set, 0, _set.length, 0); - // Arrays.fill(_values, 0, _values.length, 0); - } - - public int remove(int key) { - int prev = 0; - int index = index(key); - if (index >= 0) { - prev = _values[index]; - _values[index] = 0; - _set[index] = 0; - _size--; - if (_autoCompactionFactor != 0.0F) { - _autoCompactRemovesRemaining--; - if (_autoCompactRemovesRemaining <= 0) - compact(); - } - } - return prev; - } - - public int[] getValues() { - int vals[] = new int[size()]; - int v[] = _values; - int i = v.length; - int j = 0; - do { - if (i-- <= 0) - break; - if (v[i] != 0) - vals[j++] = v[i]; - } while (true); - return vals; - } - - public int[] keys() { - int keys[] = new int[size()]; - int k[] = _set; - // byte states[] = _states; - int i = k.length; - int j = 0; - do { - if (i-- <= 0) - break; - if (k[i] != 0) - keys[j++] = k[i]; - } while (true); - return keys; - } - - /** - * @param index2 - * @param i - * @return - */ - public boolean adjustValue(int key, int i) { - int index = index(key); - if (index >= 0) { - _values[index] += i; - return true; - } - return false; - } - -} diff --git a/dependencyParser/mate-tools/src/is2/data/Long2Int.java b/dependencyParser/mate-tools/src/is2/data/Long2Int.java deleted file mode 100755 index 1a4a3c4..0000000 --- a/dependencyParser/mate-tools/src/is2/data/Long2Int.java +++ /dev/null @@ -1,112 +0,0 @@ -package is2.data; - -/** - * @author Bernd Bohnet, 01.09.2009 - * - * Maps for the Hash Kernel the long values to the int values. - */ -final public class Long2Int implements Long2IntInterface { - - public Long2Int() { - size = 115911564; - } - - public Long2Int(int s) { - size = s; - } - - public static void main(String args[]) { - - long l = 123456; - long l2 = 1010119; - System.out.println("l \t" + l + "\t" + printBits(l)); - - long x = 100000000; - System.out.println("1m\t" + l2 + "\t" + printBits(x) + "\t" + x); - - System.out.println("l2\t" + l2 + "\t" + printBits(l)); - - System.out.println("l2*l\t" + l2 + "\t" + printBits(l * l2) + " \t " + l * l2); - - System.out.println("l2*l*l2\t" + l2 + "\t" + printBits(l * l2 * l2) + " \t " + l * l2 * l2); - - System.out.println("l2*l*l2\t" + l2 + "\t" + printBits(l * l2 * l2 * l2) + " \t " + l * l2 * l2 * l2); - - System.out.println( - "l2*l*l2\t" + l2 + "\t" + printBits((l * l2) % 0xfffff) + " \t " + l * l2 * l2 * l2 + "\t " + 0xfffff); - System.out.println("l2*l*l2\t" + l2 + "\t" + printBits((l * l2) & 0xfffffff) + " \t " + l * l2 * l2 * l2); - } - - /** Integer counter for long2int */ - final private int size; // 0x03ffffff //0x07ffffff - - /* - * (non-Javadoc) - * - * @see is2.sp09k9992.Long2IntIterface#size() - */ - @Override - public int size() { - return size; - } - - /* - * (non-Javadoc) - * - * @see is2.sp09k9992.Long2IntIterface#start() has no meaning for this - * implementation - */ - final public void start() { - } - - /* - * (non-Javadoc) - * - * @see is2.sp09k9992.Long2IntIterface#l2i(long) - */ - @Override - final public int l2i(long l) { - if (l < 0) - return -1; - - // this works well LAS 88.138 - // int r= (int)(( l ^ (l&0xffffffff00000000L) >>> 29 ));//0x811c9dc5 ^ - // // 29 - // return Math.abs(r % size); - // this works a bit better and good with 0x03ffffff - // - /* - * long r= l;//26 l = (l>>12)&0xfffffffffffff000L; r ^= l;//38 l = - * (l>>11)&0xffffffffffffc000L; r ^= l;//49 l = (l>>9)& - * 0xffffffffffff0000L; //53 r ^= l;//58 l = (l>>7)&0xfffffffffffc0000L; - * //62 r ^=l;//65 int x = (int)r; x = x % size; // return x >= 0 ? x : - * -x ;// Math.abs(r % size); - * - */ - // 26 0x03ffffff - // together with 0x07ffffff 27 88.372 - long r = l;// 27 - l = (l >> 13) & 0xffffffffffffe000L; - r ^= l; // 40 - l = (l >> 11) & 0xffffffffffff0000L; - r ^= l; // 51 - l = (l >> 9) & 0xfffffffffffc0000L; // 53 - r ^= l; // 60 - l = (l >> 7) & 0xfffffffffff00000L; // 62 - r ^= l; // 67 - int x = ((int) r) % size; - - return x >= 0 ? x : -x; - } - - static public StringBuffer printBits(long out) { - StringBuffer s = new StringBuffer(); - - for (int k = 0; k < 65; k++) { - s.append((out & 1) == 1 ? "1" : "0"); - out >>= 1; - } - s.reverse(); - return s; - } -} diff --git a/dependencyParser/mate-tools/src/is2/data/Long2IntExact.java b/dependencyParser/mate-tools/src/is2/data/Long2IntExact.java deleted file mode 100644 index debf455..0000000 --- a/dependencyParser/mate-tools/src/is2/data/Long2IntExact.java +++ /dev/null @@ -1,65 +0,0 @@ -package is2.data; - -/** - * @author Bernd Bohnet, 01.09.2009 - * - * Maps for the Hash Kernel the long values to the int values. - */ -final public class Long2IntExact implements Long2IntInterface { - - static gnu.trove.TLongIntHashMap mapt = new gnu.trove.TLongIntHashMap(); - - static int cnt = 0; - - public Long2IntExact() { - size = 115911564; - } - - public Long2IntExact(int s) { - size = s; - } - - /** Integer counter for long2int */ - final private int size; // 0x03ffffff //0x07ffffff - - /* - * (non-Javadoc) - * - * @see is2.sp09k9992.Long2IntIterface#size() - */ - @Override - public int size() { - return size; - } - - /* - * (non-Javadoc) - * - * @see is2.sp09k9992.Long2IntIterface#start() has no meaning for this - * implementation - */ - final public void start() { - } - - /* - * (non-Javadoc) - * - * @see is2.sp09k9992.Long2IntIterface#l2i(long) - */ - @Override - final public int l2i(long l) { - if (l < 0) - return -1; - - int i = mapt.get(l); - if (i != 0) - return i; - - if (i == 0 && cnt < size - 1) { - cnt++; - mapt.put(l, cnt); - return cnt; - } - return -1; - } -} diff --git a/dependencyParser/mate-tools/src/is2/data/Long2IntInterface.java b/dependencyParser/mate-tools/src/is2/data/Long2IntInterface.java deleted file mode 100755 index 8401c1f..0000000 --- a/dependencyParser/mate-tools/src/is2/data/Long2IntInterface.java +++ /dev/null @@ -1,16 +0,0 @@ -package is2.data; - -public interface Long2IntInterface { - - public abstract int size(); - - /** - * Maps a long to a integer value. This is very useful to save memory for - * sparse data long values - * - * @param l - * @return the integer - */ - public abstract int l2i(long l); - -} \ No newline at end of file diff --git a/dependencyParser/mate-tools/src/is2/data/Long2IntQuick.java b/dependencyParser/mate-tools/src/is2/data/Long2IntQuick.java deleted file mode 100644 index 9956173..0000000 --- a/dependencyParser/mate-tools/src/is2/data/Long2IntQuick.java +++ /dev/null @@ -1,51 +0,0 @@ -package is2.data; - -/** - * @author Bernd Bohnet, 01.09.2009 - * - * Maps for the Hash Kernel the long values to the int values. - */ -final public class Long2IntQuick implements Long2IntInterface { - - /** Integer counter for long2int */ - final private int size; - - public Long2IntQuick() { - size = 0x07ffffff; - } - - public Long2IntQuick(int s) { - size = s; - } - - /* - * (non-Javadoc) - * - * @see is2.sp09k9992.Long2IntIterface#size() - */ - @Override - public int size() { - return size; - } - - /* - * (non-Javadoc) - * - * @see is2.sp09k9992.Long2IntIterface#start() has no meaning for this - * implementation - */ - - /* - * (non-Javadoc) - * - * @see is2.sp09k9992.Long2IntIterface#l2i(long) - */ - @Override - final public int l2i(long r) { - long l = (r >> 16) & 0xfffffffffffff000L; - r ^= l; - r ^= l = (l >> 12) & 0xffffffffffff0000L; - r ^= l = (l >> 8) & 0xfffffffffffc0000L; - return (int) (r % size); - } -} diff --git a/dependencyParser/mate-tools/src/is2/data/MFB.java b/dependencyParser/mate-tools/src/is2/data/MFB.java deleted file mode 100755 index 9fa4e3c..0000000 --- a/dependencyParser/mate-tools/src/is2/data/MFB.java +++ /dev/null @@ -1,248 +0,0 @@ -package is2.data; - -import java.io.DataInputStream; -import java.io.DataOutputStream; -import java.io.IOException; -import java.util.HashMap; -import java.util.Map.Entry; - -import is2.util.DB; - -/** - * Map Features, do not map long to integer - * - * @author Bernd Bohnet, 20.09.2009 - */ - -final public class MFB implements IEncoderPlus { - - /** The features and its values */ - static private final HashMap<String, HashMap<String, Integer>> m_featureSets = new HashMap<String, HashMap<String, Integer>>(); - - /** The feature class and the number of values */ - static private final HashMap<String, Integer> m_featureCounters = new HashMap<String, Integer>(); - - /** The number of bits needed to encode a feature */ - static final HashMap<String, Integer> m_featureBits = new HashMap<String, Integer>(); - - /** Integer counter for long2int */ - static private int count = 0; - - /** Stop growing */ - public boolean stop = false; - - final public static String NONE = "<None>"; - - public MFB() { - } - - public int size() { - return count; - } - - /** - * Register an attribute class, if it not exists and add a possible value - * - * @param type - * @param type2 - */ - @Override - final public int register(String a, String v) { - - synchronized (m_featureCounters) { - - HashMap<String, Integer> fs = getFeatureSet().get(a); - if (fs == null) { - fs = new HashMap<String, Integer>(); - getFeatureSet().put(a, fs); - fs.put(NONE, 0); - getFeatureCounter().put(a, 1); - } - - Integer i = fs.get(v); - if (i == null) { - Integer c = getFeatureCounter().get(a); - fs.put(v, c); - c++; - getFeatureCounter().put(a, c); - return c - 1; - } else - return i; - } - } - - /** - * Calculates the number of bits needed to encode a feature - */ - public void calculateBits() { - - for (Entry<String, Integer> e : getFeatureCounter().entrySet()) { - int bits = (int) Math.ceil((Math.log(e.getValue() + 1) / Math.log(2))); - m_featureBits.put(e.getKey(), bits); - } - - // System.out.println("total number of needed bits "+total); - } - - @Override - public String toString() { - - StringBuffer content = new StringBuffer(); - for (Entry<String, Integer> e : getFeatureCounter().entrySet()) { - content.append(e.getKey() + " " + e.getValue()); - content.append(':'); - // HashMap<String,Integer> vs = getFeatureSet().get(e.getKey()); - content.append(getFeatureBits(e.getKey())); - - /* - * if (vs.size()<120) for(Entry<String,Integer> e2 : vs.entrySet()) - * { content.append(e2.getKey()+" ("+e2.getValue()+") "); } - */ - content.append('\n'); - - } - return content.toString(); - } - - static final public short getFeatureBits(String a) { - if (m_featureBits.get(a) == null) - return 0; - return (short) m_featureBits.get(a).intValue(); - } - - /** - * Get the integer place holder of the string value v of the type a - * - * @param t - * the type - * @param v - * the value - * @return the integer place holder of v - */ - @Override - final public int getValue(String t, String v) { - - if (m_featureSets.get(t) == null) - return -1; - Integer vi = m_featureSets.get(t).get(v); - if (vi == null) - return -1; // stop && - return vi.intValue(); - } - - /** - * Static version of getValue - * - * @see getValue - */ - static final public int getValueS(String a, String v) { - - if (m_featureSets.get(a) == null) - return -1; - Integer vi = m_featureSets.get(a).get(v); - if (vi == null) - return -1; // stop && - return vi.intValue(); - } - - public int hasValue(String a, String v) { - - Integer vi = m_featureSets.get(a).get(v); - if (vi == null) - return -1; - return vi.intValue(); - } - - public static String printBits(int k) { - StringBuffer s = new StringBuffer(); - for (int i = 0; i < 31; i++) { - s.append((k & 0x00000001) == 1 ? '1' : '0'); - k = k >> 1; - - } - s.reverse(); - return s.toString(); - } - - /** - * Maps a long to a integer value. This is very useful to save memory for - * sparse data long values - * - * @param l - * @return the integer - */ - static public int misses = 0; - static public int good = 0; - - /** - * Write the data - * - * @param dos - * @throws IOException - */ - static public void writeData(DataOutputStream dos) throws IOException { - dos.writeInt(getFeatureSet().size()); - // DB.println("write"+getFeatureSet().size()); - for (Entry<String, HashMap<String, Integer>> e : getFeatureSet().entrySet()) { - dos.writeUTF(e.getKey()); - dos.writeInt(e.getValue().size()); - - for (Entry<String, Integer> e2 : e.getValue().entrySet()) { - - if (e2.getKey() == null) - DB.println("key " + e2.getKey() + " value " + e2.getValue() + " e -key " + e.getKey()); - dos.writeUTF(e2.getKey()); - dos.writeInt(e2.getValue()); - - } - - } - } - - public void read(DataInputStream din) throws IOException { - - int size = din.readInt(); - for (int i = 0; i < size; i++) { - String k = din.readUTF(); - int size2 = din.readInt(); - - HashMap<String, Integer> h = new HashMap<String, Integer>(); - getFeatureSet().put(k, h); - for (int j = 0; j < size2; j++) { - h.put(din.readUTF(), din.readInt()); - } - getFeatureCounter().put(k, size2); - } - - count = size; - // stop(); - calculateBits(); - } - - /** - * Clear the data - */ - static public void clearData() { - getFeatureSet().clear(); - m_featureBits.clear(); - getFeatureSet().clear(); - } - - @Override - public HashMap<String, Integer> getFeatureCounter() { - return m_featureCounters; - } - - static public HashMap<String, HashMap<String, Integer>> getFeatureSet() { - return m_featureSets; - } - - static public String[] reverse(HashMap<String, Integer> v) { - String[] set = new String[v.size()]; - for (Entry<String, Integer> e : v.entrySet()) { - set[e.getValue()] = e.getKey(); - } - return set; - } - -} diff --git a/dependencyParser/mate-tools/src/is2/data/MFC.java b/dependencyParser/mate-tools/src/is2/data/MFC.java deleted file mode 100644 index 859a8ce..0000000 --- a/dependencyParser/mate-tools/src/is2/data/MFC.java +++ /dev/null @@ -1,243 +0,0 @@ -package is2.data; - -import java.io.DataInputStream; -import java.io.DataOutputStream; -import java.io.IOException; -import java.util.HashMap; -import java.util.Map.Entry; - -import is2.util.DB; - -/** - * Map Features, do not map long to integer - * - * @author Bernd Bohnet, 17.09.2011 - */ - -final public class MFC implements IEncoderPlus { - - /** The features and its values */ - private final HashMap<String, HashMap<String, Integer>> m_featureSets = new HashMap<String, HashMap<String, Integer>>(); - - /** The feature class and the number of values */ - private final HashMap<String, Integer> m_featureCounters = new HashMap<String, Integer>(); - - /** The number of bits needed to encode a feature */ - final HashMap<String, Integer> m_featureBits = new HashMap<String, Integer>(); - - /** Integer counter for long2int */ - private int count = 0; - - public MFC() { - } - - public int size() { - return count; - } - - /** - * Register an attribute class, if it not exists and add a possible value - * - * @param type - * @param type2 - */ - @Override - final public int register(String a, String v) { - - synchronized (m_featureCounters) { - - HashMap<String, Integer> fs = getFeatureSet().get(a); - if (fs == null) { - fs = new HashMap<String, Integer>(); - getFeatureSet().put(a, fs); - fs.put(NONE, 0); - getFeatureCounter().put(a, 1); - } - - Integer i = fs.get(v); - if (i == null) { - Integer c = getFeatureCounter().get(a); - fs.put(v, c); - c++; - getFeatureCounter().put(a, c); - return c - 1; - } else - return i; - } - } - - /** - * Calculates the number of bits needed to encode a feature - */ - public void calculateBits() { - - for (Entry<String, Integer> e : getFeatureCounter().entrySet()) { - int bits = (int) Math.ceil((Math.log(e.getValue() + 1) / Math.log(2))); - m_featureBits.put(e.getKey(), bits); - } - - // System.out.println("total number of needed bits "+total); - } - - @Override - public String toString() { - - StringBuffer content = new StringBuffer(); - for (Entry<String, Integer> e : getFeatureCounter().entrySet()) { - content.append(e.getKey() + " " + e.getValue()); - content.append(':'); - // HashMap<String,Integer> vs = getFeatureSet().get(e.getKey()); - content.append(getFeatureBits(e.getKey())); - - /* - * if (vs.size()<120) for(Entry<String,Integer> e2 : vs.entrySet()) - * { content.append(e2.getKey()+" ("+e2.getValue()+") "); } - */ - content.append('\n'); - - } - return content.toString(); - } - - final public short getFeatureBits(String a) { - if (m_featureBits.get(a) == null) - return 0; - return (short) m_featureBits.get(a).intValue(); - } - - /** - * Get the integer place holder of the string value v of the type a - * - * @param t - * the type - * @param v - * the value - * @return the integer place holder of v - */ - @Override - final public int getValue(String t, String v) { - - if (m_featureSets.get(t) == null) - return -1; - Integer vi = m_featureSets.get(t).get(v); - if (vi == null) - return -1; // stop && - return vi.intValue(); - } - - /** - * Static version of getValue - * - * @see getValue - */ - final public int getValueS(String a, String v) { - - if (m_featureSets.get(a) == null) - return -1; - Integer vi = m_featureSets.get(a).get(v); - if (vi == null) - return -1; // stop && - return vi.intValue(); - } - - public int hasValue(String a, String v) { - - Integer vi = m_featureSets.get(a).get(v); - if (vi == null) - return -1; - return vi.intValue(); - } - - public static String printBits(int k) { - StringBuffer s = new StringBuffer(); - for (int i = 0; i < 31; i++) { - s.append((k & 0x00000001) == 1 ? '1' : '0'); - k = k >> 1; - - } - s.reverse(); - return s.toString(); - } - - /** - * Maps a long to a integer value. This is very useful to save memory for - * sparse data long values - * - * @param l - * @return the integer - */ - static public int misses = 0; - static public int good = 0; - - /** - * Write the data - * - * @param dos - * @throws IOException - */ - public void writeData(DataOutputStream dos) throws IOException { - dos.writeInt(getFeatureSet().size()); - // DB.println("write"+getFeatureSet().size()); - for (Entry<String, HashMap<String, Integer>> e : getFeatureSet().entrySet()) { - dos.writeUTF(e.getKey()); - dos.writeInt(e.getValue().size()); - - for (Entry<String, Integer> e2 : e.getValue().entrySet()) { - - if (e2.getKey() == null) - DB.println("key " + e2.getKey() + " value " + e2.getValue() + " e -key " + e.getKey()); - dos.writeUTF(e2.getKey()); - dos.writeInt(e2.getValue()); - - } - - } - } - - public void read(DataInputStream din) throws IOException { - - int size = din.readInt(); - for (int i = 0; i < size; i++) { - String k = din.readUTF(); - int size2 = din.readInt(); - - HashMap<String, Integer> h = new HashMap<String, Integer>(); - getFeatureSet().put(k, h); - for (int j = 0; j < size2; j++) { - h.put(din.readUTF(), din.readInt()); - } - getFeatureCounter().put(k, size2); - } - - count = size; - // stop(); - calculateBits(); - } - - /** - * Clear the data - */ - public void clearData() { - getFeatureSet().clear(); - m_featureBits.clear(); - getFeatureSet().clear(); - } - - @Override - public HashMap<String, Integer> getFeatureCounter() { - return m_featureCounters; - } - - public HashMap<String, HashMap<String, Integer>> getFeatureSet() { - return m_featureSets; - } - - public String[] reverse(HashMap<String, Integer> v) { - String[] set = new String[v.size()]; - for (Entry<String, Integer> e : v.entrySet()) { - set[e.getValue()] = e.getKey(); - } - return set; - } - -} diff --git a/dependencyParser/mate-tools/src/is2/data/MFO.java b/dependencyParser/mate-tools/src/is2/data/MFO.java deleted file mode 100755 index a8bc441..0000000 --- a/dependencyParser/mate-tools/src/is2/data/MFO.java +++ /dev/null @@ -1,380 +0,0 @@ -package is2.data; - -import java.io.DataInputStream; -import java.io.DataOutputStream; -import java.io.IOException; -import java.util.HashMap; -import java.util.Map.Entry; - -import is2.util.DB; - -/** - * Map Features, do not map long to integer - * - * @author Bernd Bohnet, 20.09.2009 - */ - -final public class MFO implements IEncoderPlus { - - /** The features and its values */ - static private final HashMap<String, HashMap<String, Integer>> m_featureSets = new HashMap<String, HashMap<String, Integer>>(); - - /** The feature class and the number of values */ - static private final HashMap<String, Integer> m_featureCounters = new HashMap<String, Integer>(); - - /** The number of bits needed to encode a feature */ - static final HashMap<String, Integer> m_featureBits = new HashMap<String, Integer>(); - - final public static String NONE = "<None>"; - - final public static class Data4 { - public int shift; - public short a0, a1, a2, a3, a4, a5, a6, a7, a8, a9; - public int v0, v1, v2, v3, v4, v5, v6, v7, v8, v9; - - final public long calcs(int b, long v, long l) { - if (l < 0) - return l; - l |= v << shift; - shift += b; - return l; - } - - } - - public MFO() { - } - - /** - * Register an attribute class, if it not exists and add a possible value - * - * @param type - * @param type2 - */ - @Override - final public int register(String a, String v) { - - HashMap<String, Integer> fs = getFeatureSet().get(a); - if (fs == null) { - fs = new HashMap<String, Integer>(); - getFeatureSet().put(a, fs); - fs.put(NONE, 0); - getFeatureCounter().put(a, 1); - } - Integer c = getFeatureCounter().get(a); - - Integer i = fs.get(v); - if (i == null) { - fs.put(v, c); - c++; - getFeatureCounter().put(a, c); - return c - 1; - } else - return i; - } - - /** - * Calculates the number of bits needed to encode a feature - */ - public void calculateBits() { - - for (Entry<String, Integer> e : getFeatureCounter().entrySet()) { - int bits = (int) Math.ceil((Math.log(e.getValue() + 1) / Math.log(2))); - m_featureBits.put(e.getKey(), bits); - } - - // System.out.println("total number of needed bits "+total); - } - - @Override - public String toString() { - - StringBuffer content = new StringBuffer(); - for (Entry<String, Integer> e : getFeatureCounter().entrySet()) { - content.append(e.getKey() + " " + e.getValue()); - content.append(':'); - // HashMap<String,Integer> vs = getFeatureSet().get(e.getKey()); - content.append(getFeatureBits(e.getKey())); - - /* - * if (vs.size()<120) for(Entry<String,Integer> e2 : vs.entrySet()) - * { content.append(e2.getKey()+" ("+e2.getValue()+") "); } - */ - content.append('\n'); - - } - return content.toString(); - } - - static final public long calcs(Data4 d, int b, long v, long l) { - if (l < 0) - return l; - l |= v << d.shift; - d.shift += b; - return l; - } - - static final public short getFeatureBits(String a) { - return (short) m_featureBits.get(a).intValue(); - } - - /** - * Get the integer place holder of the string value v of the type a - * - * @param t - * the type - * @param v - * the value - * @return the integer place holder of v - */ - @Override - final public int getValue(String t, String v) { - - if (m_featureSets.get(t) == null) - return -1; - Integer vi = m_featureSets.get(t).get(v); - if (vi == null) - return -1; // stop && - return vi.intValue(); - } - - /** - * Static version of getValue - * - * @see getValue - */ - static final public int getValueS(String a, String v) { - - if (m_featureSets.get(a) == null) - return -1; - Integer vi = m_featureSets.get(a).get(v); - if (vi == null) - return -1; // stop && - return vi.intValue(); - } - - public int hasValue(String a, String v) { - - Integer vi = m_featureSets.get(a).get(v); - if (vi == null) - return -1; - return vi.intValue(); - } - - final public long calc2(Data4 d) { - - if (d.v0 < 0 || d.v1 < 0) - return -1; - // if (d.v1<0||d.v2<0) return -1; - - long l = d.v0; - short shift = d.a0; - l |= (long) d.v1 << shift; - shift += d.a1; - // l |= (long)d.v2<<shift; - d.shift = shift; - - // d.shift=; - return l; - } - - final public long calc3(Data4 d) { - - if (d.v0 < 0 || d.v1 < 0 || d.v2 < 0) - return -1; - // if (d.v1<0||d.v2<0) return -1; - - long l = d.v0; - short shift = d.a0; - l |= (long) d.v1 << shift; - shift += d.a1; - l |= (long) d.v2 << shift; - d.shift = shift + d.a2; - - // d.shift=; - return l; - } - - final public long calc4(Data4 d) { - if (d.v0 < 0 || d.v1 < 0 || d.v2 < 0 || d.v3 < 0) - return -1; - - long l = d.v0; - int shift = d.a0; - l |= (long) d.v1 << shift; - shift += d.a1; - l |= (long) d.v2 << shift; - shift += d.a2; - l |= (long) d.v3 << shift; - d.shift = shift + d.a3; - - return l; - } - - final public long calc5(Data4 d) { - - if (d.v0 < 0 || d.v1 < 0 || d.v2 < 0 || d.v3 < 0 || d.v4 < 0) - return -1; - - long l = d.v0; - int shift = d.a0; - l |= (long) d.v1 << shift; - shift += d.a1; - l |= (long) d.v2 << shift; - shift += d.a2; - l |= (long) d.v3 << shift; - shift += d.a3; - l |= (long) d.v4 << shift; - d.shift = shift + d.a4; - - return l; - } - - static final public long calc6(Data4 d) { - - if (d.v0 < 0 || d.v1 < 0 || d.v2 < 0 || d.v3 < 0 || d.v4 < 0 || d.v5 < 0) - return -1; - - long l = d.v0; - int shift = d.a0; - l |= (long) d.v1 << shift; - shift += d.a1; - l |= (long) d.v2 << shift; - shift += d.a2; - l |= (long) d.v3 << shift; - shift += d.a3; - l |= (long) d.v4 << shift; - shift += d.a4; - l |= (long) d.v5 << shift; - d.shift = shift + d.a5; - - return l; - } - - final public long calc7(Data4 d) { - - if (d.v0 < 0 || d.v1 < 0 || d.v2 < 0 || d.v3 < 0 || d.v4 < 0 || d.v5 < 0 || d.v6 < 0) - return -1; - - long l = d.v0; - int shift = d.a0; - l |= (long) d.v1 << shift; - shift += d.a1; - l |= (long) d.v2 << shift; - shift += d.a2; - l |= (long) d.v3 << shift; - shift += d.a3; - l |= (long) d.v4 << shift; - shift += d.a4; - l |= (long) d.v5 << shift; - shift += d.a5; - l |= (long) d.v6 << shift; - d.shift = shift + d.a6; - - return l; - } - - final public long calc8(Data4 d) { - - if (d.v0 < 0 || d.v1 < 0 || d.v2 < 0 || d.v3 < 0 || d.v4 < 0 || d.v5 < 0 || d.v6 < 0 || d.v7 < 0) - return -1; - - long l = d.v0; - int shift = d.a0; - l |= (long) d.v1 << shift; - shift += d.a1; - l |= (long) d.v2 << shift; - shift += d.a2; - l |= (long) d.v3 << shift; - shift += d.a3; - l |= (long) d.v4 << shift; - shift += d.a4; - l |= (long) d.v5 << shift; - shift += d.a5; - l |= (long) d.v6 << shift; - shift += d.a6; - l |= (long) d.v7 << shift; - d.shift = shift + d.a7; - - return l; - } - - /** - * Maps a long to a integer value. This is very useful to save memory for - * sparse data long values - * - * @param node - * @return the integer - */ - static public int misses = 0; - static public int good = 0; - - /** - * Write the data - * - * @param dos - * @throws IOException - */ - public void writeData(DataOutputStream dos) throws IOException { - dos.writeInt(getFeatureSet().size()); - for (Entry<String, HashMap<String, Integer>> e : getFeatureSet().entrySet()) { - dos.writeUTF(e.getKey()); - dos.writeInt(e.getValue().size()); - - for (Entry<String, Integer> e2 : e.getValue().entrySet()) { - - if (e2.getKey() == null) - DB.println("key " + e2.getKey() + " value " + e2.getValue() + " e -key " + e.getKey()); - dos.writeUTF(e2.getKey()); - dos.writeInt(e2.getValue()); - - } - - } - } - - public void read(DataInputStream din) throws IOException { - - int size = din.readInt(); - for (int i = 0; i < size; i++) { - String k = din.readUTF(); - int size2 = din.readInt(); - - HashMap<String, Integer> h = new HashMap<String, Integer>(); - getFeatureSet().put(k, h); - for (int j = 0; j < size2; j++) { - h.put(din.readUTF(), din.readInt()); - } - getFeatureCounter().put(k, size2); - } - - calculateBits(); - } - - /** - * Clear the data - */ - static public void clearData() { - getFeatureSet().clear(); - m_featureBits.clear(); - getFeatureSet().clear(); - } - - @Override - public HashMap<String, Integer> getFeatureCounter() { - return m_featureCounters; - } - - static public HashMap<String, HashMap<String, Integer>> getFeatureSet() { - return m_featureSets; - } - - static public String[] reverse(HashMap<String, Integer> v) { - String[] set = new String[v.size()]; - for (Entry<String, Integer> e : v.entrySet()) { - set[e.getValue()] = e.getKey(); - } - return set; - } - -} diff --git a/dependencyParser/mate-tools/src/is2/data/Open.java b/dependencyParser/mate-tools/src/is2/data/Open.java deleted file mode 100755 index d9bf0e6..0000000 --- a/dependencyParser/mate-tools/src/is2/data/Open.java +++ /dev/null @@ -1,38 +0,0 @@ -package is2.data; - -final public class Open { - - public float p; - short s, e, label; - byte dir; - - Closed left; - Closed right; - - public Open(short s, short t, short dir, short label, Closed left, Closed right, float p) { - this.s = s; - this.e = t; - this.label = label; - this.dir = (byte) dir; - this.left = left; - this.right = right; - this.p = p; - } - - void create(Parse parse) { - if (dir == 0) { - parse.heads[s] = e; - if (label != -1) - parse.labels[s] = label; - } else { - parse.heads[e] = s; - if (label != -1) - parse.labels[e] = label; - } - if (left != null) - left.create(parse); - if (right != null) - right.create(parse); - } - -} diff --git a/dependencyParser/mate-tools/src/is2/data/PSTree.java b/dependencyParser/mate-tools/src/is2/data/PSTree.java deleted file mode 100644 index e916548..0000000 --- a/dependencyParser/mate-tools/src/is2/data/PSTree.java +++ /dev/null @@ -1,745 +0,0 @@ -/** - * - */ -package is2.data; - -import java.util.ArrayList; -import java.util.Collections; - -import is2.util.DB; - -/** - * @author Dr. Bernd Bohnet, 17.01.2011 - * - * - */ -public class PSTree { - - int wordCount = 0; - public String entries[]; - public String lemmas[]; - public int head[]; - public String pos[]; - public int[] ok; - public int non; - public int terminalCount; - public String[] morph; - - public int[] forms; - public int[] phrases; - public int[][] psfeats; - public int[] ppos; - - /** - * @param d - */ - public PSTree(SentenceData09 d) { - create(d.length() - 1, d.length() * 20); - for (int i = 1; i < d.length(); i++) { - entries[i - 1] = d.forms[i]; - pos[i - 1] = d.ppos[i]; - } - } - - /** - * Create an undefined phrase tree - */ - public PSTree() { - } - - /** - * @param terminals - * @param nonTerminals - */ - public void create(int terminals, int nonTerminals) { - entries = new String[terminals + nonTerminals]; - pos = new String[terminals + nonTerminals]; - head = new int[terminals + nonTerminals]; - lemmas = new String[terminals + nonTerminals]; - morph = new String[terminals + nonTerminals]; - non = terminals; - wordCount = terminals; - - for (int i = terminals + 1; i < head.length; i++) - head[i] = -1; - } - - @Override - public String toString() { - - StringBuffer s = new StringBuffer(); - - for (int i = 0; i < entries.length; i++) { - if (head[i] == -1 && entries[i] == null) - break; - - s.append(i + "\t" + pos[i] + "\t" + entries[i] + "\t" + head[i] + (ok == null ? "" : ("\t" + (ok[i] == 1))) - + " \n"); - - } - // DB.println("entries "+entries.length); - return s.toString(); - } - - /** - * @return - */ - public boolean containsNull() { - for (int k = 0; k < wordCount - 1; k++) { - if (entries[k] == null) - return true; - } - return false; - } - - public int equals(SentenceData09 s) { - - int j = 1; // starts with root - for (int i = 0; i < terminalCount - 1; i++) { - - // if (s.forms[j].equals("erschrekkend")) s.forms[j]="erschreckend"; - - if (s.forms.length < j) { - DB.println("" + s + " " + this.toString()); - return i; - - } - - if (!entries[i].equals(s.forms[j])) { - // System.out.println("ps "+entries[i]+" != ds "+s.forms[j]); - // Rolls-Royce - if (entries[i].startsWith(s.forms[j]) && s.forms.length > i + 2 && s.forms[j + 1].equals("-")) { - j += 2; - if (entries[i].contains(s.forms[j - 1]) && s.forms.length > i + 3 && s.forms[j + 1].equals("-")) { - j += 2; // && - // System.out.println("s.forms[j] "+s.forms[j]+" - // s.forms[j-1] "+s.forms[j-1]+" "+entries[i]); - if (entries[i].contains(s.forms[j - 1]) && s.forms.length > i + 3 - && s.forms[j + 1].equals("-")) { - j += 2; // && - // System.out.println("s.forms[j] "+s.forms[j]+" - // s.forms[j-1] "+s.forms[j-1]+" "+entries[i]); - } - } - // Interstate\/Johnson - } else if (entries[i].startsWith(s.forms[j]) && s.forms.length > i + 2 && s.forms[j + 1].equals("/")) { - j += 2; - if (entries[i].contains(s.forms[j - 1]) && s.forms.length > i + 3 && s.forms[j + 1].equals("/")) { - j += 2; // && - // System.out.println("s.forms[j] "+s.forms[j]+" - // s.forms[j-1] "+s.forms[j-1]+" "+entries[i]); - } - - // U.S.-Japan -> U . S . - Japan - } else if (entries[i].startsWith(s.forms[j]) && s.forms.length > i + 2 && s.forms[j + 1].equals(".")) { - j += 2; - if (entries[i].contains(s.forms[j - 1]) && s.forms.length > i + 3 && s.forms[j + 1].equals(".")) { - j += 2; // && - // System.out.println("s.forms[j] "+s.forms[j]+" - // s.forms[j-1] "+s.forms[j-1]+" "+entries[i]); - } - } else if (entries[i].startsWith(s.forms[j]) && s.forms.length > i + 1 && s.forms[j + 1].equals("'S")) { - j += 1; - - } else { - - // chech those !!! - // System.out.print("entry "+entries[i]+" form - // "+s.forms[j]+" "); - return j; - } - - } - j++; - - } - - // without root - return s.length(); - // return j; - - } - - /** - * @param dn - * @return - */ - public int getPS(int dn) { - - return this.head[dn - 1]; - } - - /** - * @param dn - * @param n - * @param commonHead - * the common head in the phrase structure - * @return - */ - public String getChain(int dn, int n, int commonHead) { - - int pdn = dn - 1; - // int phraseHead =head[pdh]; - - // System.out.println("phrase head "+phraseHead+" common head - // "+commonHead); - - int[] ch = new int[20]; - int head = this.head[pdn]; - int i = 0; - ch[i++] = head; - while (commonHead != head && head != 0) { - - head = this.head[head]; - ch[i++] = head; - } - StringBuffer chain = new StringBuffer(); - - for (int k = 0; k < i; k++) { - chain.append(entries[ch[k]]).append(" "); - } - return chain.toString(); - } - - /** - * @param dn - * @param n - * @return - */ - public int getCommonHead(int d, int dh) { - int pdh = this.getPS(dh), pd = this.getPS(d); - - ArrayList<Integer> path2root = getPath2Root(pdh); - - // System.out.println("path 2 root "+path2root+" pdh "+pdh); - - for (int n : path2root) { - int candidateHead = pd; - while (candidateHead != 0 && candidateHead != -1) { - if (n == candidateHead) - return n; - candidateHead = this.head[candidateHead]; - } - } - return -1; - } - - /** - * @param pdh - */ - private ArrayList<Integer> getPath2Root(int pdh) { - ArrayList<Integer> path = new ArrayList<Integer>(); - - // restrict the number in case its a cycle which should never be - for (int k = 0; k < 100; k++) { - if (pdh == -1) - break; - path.add(pdh); - pdh = this.head[pdh]; - if (pdh == 0) - break; - } - return path; - } - - /** - * Get operations to create root see operation in method getOperation - * - * @param pr - */ - public String getOperationRoot(int pr) { - - StringBuffer o = new StringBuffer(); - int h = pr; - int[] path = new int[10]; - // System.out.println(" start node "+pr); - int k = 0; - for (; k < 10; k++) { - h = head[h]; - if (h == -1) { - break; - } - path[k] = h; - if (h == 0) { - break; - } - - } - k -= 2; - - boolean first = true; - for (; k >= 0; k--) { - - // create phrase - if (first) { - o.append("c:").append(entries[path[k]]); - first = false; - } - - // insert and create phrase - else { - o.append(":ci:").append(entries[path[k]]); - } - } - - // insert dependent node - // if (o.length()>0) - o.append(":in:d"); - // else o.append("in:d"); // insert root into nothing - return o.toString(); - } - - /** - * Create operation to include dependency edges in phrase structure - * Operations: c - create ; i - insert ; in - insert (dependent) node ; up:X - * go the (phrase) X up ci create and insert ... - * - * @param dn - * @param n - * @param commonHead - * @return - */ - public String getOperation(int dn, int n, int commonHead) { - - StringBuffer o = new StringBuffer(); - - // from n move up to common head, if needed - int ph = n - 1, pd = dn - 1; - - int[] path = new int[20]; - int h = ph; - - boolean nth = false; - for (int k = 0; k < 10; k++) { - h = head[h]; - path[k] = h; - if (nth) - o.append(':'); - o.append("up:" + entries[h]); - nth = true; - if (h == commonHead) - break; - } - - // from common head to the node - int k = 0; - h = pd; - for (; k < 10; k++) { - h = head[h]; - path[k] = h; - if (h == commonHead) { - break; - } - - } - k -= 1; - - // boolean first=true; - for (; k >= 0; k--) { - - // create phrase - if (!nth) { - o.append("ci:").append(entries[path[k]]); - nth = true; - } - - // insert and create phrase - else { - o.append(":ci:").append(entries[path[k]]); - } - } - - // insert dependent node - o.append(":in:d"); - - return o.toString(); - } - - /** - * @param ph - * node in the phrase structure corresponding to the head in the - * dependency structure - * @param pt - * node in the prhase structure corresponding to the dependent in - * the ds. - * @param check - * @return rules was applicable - */ - public boolean exec(String r, int ph, int pt, boolean check) { - - String o[] = r.split(":"); - - int last = -1, headP = -1; - - // create root node - - // System.out.println("operation "+r+" "+ph+" "+pt); - boolean done = true; - for (int i = 0; i < o.length; i++) { - - if (o[i].equals("c")) { - if (check) - return true; - - if (ph < 0) { - last = non++; - } - - entries[non] = o[++i]; // create - head[pt] = non; - head[non] = last; // insert into root - last = non++; - } else if (o[i].equals("ci")) { - if (check) - return true; - entries[non] = o[++i]; // create - head[non] = last; // insert - last = non; - non++; - } else if (o[i].equals("in") && o[i + 1].equals("d")) { - if (check) - return true; - head[pt] = last; // insert - i++; // move forward because of 'd' - } else if (o[i].equals("up")) { - - if (ph == -1) { - // System.out.println("ph is -1 please check this "+ph+" - // there is a bug "); - return false; - } - - if (headP == -1) - headP = head[ph]; - else - headP = head[headP]; - - try { - if (headP == -1 || entries[headP] == null || !entries[headP].equals(o[i + 1])) - return false; - - } catch (Exception e) { - e.printStackTrace(); - System.out.println( - "" + entries[headP] + " o[i+1] " + o[i + 1] + " " + headP + " " + this.terminalCount); - // System.out.println(""+ this.toString()); - System.exit(0); - } - - i++; - last = headP; - } else { - done = false; - } - - } - - return done; - } - - /** - * More tolerant mapping - * - * @param ph - * node in the phrase structure corresponding to the head in the - * dependency structure - * @param pt - * node in the prhase structure corresponding to the dependent in - * the ds. - * @param check - * @return rules was applicable - */ - public boolean execT(String r, int ph, int pt, boolean check) { - - String o[] = r.split(":"); - - int last = -1, headP = -1; - - int up = 0; - - boolean done = true; - for (int i = 0; i < o.length; i++) { - - if (o[i].equals("c")) { - if (check) - return true; - - // create root node - if (ph < 0) { - last = non++; - } - - entries[non] = o[++i]; // create - head[pt] = non; - head[non] = last; // insert into root - last = non++; - } else if (o[i].equals("ci")) { - - if (check) - return true; - entries[non] = o[++i]; // create - head[non] = last; // insert - last = non; - non++; - } else if (o[i].equals("in") && o[i + 1].equals("d")) { - if (check) - return true; - - // DB.println("hallo"); - - if (last != -1) - head[pt] = last; // insert - - // i am not sure if this does much good? - - // if (last ==-1) - - // done=true; - - i++; // move forward because of 'd' - - } else if (o[i].equals("up")) { - up++; - if (ph == -1) { - return false; - } - - if (headP == -1) - headP = head[ph]; - else - headP = head[headP]; - - try { - - // tolerant mapping - if (headP == -1 || entries[headP] == null || ((!entries[headP].equals(o[i + 1])) && up > 1)) - return false; // >1 - // && entries[headP].charAt(0)!=o[i+1].charAt(0) - } catch (Exception e) { - e.printStackTrace(); - System.out.println( - "" + entries[headP] + " o[i+1] " + o[i + 1] + " " + headP + " " + this.terminalCount); - } - - i++; - last = headP; - } else { - done = false; - } - - } - - return done; - } - - public final static boolean INSERT_NEWLINE = true; - - /** - * Convert to bracket format - * - * @param newLine - * @return - */ - public String toPennBracket(boolean newLine) { - - StringBuffer b = new StringBuffer(); - ArrayList<Integer> current = null;// = new ArrayList<Integer>(); - int open = 0; - for (int i = 0; i < terminalCount; i++) { - ArrayList<Integer> path = getPathToRoot(i); - - ArrayList<Integer> diff = getDiffPath(path, current); - - boolean spaces = false; - - ArrayList<Integer> common = this.getDiffCommon(path, current); - - if (current != null && (current.size() > common.size())) { - - // close brackets - for (int bc = 0; bc < current.size() - common.size(); bc++) { - b.append(")"); - open--; - } - if (diff.size() == 0 && newLine) - b.append("\n"); - spaces = true; - } - - if (i != 0 && diff.size() > 0 && newLine) - b.append("\n").append(createSpaces(open)); - - for (int k = diff.size() - 1; k >= 0; k--) { - open++; - b.append("(" + (entries[path.get(k)] == null ? " " : entries[path.get(k)])); - if (k != 0 && path.size() - 1 != k && newLine) - b.append("\n").append(createSpaces(open)); - spaces = false; - } - if (spaces) - b.append(createSpaces(open)); - else - b.append(" "); - - String term = entries[i]; - if (term.equals("(")) - term = "-LRB-"; - if (term.equals(")")) - term = "-RRB-"; - if (term.equals("{")) - term = "-LCB-"; - if (term.equals("}")) - term = "-RCB-"; - - String ps = pos[i]; - if (ps.equals("(")) - ps = "-LRB-"; - if (ps.equals("$(")) - ps = "-LRB-"; - - if (ps.equals(")")) - ps = "-RRB-"; - if (ps.equals("{")) - ps = "-LCB-"; - if (ps.equals("}")) - ps = "-RCB-"; - - b.append("(").append(ps).append(" ").append(term).append(')'); - current = path; - // break; - } - for (; open > 0; open--) { - b.append(")"); - } - // b.append("\n"); - - return b.toString(); - } - - static int cnt = 0; - - /** - * @param path - * @param current - * @return - */ - private ArrayList<Integer> getDiffPath(ArrayList<Integer> path, ArrayList<Integer> current) { - if (current == null) - return path; - - ArrayList<Integer> common = new ArrayList<Integer>(); - - int pindex = path.size() - 1; - int cindex = current.size() - 1; - - while (cindex >= 0 && pindex >= 0) { - - if (path.get(pindex) == current.get(cindex)) { - cindex--; - pindex--; - } else - break; - } - - for (int k = 0; k <= pindex; k++) { - common.add(path.get(k)); - } - - return common; - } - - private ArrayList<Integer> getDiffCommon(ArrayList<Integer> path, ArrayList<Integer> current) { - if (current == null) - return path; - - ArrayList<Integer> common = new ArrayList<Integer>(); - - int pindex = path.size() - 1; - int cindex = current.size() - 1; - - while (cindex >= 0 && pindex >= 0) { - - if (path.get(pindex) == current.get(cindex)) { - common.add(path.get(pindex)); - cindex--; - pindex--; - } else - break; - } - - Collections.reverse(common); - // System.out.println("common "+pindex+" "+common); - - return common; - } - - /** - * @param i - * @return - */ - private StringBuffer createSpaces(int i) { - StringBuffer s = new StringBuffer(); - for (int k = 0; k < i; k++) - s.append(" "); - return s; - } - - /** - * @param i - * @return - */ - private ArrayList<Integer> getPathToRoot(int i) { - - ArrayList<Integer> path = new ArrayList<Integer>(); - - int h = i; - while (true) { - h = this.head[h]; - if (h < this.terminalCount || path.contains(h)) - break; - path.add(h); - } - - // Collections.reverse(list) - - return path; - } - - public String conll09() { - - StringBuilder s = new StringBuilder(); - for (int i = 0; i < this.terminalCount; i++) { - if (head[i] == -1 && entries[i] == null) - break; - - s.append((i + 1)).append('\t').append(entries[i]).append("\t_\t_\t").append(pos[i]) - .append("\t_\t_\t_\t_\t_\t_\t_\t_\n"); - - } - - return s.toString(); - } - - /** - * @param phead - * @return - */ - public int[] getChilds(int head) { - - int count = 0; - for (int i = 0; i < this.entries.length; i++) { - if (this.head[i] == head) - count++; - } - - int[] clds = new int[count]; - count = 0; - for (int i = 0; i < this.entries.length; i++) { - if (this.head[i] == head) - clds[count++] = i; - } - - return clds; - } - -} diff --git a/dependencyParser/mate-tools/src/is2/data/Parameter.java b/dependencyParser/mate-tools/src/is2/data/Parameter.java deleted file mode 100644 index 7b1f870..0000000 --- a/dependencyParser/mate-tools/src/is2/data/Parameter.java +++ /dev/null @@ -1,13 +0,0 @@ -/** - * - */ -package is2.data; - -/** - * @author Dr. Bernd Bohnet, 23.12.2010 - * - * - */ -public class Parameter { - -} diff --git a/dependencyParser/mate-tools/src/is2/data/ParametersFloat.java b/dependencyParser/mate-tools/src/is2/data/ParametersFloat.java deleted file mode 100755 index 17837ef..0000000 --- a/dependencyParser/mate-tools/src/is2/data/ParametersFloat.java +++ /dev/null @@ -1,181 +0,0 @@ -package is2.data; - -import java.io.DataInputStream; -import java.io.DataOutputStream; -import java.io.IOException; - -import is2.util.DB; - -final public class ParametersFloat { - - public float[] parameters; - public float[] total; - - public ParametersFloat(int size) { - - parameters = new float[size]; - total = new float[size]; - for (int i = 0; i < parameters.length; i++) { - parameters[i] = 0F; - total[i] = 0F; - } - } - - /** - * @param parameters2 - */ - public ParametersFloat(float[] p) { - parameters = p; - } - - public void average(double avVal) { - for (int j = 0; j < total.length; j++) { - parameters[j] = total[j] / ((float) avVal); - } - total = null; - } - - public ParametersFloat average2(double avVal) { - float[] px = new float[this.parameters.length]; - for (int j = 0; j < total.length; j++) { - px[j] = total[j] / ((float) avVal); - } - ParametersFloat pf = new ParametersFloat(px); - return pf; - } - - public void update(FV pred, FV act, float upd, float err) { - - float lam_dist = act.getScore(parameters, false) - pred.getScore(parameters, false); - float loss = err - lam_dist; - - FV dist = act.getDistVector(pred); - - float alpha; - float A = dist.dotProduct(dist); - if (A <= 0.0000000000000001) - alpha = 0.0f; - else - alpha = loss / A; - - // alpha = Math.min(alpha, 0.00578125F); - - dist.update(parameters, total, alpha, upd, false); - - } - - public void update(FV pred, FV act, float upd, float err, float C) { - - float lam_dist = act.getScore(parameters, false) - pred.getScore(parameters, false); - float loss = err - lam_dist; - - FV dist = act.getDistVector(pred); - - float alpha; - float A = dist.dotProduct(dist); - if (A <= 0.0000000000000001) - alpha = 0.0f; - else - alpha = loss / A; - - alpha = Math.min(alpha, C); - - dist.update(parameters, total, alpha, upd, false); - - } - - public double update(FV a, double b) { - - double A = a.dotProduct(a); - if (A <= 0.0000000000000000001) - return 0.0; - return b / A; - } - - public double getScore(FV fv) { - if (fv == null) - return 0.0F; - return fv.getScore(parameters, false); - - } - - final public void write(DataOutputStream dos) throws IOException { - - dos.writeInt(parameters.length); - for (float d : parameters) - dos.writeFloat(d); - - } - - public void read(DataInputStream dis) throws IOException { - - parameters = new float[dis.readInt()]; - int notZero = 0; - for (int i = 0; i < parameters.length; i++) { - parameters[i] = dis.readFloat(); - if (parameters[i] != 0.0F) - notZero++; - } - - DB.println("read parameters " + parameters.length + " not zero " + notZero); - - } - - public int countNZ() { - - int notZero = 0; - for (float parameter : parameters) { - if (parameter != 0.0F) - notZero++; - } - return notZero; - - } - - public F2SF getFV() { - return new F2SF(parameters); - } - - public int size() { - return parameters.length; - } - - public void update(FVR act, FVR pred, Instances isd, int instc, Parse dx, double upd, double e, float lam_dist) { - - e++; - - float b = (float) e - lam_dist; - - FVR dist = act.getDistVector(pred); - - dist.update(parameters, total, hildreth(dist, b), upd, false); - } - - public void update(FVR pred, FVR act, float upd, float e) { - - e++; - float lam_dist = act.getScore(parameters, false) - pred.getScore(parameters, false); - - float b = e - lam_dist; - - FVR dist = act.getDistVector(pred); - - dist.update(parameters, total, hildreth(dist, b), upd, false); - } - - protected double hildreth(FVR a, double b) { - - double A = a.dotProduct(a); - if (A <= 0.0000000000000000001) - return 0.0; - return b / A; - } - - public float getScore(FVR fv) { // xx - if (fv == null) - return 0.0F; - return fv.getScore(parameters, false); - - } - -} diff --git a/dependencyParser/mate-tools/src/is2/data/Parse.java b/dependencyParser/mate-tools/src/is2/data/Parse.java deleted file mode 100755 index aa24005..0000000 --- a/dependencyParser/mate-tools/src/is2/data/Parse.java +++ /dev/null @@ -1,157 +0,0 @@ -package is2.data; - -import java.util.BitSet; - -public class Parse implements Comparable<Parse> { - - public short[] heads; - public short[] labels; - public double f1; - - public Parse() { - } - - public Parse(int i) { - heads = new short[i]; - labels = new short[i]; - - } - - /** - * @param heads2 - * @param types2 - * @param p_new - */ - public Parse(short[] heads2, short[] types2, float p_new) { - this.heads = new short[heads2.length]; - this.labels = new short[types2.length]; - // this.heads=heads2; - // this.labels=types2; - System.arraycopy(heads2, 0, heads, 0, heads.length); - System.arraycopy(types2, 0, labels, 0, labels.length); - f1 = p_new; - - } - - /** - * @param heads2 - * @param types2 - * @param p_new - */ - public Parse(String parse, float p_new) { - - // this(parse.length()/2); - - signature2parse(parse); - - f1 = p_new; - - } - - public void signature2parse(String parse) { - int p = 0; - heads = new short[parse.length() / 2]; - labels = new short[heads.length]; - // DB.println("pl "+parse.length()); - for (int k = 0; k < heads.length; k++) { - heads[k] = (short) parse.charAt(p++); - labels[k] = (short) parse.charAt(p++); - } - } - - @Override - public Parse clone() { - Parse p = new Parse(); - p.heads = new short[heads.length]; - p.labels = new short[labels.length]; - - System.arraycopy(heads, 0, p.heads, 0, heads.length); - System.arraycopy(labels, 0, p.labels, 0, labels.length); - - p.f1 = f1; - - return p; - } - - /** - * Check if it is a tree - * - * @return - */ - public boolean checkTree() { - - BitSet set = new BitSet(heads.length); - set.set(0); - return checkTree(set, 0); - - } - - /** - * @param set - * @return - */ - private boolean checkTree(BitSet set, int h) { - // System.out.print(" h "+h); - - for (int i = 0; i < heads.length; i++) { - if (heads[i] == h) { - // System.out.print(" "+i); - if (!set.get(i)) - checkTree(set, i); - set.set(i); - - } - } - - for (int i = 0; i < heads.length; i++) { - if (!set.get(i)) - return false; - } - return true; - } - - @Override - public String toString() { - StringBuilder b = new StringBuilder(); - for (int k = 0; k < this.heads.length; k++) { - b.append(k).append(" ").append(heads[k] + " ").append(this.labels[k]).append("\n"); - } - return b.toString(); - } - - /* - * (non-Javadoc) - * - * @see java.lang.Comparable#compareTo(java.lang.Object) - */ - @Override - public int compareTo(Parse o) { - - if (f1 == o.f1) - return this.signature().compareTo(o.signature()); - return f1 < o.f1 ? 1 : f1 == o.f1 ? 0 : -1; - } - - /** - * @return the signature of a parse - */ - public String signature() { - StringBuilder b = new StringBuilder(heads.length * 2); - for (int k = 0; k < heads.length; k++) { - b.append((char) heads[k]).append((char) labels[k]); - } - return b.toString(); - } - - /** - * @return the signature of a parse - */ - public StringBuilder signatureSB() { - StringBuilder b = new StringBuilder(heads.length * 2); - for (int k = 0; k < heads.length; k++) { - b.append((char) heads[k]).append((char) labels[k]); - } - return b; - } - -} diff --git a/dependencyParser/mate-tools/src/is2/data/ParseNBest.java b/dependencyParser/mate-tools/src/is2/data/ParseNBest.java deleted file mode 100644 index cb02b71..0000000 --- a/dependencyParser/mate-tools/src/is2/data/ParseNBest.java +++ /dev/null @@ -1,103 +0,0 @@ -package is2.data; - -final public class ParseNBest extends Parse { - - private String signature = null; - - // public float[] scores; - - public ParseNBest() { - } - - public ParseNBest(short[] heads2, short[] types2, float p_new) { - super(heads2, types2, p_new); - } - - public ParseNBest(int i) { - super(i); - } - - /** - * @param sig - * @param readFloat - */ - public ParseNBest(String sig, float score) { - super(sig, score); - } - - /** - * create a total order to provide replicable deterministic results - * - * @param o - * @return - */ - public int compareTo(ParseNBest o) { - if (f1 < o.f1) - return 1; - if (f1 == o.f1) { - if (signature == null) - signature = signature(); - if (o.signature == null) - o.signature = o.signature(); - return o.signature.compareTo(signature); - - } - return -1; - } - - /** - * @return the signature of a parse - */ - @Override - public String signature() { - if (signature != null) - return signature; - signature = super.signature(); - return signature; - } - - /** - * @return the signature of a parse - */ - public String signature(short[] heads, short[] labels) { - StringBuilder b = new StringBuilder(heads.length * 2); - for (int k = 0; k < heads.length; k++) { - b.append((char) heads[k]).append((char) labels[k]); - } - signature = b.toString(); - return signature; - } - - /** - * @param heads - * @param types - * @param oldP - * @param ch - * @param s - */ - public String signature(short[] heads, short[] types, short p, short ch, short l) { - StringBuilder b = new StringBuilder(heads.length * 2); - for (int k = 0; k < heads.length; k++) { - - b.append(k == ch ? (char) p : (char) heads[k]).append(k == ch ? (char) l : (char) types[k]); - } - signature = b.toString(); - return signature; - - } - - @Override - public Parse clone() { - ParseNBest p = new ParseNBest(); - p.heads = new short[heads.length]; - p.labels = new short[labels.length]; - - System.arraycopy(heads, 0, p.heads, 0, heads.length); - System.arraycopy(labels, 0, p.labels, 0, labels.length); - - p.f1 = f1; - - return p; - } - -} diff --git a/dependencyParser/mate-tools/src/is2/data/PipeGen.java b/dependencyParser/mate-tools/src/is2/data/PipeGen.java deleted file mode 100755 index 728666f..0000000 --- a/dependencyParser/mate-tools/src/is2/data/PipeGen.java +++ /dev/null @@ -1,83 +0,0 @@ -package is2.data; - -public class PipeGen { - - public static final String SENSE = "SENSE", POS = "POS", DIST = "DIST", WORD = "WORD", PRED = "PRED", ARG = "ARG", - FEAT = "F", REL = "REL", TYPE = "TYPE", CHAR = "C", FFEATS = "FF", DIR = "DIR", LA = "LA", RA = "RA"; - - public static final String GPOS = "GPOS", MID = "MID", END = "END", STR = "STR", FM = "FM", NOFEAT = "NOFEAT"; - - public static final String _0 = "0", _4 = "4", _3 = "3", _2 = "2", _1 = "1", _5 = "5", _10 = "10"; - - static public int outValue(int num1, int del) { - String out = "" + num1; - StringBuffer delS = new StringBuffer(); - for (int k = 0; k < del; k++) - delS.append('\b'); - del = out.length(); - System.out.print(delS + out); - return del; - } - - static public int outValue(int num1, int del, long last) { - String out = "" + num1 + " (" + (System.currentTimeMillis() - last) / (num1 + 1) + " ms/instance)"; - StringBuffer delS = new StringBuffer(); - for (int k = 0; k < del; k++) - delS.append('\b'); - del = out.length(); - System.out.print(delS + out); - return del; - } - - static public int outValueErr(int num1, float err, float f1, int del, long last) { - - String out = "" + num1 + " (" + (System.currentTimeMillis() - last) / (num1 + 1) + " ms/instance " - + (err / num1) + " err/instance f1=" + f1 + ") "; - StringBuffer delS = new StringBuffer(); - for (int k = 0; k < del; k++) - delS.append('\b'); - del = out.length(); - System.out.print(delS + out); - return del; - } - - static public int outValueErr(int num1, float err, float f1, int del, long last, double upd) { - String out = "" + num1 + " (" + (System.currentTimeMillis() - last) / (num1 + 1) + " ms/instance " - + (err / num1) + " err/instance f1=" + f1 + ") upd " + upd; - StringBuffer delS = new StringBuffer(); - for (int k = 0; k < del; k++) - delS.append('\b'); - del = out.length(); - System.out.print(delS + out); - return del; - } - - static public int outValueErr(int num1, float err, float f1, int del, long last, double upd, String info) { - String out = "" + num1 + " (" + (System.currentTimeMillis() - last) / (num1 + 1) + " ms/instance " - + (err / num1) + " err/instance f1=" + f1 + ") upd " + upd + " " + info; - StringBuffer delS = new StringBuffer(); - for (int k = 0; k < del; k++) - delS.append('\b'); - del = out.length(); - System.out.print(delS + out); - return del; - } - - /** - * @param cnt - * @param l - * @return - */ - public static String getSecondsPerInstnace(int cnt, long l) { - return " " + (l / (cnt * 1000f)) + " seconds/sentnece "; - } - - /** - * @param l - * @return - */ - public static String getUsedTime(long l) { - return "Used time " + ((l) / 1000f) + " seconds "; - } - -} diff --git a/dependencyParser/mate-tools/src/is2/data/PrimeFinder.java b/dependencyParser/mate-tools/src/is2/data/PrimeFinder.java deleted file mode 100644 index fab0901..0000000 --- a/dependencyParser/mate-tools/src/is2/data/PrimeFinder.java +++ /dev/null @@ -1,51 +0,0 @@ -/** - * - */ -package is2.data; - -import java.util.Arrays; - -/** - * @author Dr. Bernd Bohnet, 13.05.2010 - * - * - */ -public class PrimeFinder { - - public PrimeFinder() { - } - - public static final int nextPrime(int desiredCapacity) { - int i = Arrays.binarySearch(primeCapacities, desiredCapacity); - if (i < 0) - i = -i - 1; - return primeCapacities[i]; - } - - public static final int largestPrime = 2147483647; - private static final int primeCapacities[] = { 2147483647, 5, 11, 23, 47, 97, 197, 397, 797, 1597, 3203, 6421, - 12853, 25717, 51437, 102877, 205759, 411527, 823117, 1646237, 3292489, 6584983, 13169977, 26339969, - 52679969, 105359939, 210719881, 421439783, 842879579, 1685759167, 433, 877, 1759, 3527, 7057, 14143, 28289, - 56591, 113189, 226379, 452759, 905551, 1811107, 3622219, 7244441, 14488931, 28977863, 57955739, 115911563, - 231823147, 463646329, 927292699, 1854585413, 953, 1907, 3821, 7643, 15287, 30577, 61169, 122347, 244703, - 489407, 978821, 1957651, 3915341, 7830701, 15661423, 31322867, 62645741, 125291483, 250582987, 501165979, - 1002331963, 2004663929, 1039, 2081, 4177, 8363, 16729, 33461, 66923, 133853, 267713, 535481, 1070981, - 2141977, 4283963, 8567929, 17135863, 34271747, 68543509, 137087021, 274174111, 548348231, 1096696463, 31, - 67, 137, 277, 557, 1117, 2237, 4481, 8963, 17929, 35863, 71741, 143483, 286973, 573953, 1147921, 2295859, - 4591721, 9183457, 18366923, 36733847, 73467739, 146935499, 293871013, 587742049, 1175484103, 599, 1201, - 2411, 4831, 9677, 19373, 38747, 77509, 155027, 310081, 620171, 1240361, 2480729, 4961459, 9922933, 19845871, - 39691759, 79383533, 158767069, 317534141, 635068283, 1270136683, 311, 631, 1277, 2557, 5119, 10243, 20507, - 41017, 82037, 164089, 328213, 656429, 1312867, 2625761, 5251529, 10503061, 21006137, 42012281, 84024581, - 168049163, 336098327, 672196673, 1344393353, 3, 7, 17, 37, 79, 163, 331, 673, 1361, 2729, 5471, 10949, - 21911, 43853, 87719, 175447, 350899, 701819, 1403641, 2807303, 5614657, 11229331, 22458671, 44917381, - 89834777, 179669557, 359339171, 718678369, 1437356741, 43, 89, 179, 359, 719, 1439, 2879, 5779, 11579, - 23159, 46327, 92657, 185323, 370661, 741337, 1482707, 2965421, 5930887, 11861791, 23723597, 47447201, - 94894427, 189788857, 379577741, 759155483, 1518310967, 379, 761, 1523, 3049, 6101, 12203, 24407, 48817, - 97649, 195311, 390647, 781301, 1562611, 3125257, 6250537, 12501169, 25002389, 50004791, 100009607, - 200019221, 400038451, 800076929, 1600153859 }; - - static { - Arrays.sort(primeCapacities); - } - -} diff --git a/dependencyParser/mate-tools/src/is2/data/RandomIndex.java b/dependencyParser/mate-tools/src/is2/data/RandomIndex.java deleted file mode 100644 index 8ab61e9..0000000 --- a/dependencyParser/mate-tools/src/is2/data/RandomIndex.java +++ /dev/null @@ -1,150 +0,0 @@ -/** - * - */ -package is2.data; - -import is2.util.DB; - -/** - * @author Dr. Bernd Bohnet, 20.05.2011 - * - * - */ -public class RandomIndex implements Long2IntInterface { - - final int[] prims = { 52349171, 199951347, 89990, 5001, 32891, 17, 19, 23, 29, 31, 37, 47, 53, 59, 61, 67, 71 }; - // final int[] prims = {1,3,5,7,11,17,19,23,29,31,37,47,53,59,61,67,71}; - - final long hashFunctionModifiers[]; - - final int kbit, lbit; - final int hsize; // maximal size of hash - - final int bits; // available bits - final int moves; // needed moves to put a number into - - /** - * Creates the random functions. - * - * @param kbit - * The bits to be mapped - * @param lbit - * The left shift of the bits - * @param hsize - * The size of the featurs space (not included in the original - * algorithm) - * @param numberFunctions - * The number of the hash functions - */ - public RandomIndex(int kbit, int lbit, int hsize, int numberFunctions) { - - this.kbit = kbit; - this.lbit = lbit; - - if (hsize <= 0) - this.hsize = 67000001; // default value - else - this.hsize = hsize; - - bits = (int) Math.ceil(Math.log(this.hsize) / Math.log(2)); - - moves = (int) Math.ceil(64f / bits); - - DB.println("moves " + moves + " bits " + bits + " hsize " + hsize); - - hashFunctionModifiers = new long[numberFunctions]; - - for (int f = 0; f < numberFunctions; f++) - hashFunctionModifiers[f] = prims[f]; - } - - public int[] hash(long x) { - int[] hvals = new int[hashFunctionModifiers.length]; - - for (int k = 0; k < hashFunctionModifiers.length; k++) { - - // the original function: value = ((x+1) * hashFunctionModifiers[k] - // & m ) >> n; - - // the first part of the original function - long value = (x + 1) * hashFunctionModifiers[k]; - - // do the above >> n with a maximal size of the available hash - // values - // Shift all bits until they have been each xor-ed (^) in the range - // of the hash - // in order the have all information potentially represented there. - - for (int j = 1; j <= moves; j++) - value = value ^ (value >> (bits * j)); - - // Map the value to the range of the available space should be the - // same as (value & m) . - hvals[k] = Math.abs((int) value % hsize); - } - return hvals; - } - - public int[] hashU(long x) { - int[] hvals = new int[hashFunctionModifiers.length]; - - long y = Long.reverse(x); - for (int k = 0; k < hashFunctionModifiers.length; k++) { - - // the original function: value = ((x+1) * hashFunctionModifiers[k] - // & m ) >> n; - - // the first part of the original function - long value1 = (((y + 1) * hashFunctionModifiers[k]) /* % 2 pow 64 */ ) >> (kbit - lbit); - - // I get probably only the first part lets get the second part too - // long value2 = (((y+1>>20) * hashFunctionModifiers[k]) /* % 2 pow - // 64 */ ) >> (kbit-lbit); - - // the modulo (%) 2 pow 64 is done since the long number can not be - // larger than 2 pow 64. - // System.out.println("value "+value+" shift "+(lbit-kbit)); - hvals[k] = Math.abs((int) value1); - } - return hvals; - } - - /* - * (defun generate-hash-fn (&key (k-bit 32) (l-bit 8) verbosep constants - * (count 4)) - * - * (labels ((random-constant () (let ((a (+ (random (- (expt 2 k-bit) 1)) - * 1))) (logior a 1)))) ;; inclusive OR ensures odd number. (let ((pdiff (- - * (- k-bit l-bit)));; neg. sign to do a rightshift, see ash() (sub1 (- - * (expt 2 k-bit) 1)) (constants (copy-list constants))) (unless constants - * (loop ;; a = odd number a where 0 < a < u. until (= count (length - * constants)) do (pushnew (random-constant) constants))) (when verbosep - * (format t "~&generate-hash-fn(): using random constants: ~a~%" - * constants)) (values #'(lambda (x) (loop for a in constants ;;; always add - * 1 to x to avoid f(0)=0. collect (ash (logand (* (+ 1 x) a) sub1) pdiff))) - * constants)))) - * - */ - - /* - * (non-Javadoc) - * - * @see is2.data.Long2IntInterface#l2i(long) - */ - @Override - public int l2i(long l) { - // TODO Auto-generated method stub - return 0; - } - - /* - * (non-Javadoc) - * - * @see is2.data.Long2IntInterface#size() - */ - @Override - public int size() { - return hsize; - } - -} diff --git a/dependencyParser/mate-tools/src/is2/data/SentenceData09.java b/dependencyParser/mate-tools/src/is2/data/SentenceData09.java deleted file mode 100755 index 386fa39..0000000 --- a/dependencyParser/mate-tools/src/is2/data/SentenceData09.java +++ /dev/null @@ -1,530 +0,0 @@ -package is2.data; - -import java.io.DataInputStream; -import java.io.DataOutputStream; -import java.io.IOException; -import java.io.ObjectInputStream; -import java.io.StringWriter; -import java.util.ArrayList; - -import is2.io.CONLLWriter09; -import is2.io.IOGenerals; - -public class SentenceData09 { - - public String[] id; - public String[] forms; - - public String[] lemmas; - public String[] plemmas; - - public int[] heads; - public int[] pheads; - - public String[] labels; - public String[] plabels; - - public String[] gpos; // gold pos - public String[] ppos; - - public String feats[][]; - // public String[] split_lemma; - - public String[] sem; - public int[] semposition; - - // predicate number, argument number -> argument string - public String[][] arg; - public int[][] argposition; - - public String[] fillp; - - public String[] ofeats; - public String[] pfeats; - - public SentenceData09() { - } - - public SentenceData09(String[] forms, String[] postags, String[] labs, int[] heads) { - this.forms = forms; - gpos = postags; - labels = labs; - this.heads = heads; - } - - public SentenceData09(String[] forms, String[] lemmas, String[] postags, String[] labs, int[] heads) { - this.forms = forms; - gpos = postags; - // ppos = postags; - - labels = labs; - this.heads = heads; - this.plemmas = lemmas; - } - - public SentenceData09(String[] forms, String[] lemmas, String[] gpos, String[] ppos, String[] labs, int[] heads) { - this.forms = forms; - this.gpos = gpos; - this.ppos = ppos; - - labels = labs; - this.heads = heads; - this.plemmas = lemmas; - - } - - public SentenceData09(String[] forms, String[] lemmas, String[] gpos, String[] ppos, String[] labs, int[] heads, - String[] fillpred) { - this.forms = forms; - this.gpos = gpos; - this.ppos = ppos; - - labels = labs; - this.heads = heads; - this.plemmas = lemmas; - - fillp = fillpred; - } - - public SentenceData09(String[] forms, String[] lemmas, String[] olemmas, String[] gpos, String[] ppos, - String[] labs, int[] heads, String[] fillpred) { - this.forms = forms; - this.gpos = gpos; - this.ppos = ppos; - - labels = labs; - this.heads = heads; - this.plemmas = lemmas; - this.lemmas = olemmas; - fillp = fillpred; - } - - public SentenceData09(String[] forms, String[] olemmas, String[] lemmas, String[] gpos, String[] ppos, - String[] labs, int[] heads, String[] fillpred, String[] of, String[] pf) { - this.forms = forms; - this.gpos = gpos; - this.ppos = ppos; - - labels = labs; - this.heads = heads; - this.pheads = heads; - this.plabels = labs; - this.plemmas = lemmas; - this.lemmas = olemmas; - - this.ofeats = of; - this.pfeats = pf; - fillp = fillpred; - } - - /** - * Create an instance without root of the input instance - * - * @param instance - */ - public SentenceData09(SentenceData09 i) { - - int length = i.length() - 1; - - forms = new String[length]; - gpos = new String[length]; - ppos = new String[length]; - plemmas = new String[length]; - plabels = new String[length]; - lemmas = new String[length]; - heads = new int[length]; - pheads = new int[length]; - ofeats = new String[length]; - pfeats = new String[length]; - labels = new String[length]; - fillp = new String[length]; - id = new String[length]; - - for (int j = 0; j < length; j++) { - forms[j] = i.forms[j + 1]; - ppos[j] = i.ppos[j + 1]; - gpos[j] = i.gpos[j + 1]; - - labels[j] = i.labels[j + 1]; - heads[j] = i.heads[j + 1]; - - if (i.pheads != null) - pheads[j] = i.pheads[j + 1]; - if (i.plabels != null) - plabels[j] = i.plabels[j + 1]; - - if (i.lemmas != null) - lemmas[j] = i.lemmas[j + 1]; - - plemmas[j] = i.plemmas[j + 1]; - - if (i.ofeats != null) - ofeats[j] = i.ofeats[j + 1]; - if (i.pfeats != null) - pfeats[j] = i.pfeats[j + 1]; - - if (i.fillp != null) - fillp[j] = i.fillp[j + 1]; - if (i.id != null) - id[j] = i.id[j + 1]; - } - - } - - public void setPPos(String[] pos) { - ppos = pos; - } - - public void setLemmas(String[] lemmas) { - this.plemmas = lemmas; - } - - public void setFeats(String[] fts) { - feats = new String[fts.length][]; - for (int i = 0; i < fts.length; i++) { - feats[i] = fts[i].split("\\|"); - } - pfeats = fts; - } - - public int length() { - return forms.length; - } - - @Override - public String toString() { - // prepare the output - StringWriter sw = new StringWriter(); - CONLLWriter09 snt2str = new is2.io.CONLLWriter09(sw); - try { - snt2str.write(this, CONLLWriter09.NO_ROOT); - snt2str.finishWriting(); - return sw.toString(); - } catch (Exception e) { - e.printStackTrace(); - } - - // backup - StringBuffer sb = new StringBuffer(); - for (int k = 0; k < forms.length; k++) - sb.append(k + 1).append('\t').append(forms[k]).append('\t').append(heads[k]).append('\t').append(labels[k]) - .append('\n'); - return sw.toString(); - } - - final public void write(DataOutputStream out) throws IOException { - - out.writeInt(forms.length); - for (int k = 0; k < forms.length; k++) { - out.writeUTF(forms[k]); - out.writeUTF(ppos[k]); - out.writeUTF(gpos[k]); - out.writeInt(heads[k]); - out.writeUTF(labels[k]); - out.writeUTF(lemmas[k]); - out.writeUTF(plemmas[k]); - out.writeUTF(ofeats[k]); // needed for mtag - out.writeUTF(fillp[k]); - } - - // out.writeUTF(actParseTree); - - } - - final public void read(DataInputStream dis) throws IOException { - - int l = dis.readInt(); - - forms = new String[l]; - lemmas = new String[l]; - plemmas = new String[l]; - ppos = new String[l]; - gpos = new String[l]; - labels = new String[l]; - heads = new int[l]; - fillp = new String[l]; - ofeats = new String[l]; - - for (int k = 0; k < l; k++) { - forms[k] = dis.readUTF(); - ppos[k] = dis.readUTF(); - gpos[k] = dis.readUTF(); - heads[k] = dis.readInt(); - labels[k] = dis.readUTF(); - lemmas[k] = dis.readUTF(); - plemmas[k] = dis.readUTF(); - ofeats[k] = dis.readUTF(); - fillp[k] = dis.readUTF(); - - } - } - - private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException { - forms = (String[]) in.readObject(); - plemmas = (String[]) in.readObject(); - ppos = (String[]) in.readObject(); - heads = (int[]) in.readObject(); - labels = (String[]) in.readObject(); - } - - public void addPredicate(int i, String s) { - - int predId; - if (sem == null) { - predId = 0; - sem = new String[1]; - semposition = new int[1]; - } else { - predId = sem.length; - String p[] = new String[sem.length + 1]; - System.arraycopy(sem, 0, p, 0, sem.length); - int id[] = new int[sem.length + 1]; - System.arraycopy(semposition, 0, id, 0, semposition.length); - sem = p; - semposition = id; - } - sem[predId] = s; - semposition[predId] = i; - } - - /** - * Add an argument - * - * @param i - * the instance (the child) - * @param predId - * the id of the predicate (the head) - * @param a - * the label of the argument - */ - public void addArgument(int i, int predId, String a) { - - if (a == null || a.equals("_")) - return; - - // ensure the space for the argument in the data structure - if (arg == null) { - arg = new String[predId + 1][]; - argposition = new int[predId + 1][]; - } else if (arg.length <= predId) { - String p[][] = new String[predId + 1][]; - System.arraycopy(arg, 0, p, 0, arg.length); - arg = p; - - int id[][] = new int[predId + 1][]; - System.arraycopy(argposition, 0, id, 0, argposition.length); - argposition = id; - } - - int aId; - if (arg[predId] == null) { - aId = 0; - arg[predId] = new String[1]; - argposition[predId] = new int[1]; - } else { - aId = arg[predId].length; - String args[] = new String[arg[predId].length + 1]; - System.arraycopy(arg[predId], 0, args, 0, arg[predId].length); - arg[predId] = args; - - int argsId[] = new int[argposition[predId].length + 1]; - System.arraycopy(argposition[predId], 0, argsId, 0, argposition[predId].length); - argposition[predId] = argsId; - } - - arg[predId][aId] = a; - argposition[predId][aId] = i; - - } - - public int[] getParents() { - return heads; - } - - public String[] getLabels() { - return labels; - } - - public String printSem() { - - if (sem == null) - return ""; - StringBuilder s = new StringBuilder(); - - for (int k = 0; k < sem.length; k++) { - s.append(sem[k]).append("\n"); - - if (arg == null) { - s.append("arg == null"); - } else if (arg.length <= k) { - s.append("args.length <=k arg.length:" + arg.length + " k:" + k); - } else if (arg[k] != null) { - for (int a = 0; a < arg[k].length; a++) { - s.append(" ").append(arg[k][a]); - } - } else { - s.append("args == null "); - } - s.append('\n'); - } - return s.toString(); - } - - /** - * Initialize a instance so that a tagger, parser, etc. could be applied - * - * @param forms - */ - public void init(String[] forms) { - this.forms = forms; - heads = new int[forms.length]; - gpos = new String[forms.length]; - ppos = new String[forms.length]; - plemmas = new String[forms.length]; - feats = new String[forms.length][0]; - labels = new String[forms.length]; - } - - /** - * @param instance - * @param fillp2 - * @param i09 - */ - public void createSemantic(SentenceData09 instance) { - - this.sem = instance.sem; - this.semposition = instance.semposition; - - if (instance.semposition != null) - for (int k = 0; k < instance.semposition.length; k++) { - this.semposition[k] = instance.semposition[k] - 1; - } - - this.arg = instance.arg; - - this.argposition = instance.argposition; - - if (this.argposition != null) - for (int p = 0; p < instance.argposition.length; p++) { - if (this.argposition[p] != null) - for (int a = 0; a < instance.argposition[p].length; a++) - this.argposition[p][a] = instance.argposition[p][a] - 1; - } - - } - - /** - * - */ - public String oneLine() { - - StringBuffer o = new StringBuffer(); - for (int i = 1; i < this.length(); i++) { - - if (i != 1) - o.append(" "); - o.append(this.forms[i]); - } - return o.toString(); - } - - /** - * Get the children of this instance - * - * @param head - * @return children of the head - */ - public ArrayList<Integer> getChildren(int head) { - - ArrayList<Integer> children = new ArrayList<Integer>(); - for (int i = 0; i < length(); i++) { - if (heads[i] == head) - children.add(i); - } - return children; - } - - public void createWithRoot(SentenceData09 i) { - - int length = i.length(); - int offset = 0; - if (!i.forms[0].equals(IOGenerals.ROOT)) { - length++; - offset = -1; - } - - forms = new String[length]; - gpos = new String[length]; - ppos = new String[length]; - plemmas = new String[length]; - plabels = new String[length]; - lemmas = new String[length]; - heads = new int[length]; - pheads = new int[length]; - ofeats = new String[length]; - pfeats = new String[length]; - labels = new String[length]; - fillp = new String[length]; - id = new String[length]; - feats = new String[forms.length][]; - - for (int j = 1; j < length; j++) { - forms[j] = i.forms[j + offset]; - ppos[j] = i.ppos[j + offset]; - gpos[j] = i.gpos[j + offset]; - - labels[j] = i.labels[j + offset]; - heads[j] = i.heads[j + offset]; - - if (i.pheads != null) - pheads[j] = i.pheads[j + offset]; - if (i.plabels != null) - plabels[j] = i.plabels[j + offset]; - - if (i.lemmas != null) - lemmas[j] = i.lemmas[j + offset]; - - plemmas[j] = i.plemmas[j + offset]; - - // if (i.ofeats!=null) ofeats[j] = i.ofeats[j+offset]; - - ofeats[j] = i.ofeats[j + offset].equals(CONLLWriter09.DASH) ? "_" : i.ofeats[j + offset]; - - // if (i.pfeats!=null) pfeats[j] = i.pfeats[j+offset]; - - if (i.pfeats != null && i.pfeats[j + offset] != null) { - if (i.pfeats[j + offset].equals(CONLLWriter09.DASH)) - feats[j] = null; - else { - feats[j] = i.pfeats[j + offset].split(IOGenerals.PIPE); - - // if (info[7].equals(CONLLWriter09.DASH)) it.feats[i]=null; - // else { - // it.feats[i] =info[7].split(PIPE); - pfeats[j] = i.pfeats[j + offset]; - // } - } - } - - if (i.fillp != null) - fillp[j] = i.fillp[j + offset]; - if (i.id != null) - id[j] = i.id[j + offset]; - } - - forms[0] = IOGenerals.ROOT; - plemmas[0] = IOGenerals.ROOT_LEMMA; - fillp[0] = "N"; - lemmas[0] = IOGenerals.ROOT_LEMMA; - - gpos[0] = IOGenerals.ROOT_POS; - ppos[0] = IOGenerals.ROOT_POS; - labels[0] = IOGenerals.NO_TYPE; - heads[0] = -1; - plabels[0] = IOGenerals.NO_TYPE; - pheads[0] = -1; - ofeats[0] = IOGenerals.NO_TYPE; - id[0] = "0"; - } - -} diff --git a/dependencyParser/mate-tools/src/is2/data/Thesaurus.java b/dependencyParser/mate-tools/src/is2/data/Thesaurus.java deleted file mode 100644 index bafc3b9..0000000 --- a/dependencyParser/mate-tools/src/is2/data/Thesaurus.java +++ /dev/null @@ -1,200 +0,0 @@ -/** - * - */ -package is2.data; - -import java.io.BufferedReader; -import java.io.DataInputStream; -import java.io.DataOutputStream; -import java.io.FileInputStream; -import java.io.IOException; -import java.io.InputStreamReader; -import java.util.ArrayList; - -import is2.util.DB; - -/** - * @author Dr. Bernd Bohnet, 28.10.2010 - * - * - */ -final public class Thesaurus { - - public static final String LPATH = "LP"; - public static final String SPATH = "SP"; - - // [word][p] p = [0:long-path | 1:short-path] - final private int[][] word2path; - - public Thesaurus() { - word2path = new int[0][]; - } - - /** - * @param clusterFile - * @param mf - * - */ - public Thesaurus(String clusterFile, IEncoderPlus mf, int ls) { - - final String REGEX = "\t"; - - // register words - try { - BufferedReader inputReader = new BufferedReader( - new InputStreamReader(new FileInputStream(clusterFile), "UTF-8"), 32768); - - int cnt = 0; - String line; - while ((line = inputReader.readLine()) != null) { - - cnt++; - try { - String[] split = line.split(REGEX); - // mf.register(LPATH, - // split[0].length()<ls?split[0]:split[0].substring(0,ls)); - mf.register(PipeGen.WORD, split[0]); - mf.register(PipeGen.WORD, split[1]); - } catch (Exception e) { - System.out.println("Error in cluster line " + cnt + " error: " + e.getMessage()); - } - } - System.out.println("read number of thesaury entries " + cnt); - inputReader.close(); - - } catch (Exception e) { - e.printStackTrace(); - } - - word2path = new int[mf.getFeatureCounter().get(PipeGen.WORD)][]; - - // insert words - try { - String line; - BufferedReader inputReader = new BufferedReader( - new InputStreamReader(new FileInputStream(clusterFile), "UTF-8"), 32768); - - int startWd = -1; - ArrayList<Integer> wrds = new ArrayList<Integer>(); - while ((line = inputReader.readLine()) != null) { - - String[] split = line.split(REGEX); - int wd = mf.getValue(PipeGen.WORD, split[0]); - // DB.println("wd "+wd+" "+startWd); - if (startWd == wd) { - int thesaurusWrd = mf.getValue(PipeGen.WORD, split[1]); - if (thesaurusWrd != wd) - wrds.add(thesaurusWrd); - } else if (startWd != -1) { - int[] ths = new int[wrds.size()]; - for (int k = 0; k < ths.length; k++) - ths[k] = wrds.get(k); - word2path[startWd] = ths; - // DB.println(""+wrds+" size "+ths.length); - wrds.clear(); - int thesaurusWrd = mf.getValue(PipeGen.WORD, split[1]); - if (thesaurusWrd != wd) - wrds.add(thesaurusWrd); - } - startWd = wd; - } - - if (wrds.size() != 0) { - // put rest of the words - int[] ths = new int[wrds.size()]; - for (int k = 0; k < ths.length; k++) - ths[k] = wrds.get(k); - word2path[startWd] = ths; - // DB.println(""+wrds+" size "+ths.length); - wrds.clear(); - - } - - inputReader.close(); - int fill = 0; - for (int[] element : word2path) { - if (element != null) - fill++; - } - /* - * for(int l = 0; l<word2path.length; l++ ){ if (word2path[l][1]!=0) - * fillL++; if (word2path[l][1]<-1) - * System.out.println("lower "+word2path[l][1]); } - */ - System.out.println("filled " + fill + " of " + word2path.length); - - } catch (Exception e) { - e.printStackTrace(); - } - } - - /** - * Read the cluster - * - * @param dos - * @throws IOException - */ - public Thesaurus(DataInputStream dis) throws IOException { - - word2path = new int[dis.readInt()][]; - for (int i = 0; i < word2path.length; i++) { - int len = dis.readInt(); - if (len > 0) { - word2path[i] = new int[len]; - for (int j = 0; j < len; j++) { - word2path[i][j] = dis.readInt(); - - } - } - - word2path[i][0] = dis.readShort(); - } - DB.println("Read cluster with " + word2path.length + " words "); - } - - /** - * Write the cluster - * - * @param dos - * @throws IOException - */ - public void write(DataOutputStream dos) throws IOException { - - dos.writeInt(word2path.length); - for (int[] i : word2path) { - dos.writeInt(i == null ? 0 : i.length); - - if (i != null) { - for (int element : i) { - - dos.writeInt(element); - - } - - } - } - - } - - /** - * @param form - * the id of a word form - * @return the short path to the word form in the cluster - * - * final public int getSP(int form) { if (word2path.length<form) - * return -1; return word2path[form][0]; } - */ - /** - * get the long path to a word form in the cluster - * - * @param form - * the id of a word form - * @return the long path to the word - */ - final public int get(int form, int k) { - if (word2path.length < form || word2path[form] == null) - return -1; - return word2path[form][k]; - } - -} diff --git a/dependencyParser/mate-tools/src/is2/io/CONLLReader04.java b/dependencyParser/mate-tools/src/is2/io/CONLLReader04.java deleted file mode 100644 index 695f10d..0000000 --- a/dependencyParser/mate-tools/src/is2/io/CONLLReader04.java +++ /dev/null @@ -1,264 +0,0 @@ - -package is2.io; - -import java.io.BufferedReader; -import java.io.FileInputStream; -import java.io.IOException; -import java.io.InputStreamReader; -import java.util.ArrayList; - -import is2.data.Instances; -import is2.data.SentenceData09; -import is2.util.DB; - -/** - * This class reads files in the CONLL-08 and CONLL-09 format. - * - * @author Bernd Bohnet - */ -public class CONLLReader04 { - - private static final String US = "_"; - private static final String REGEX = "\t"; - public static final String STRING = "*"; - public static final String PIPE = "\\|"; - public static final String NO_TYPE = "<no-type>"; - public static final String ROOT_POS = "<root-POS>"; - public static final String ROOT_LEMMA = "<root-LEMMA>"; - public static final String ROOT = "<root>"; - public static final String EMPTY_FEAT = "<ef>"; - - private static final String NUMBER = "[0-9]+|[0-9]+\\.[0-9]+|[0-9]+[0-9,]+"; - private static final String NUM = "<num>"; - - private BufferedReader inputReader; - - public static final int TASK08 = 8; - public static final int TASK09 = 9; - - public static boolean normalizeOn = true; - - private int lineNumber = 0; - - public CONLLReader04() { - } - - public CONLLReader04(String file) { - lineNumber = 0; - try { - inputReader = new BufferedReader(new InputStreamReader(new FileInputStream(file), "UTF-8"), 32768); // ,"UTF-8" - } catch (Exception e) { - e.printStackTrace(); - } - } - - public CONLLReader04(String file, int task) { - this(file); - } - - public void startReading(String file) { - lineNumber = 0; - try { - inputReader = new BufferedReader(new InputStreamReader(new FileInputStream(file), "UTF-8"), 32768); - } catch (Exception e) { - e.printStackTrace(); - } - } - - /** - * i.forms[heads[l]-1]+" "+rel+" "+ Read a instance - * - * @return a instance - * @throws Exception - */ - public SentenceData09 getNext() throws Exception { - - try { - - ArrayList<String[]> lineList = new ArrayList<String[]>(); - - String line = inputReader.readLine(); - - while (line != null && line.length() < 2) { - line = inputReader.readLine(); - lineNumber++; - System.out.println("skip empty line at line " + lineNumber); - } - - while (line != null && line.length() != 0 && !line.startsWith(STRING) && !line.startsWith(REGEX)) { - lineList.add(line.split(REGEX)); - line = inputReader.readLine(); - lineNumber++; - } - - int length = lineList.size(); - - if (length == 0) { - inputReader.close(); - return null; - } - - SentenceData09 it = new SentenceData09(); - - // column content - // 1 id - // 2 form - // 3 lemma - // 4 cpos-tag - // 5 pos-tog - // 6 feats - // 7 head - // 8 deprel - - it.forms = new String[length + 1]; - - it.plemmas = new String[length + 1]; - it.gpos = new String[length + 1]; - it.labels = new String[length + 1]; - it.heads = new int[length + 1]; - it.pheads = new int[length + 1]; - it.plabels = new String[length + 1]; - - it.ppos = new String[length + 1]; - it.lemmas = new String[length + 1]; - it.fillp = new String[length + 1]; - it.feats = new String[length + 1][]; - it.ofeats = new String[length + 1]; - it.pfeats = new String[length + 1]; - - it.forms[0] = ROOT; - it.plemmas[0] = ROOT_LEMMA; - it.fillp[0] = "N"; - it.lemmas[0] = ROOT_LEMMA; - - it.gpos[0] = ROOT_POS; - it.ppos[0] = ROOT_POS; - it.labels[0] = NO_TYPE; - it.heads[0] = -1; - it.plabels[0] = NO_TYPE; - it.pheads[0] = -1; - it.ofeats[0] = NO_TYPE; - - // root is 0 therefore start with 1 - - for (int i = 1; i <= length; i++) { - - String[] info = lineList.get(i - 1); - - it.forms[i] = info[0]; // normalize( - - it.lemmas[i] = "_"; - it.plemmas[i] = "_"; - - // 3 cpos - - it.gpos[i] = info[1]; - it.ppos[i] = info[1]; - - it.ofeats[i] = "_"; - - it.feats[i] = null; - // it.feats[i] =info[5].split(PIPE); - it.pfeats[i] = "_"; - - if (info[2].equals(US)) - it.heads[i] = -1; - else - it.heads[i] = Integer.parseInt(info[2]);// head - - it.labels[i] = info[3]; - - } - return it; - - } catch (Exception e) { - System.out.println("\n!!! Error in input file at line : " + lineNumber + " " + e.toString()); - e.printStackTrace(); - throw new Exception(); - // return null; - } - - } - - /** - * Read a instance an store it in a compressed format - * - * @param is - * @return - * @throws IOException - */ - final public SentenceData09 getNext(Instances is) throws Exception { - - SentenceData09 it = getNext(); - - if (is != null) - insert(is, it); - - return it; - - } - - final public boolean insert(Instances is, SentenceData09 it) throws IOException { - - try { - - if (it == null) { - inputReader.close(); - return false; - } - - int i = is.createInstance09(it.length()); - - for (int p = 0; p < it.length(); p++) { - - is.setForm(i, p, normalize(it.forms[p])); - is.setGPos(i, p, it.gpos[p]); - - if (it.ppos[p] == null || it.ppos[p].equals(US)) { - is.setPPoss(i, p, it.gpos[p]); - } else - is.setPPoss(i, p, it.ppos[p]); - - if (it.plemmas[p] == null || it.plemmas[p].equals(US)) { - is.setLemma(i, p, normalize(it.forms[p])); - } else - is.setLemma(i, p, normalize(it.plemmas[p])); - - is.setFeats(i, p, it.feats[p]); - - is.setFeature(i, p, it.ofeats[p]); - - is.setRel(i, p, it.labels[p]); - if (it.plabels != null) - is.setPRel(i, p, it.plabels[p]); - is.setHead(i, p, it.heads[p]); - if (it.pheads != null) - is.setPHead(i, p, it.pheads[p]); - - if (it.fillp != null && it.fillp[p] != null && it.fillp[p].startsWith("Y")) - is.pfill[i].set(p); - else - is.pfill[i].clear(p); - } - - if (is.createSem(i, it)) { - DB.println("count " + i + " len " + it.length()); - DB.println(it.printSem()); - } - } catch (Exception e) { - DB.println("head " + it); - e.printStackTrace(); - } - return true; - - } - - public static String normalize(String s) { - if (!normalizeOn) - return s; - if (s.matches(NUMBER)) - return NUM; - return s; - } - -} diff --git a/dependencyParser/mate-tools/src/is2/io/CONLLReader06.java b/dependencyParser/mate-tools/src/is2/io/CONLLReader06.java deleted file mode 100755 index 10d1d2d..0000000 --- a/dependencyParser/mate-tools/src/is2/io/CONLLReader06.java +++ /dev/null @@ -1,271 +0,0 @@ - -package is2.io; - -import java.io.BufferedReader; -import java.io.FileInputStream; -import java.io.IOException; -import java.io.InputStreamReader; -import java.util.ArrayList; - -import is2.data.Instances; -import is2.data.SentenceData09; -import is2.util.DB; - -/** - * This class reads files in the CONLL-08 and CONLL-09 format. - * - * @author Bernd Bohnet - */ -public class CONLLReader06 { - - private static final String US = "_"; - private static final String REGEX = "\t"; - public static final String STRING = "*"; - public static final String PIPE = "\\|"; - public static final String NO_TYPE = "<no-type>"; - public static final String ROOT_POS = "<root-POS>"; - public static final String ROOT_LEMMA = "<root-LEMMA>"; - public static final String ROOT = "<root>"; - public static final String EMPTY_FEAT = "<ef>"; - - private static final String NUMBER = "[0-9]+|[0-9]+\\.[0-9]+|[0-9]+[0-9,]+"; - private static final String NUM = "<num>"; - - private BufferedReader inputReader; - - public static final int TASK08 = 8; - public static final int TASK09 = 9; - - public static boolean normalizeOn = true; - - private int lineNumber = 0; - - public CONLLReader06() { - } - - public CONLLReader06(String file) { - lineNumber = 0; - try { - inputReader = new BufferedReader(new InputStreamReader(new FileInputStream(file), "UTF-8"), 32768); // ,"UTF-8" - } catch (Exception e) { - e.printStackTrace(); - } - } - - public CONLLReader06(String file, int task) { - this(file); - } - - public void startReading(String file) { - lineNumber = 0; - try { - inputReader = new BufferedReader(new InputStreamReader(new FileInputStream(file), "UTF-8"), 32768); - } catch (Exception e) { - e.printStackTrace(); - } - } - - /** - * i.forms[heads[l]-1]+" "+rel+" "+ Read a instance - * - * @return a instance - * @throws Exception - */ - public SentenceData09 getNext() throws Exception { - - try { - - ArrayList<String[]> lineList = new ArrayList<String[]>(); - - String line = inputReader.readLine(); - - while (line != null && line.length() == 0) { - line = inputReader.readLine(); - lineNumber++; - System.out.println("skip empty line at line " + lineNumber); - } - - while (line != null && line.length() != 0 && !line.startsWith(STRING) && !line.startsWith(REGEX)) { - lineList.add(line.split(REGEX)); - line = inputReader.readLine(); - lineNumber++; - } - - int length = lineList.size(); - - if (length == 0) { - inputReader.close(); - return null; - } - - SentenceData09 it = new SentenceData09(); - - // column content - // 1 id - // 2 form - // 3 lemma - // 4 cpos-tag - // 5 pos-tog - // 6 feats - // 7 head - // 8 deprel - - it.forms = new String[length + 1]; - - it.plemmas = new String[length + 1]; - it.gpos = new String[length + 1]; - it.labels = new String[length + 1]; - it.heads = new int[length + 1]; - it.pheads = new int[length + 1]; - it.plabels = new String[length + 1]; - - it.ppos = new String[length + 1]; - it.lemmas = new String[length + 1]; - it.fillp = new String[length + 1]; - it.feats = new String[length + 1][]; - it.ofeats = new String[length + 1]; - it.pfeats = new String[length + 1]; - - it.forms[0] = ROOT; - it.plemmas[0] = ROOT_LEMMA; - it.fillp[0] = "N"; - it.lemmas[0] = ROOT_LEMMA; - - it.gpos[0] = ROOT_POS; - it.ppos[0] = ROOT_POS; - it.labels[0] = NO_TYPE; - it.heads[0] = -1; - it.plabels[0] = NO_TYPE; - it.pheads[0] = -1; - it.ofeats[0] = NO_TYPE; - - // root is 0 therefore start with 1 - - for (int i = 1; i <= length; i++) { - - String[] info = lineList.get(i - 1); - - it.forms[i] = info[1]; // normalize( - - it.lemmas[i] = info[2]; - it.plemmas[i] = info[2]; - - // 3 cpos - - it.gpos[i] = info[3]; - it.ppos[i] = info[4]; - - it.ofeats[i] = info[5].equals(CONLLWriter09.DASH) ? "" : info[5]; - - if (info[5].equals(CONLLWriter09.DASH)) - it.feats[i] = null; - else { - it.feats[i] = info[5].split(PIPE); - it.pfeats[i] = info[5]; - } - - if (info[6].equals(US)) - it.heads[i] = -1; - else - it.heads[i] = Integer.parseInt(info[6]);// head - - // it.phead[i]=info[9].equals(US) ? it.phead[i]=-1: - // Integer.parseInt(info[9]);// head - - it.labels[i] = info[7]; - // it.pedge[i] = info[11]; - - } - return it; - - } catch (Exception e) { - System.out.println("\n!!! Error in input file at line : " + lineNumber + " " + e.toString()); - e.printStackTrace(); - throw new Exception(); - // return null; - } - - } - - /** - * Read a instance an store it in a compressed format - * - * @param is - * @return - * @throws IOException - */ - final public SentenceData09 getNext(Instances is) throws Exception { - - SentenceData09 it = getNext(); - - if (is != null) - insert(is, it); - - return it; - - } - - final public boolean insert(Instances is, SentenceData09 it) throws IOException { - - try { - - if (it == null) { - inputReader.close(); - return false; - } - - int i = is.createInstance09(it.length()); - - for (int p = 0; p < it.length(); p++) { - - is.setForm(i, p, normalize(it.forms[p])); - is.setGPos(i, p, it.gpos[p]); - - if (it.ppos[p] == null || it.ppos[p].equals(US)) { - is.setPPoss(i, p, it.gpos[p]); - } else - is.setPPoss(i, p, it.ppos[p]); - - if (it.plemmas[p] == null || it.plemmas[p].equals(US)) { - is.setLemma(i, p, normalize(it.forms[p])); - } else - is.setLemma(i, p, normalize(it.plemmas[p])); - - is.setFeats(i, p, it.feats[p]); - - is.setFeature(i, p, it.ofeats[p]); - - is.setRel(i, p, it.labels[p]); - if (it.plabels != null) - is.setPRel(i, p, it.plabels[p]); - is.setHead(i, p, it.heads[p]); - if (it.pheads != null) - is.setPHead(i, p, it.pheads[p]); - - if (it.fillp != null && it.fillp[p] != null && it.fillp[p].startsWith("Y")) - is.pfill[i].set(p); - else - is.pfill[i].clear(p); - } - - if (is.createSem(i, it)) { - DB.println("count " + i + " len " + it.length()); - DB.println(it.printSem()); - } - } catch (Exception e) { - DB.println("head " + it); - e.printStackTrace(); - } - return true; - - } - - public static String normalize(String s) { - if (!normalizeOn) - return s; - if (s.matches(NUMBER)) - return NUM; - return s; - } - -} diff --git a/dependencyParser/mate-tools/src/is2/io/CONLLReader08.java b/dependencyParser/mate-tools/src/is2/io/CONLLReader08.java deleted file mode 100644 index 467e853..0000000 --- a/dependencyParser/mate-tools/src/is2/io/CONLLReader08.java +++ /dev/null @@ -1,407 +0,0 @@ - -package is2.io; - -import java.io.BufferedReader; -import java.io.FileInputStream; -import java.io.IOException; -import java.io.InputStreamReader; -import java.util.ArrayList; - -import is2.data.Instances; -import is2.data.SentenceData09; -import is2.util.DB; - -/** - * This class reads files in the CONLL-09 format. - * - * @author Bernd Bohnet - */ -public class CONLLReader08 extends IOGenerals { - - private BufferedReader inputReader; - - public static final boolean NORMALIZE = true; - - public static final boolean NO_NORMALIZE = false; - - public boolean normalizeOn = true; - - private int format = 0; - - private int lineNumber = 0; - - public CONLLReader08(boolean normalize) { - - normalizeOn = normalize; - } - - public CONLLReader08(String file) { - lineNumber = 0; - try { - inputReader = new BufferedReader(new InputStreamReader(new FileInputStream(file), "UTF-8"), 32768); - } catch (Exception e) { - e.printStackTrace(); - } - } - - public CONLLReader08(String file, boolean normalize) { - this(file); - normalizeOn = normalize; - } - - /** - * Sets the input format: - * - * CONLL09 is standard, ONE_LINE - * - * @param format - * the fomrat (see the constants starting with F_). - */ - public void setInputFormat(int format) { - this.format = format; - } - - /** - * - */ - public CONLLReader08() { - } - - /** - * @param testfile - * @param formatTask - */ - public CONLLReader08(String testfile, int formatTask) { - this(testfile); - } - - public void startReading(String file) { - lineNumber = 0; - try { - inputReader = new BufferedReader(new InputStreamReader(new FileInputStream(file), "UTF-8"), 32768); - } catch (Exception e) { - e.printStackTrace(); - } - } - - public SentenceData09 getNext() { - - if (F_ONE_LINE == format) - return getNextOneLine(); - else - return getNextCoNLL09(); - } - - /** - * @return - */ - private SentenceData09 getNextOneLine() { - - String line = null; - int i = 0; - try { - - line = inputReader.readLine(); - lineNumber++; - - if (line == null) { - inputReader.close(); - return null; - } - - String[] tokens = line.split(" "); - int length = tokens.length; - if (line.isEmpty()) - length = 0; - - SentenceData09 it = new SentenceData09(); - - it.forms = new String[length + 1]; - - it.plemmas = new String[length + 1]; - // it.ppos = new String[length+1]; - it.gpos = new String[length + 1]; - it.labels = new String[length + 1]; - it.heads = new int[length + 1]; - it.pheads = new int[length + 1]; - it.plabels = new String[length + 1]; - - it.ppos = new String[length + 1]; - it.lemmas = new String[length + 1]; - it.fillp = new String[length + 1]; - it.feats = new String[length + 1][]; - it.ofeats = new String[length + 1]; - it.pfeats = new String[length + 1]; - it.id = new String[length + 1]; - - it.forms[0] = ROOT; - it.plemmas[0] = ROOT_LEMMA; - it.fillp[0] = "N"; - it.lemmas[0] = ROOT_LEMMA; - - it.gpos[0] = ROOT_POS; - it.ppos[0] = ROOT_POS; - it.labels[0] = NO_TYPE; - it.heads[0] = -1; - it.plabels[0] = NO_TYPE; - it.pheads[0] = -1; - it.ofeats[0] = NO_TYPE; - it.id[0] = "0"; - - // root is 0 therefore start with 1 - - for (i = 1; i <= length; i++) { - - it.id[i] = "" + i; - - it.forms[i] = this.normalizeOn ? normalize(tokens[i - 1]) : tokens[i - 1]; // normalize( - - } - - return it; - - } catch (Exception e) { - System.out.println("\n!!! Error in input file sentence before line: " + lineNumber + " (in sentence line " - + i + " ) " + e.toString()); - e.printStackTrace(); - System.exit(0); - - // throw new Exception(); - return null; - } - - } - - /** - * i.forms[heads[l]-1]+" "+rel+" "+ Read a instance - * - * @return a instance - * @throws Exception - */ - - public SentenceData09 getNextCoNLL09() { - - String line = null; - int i = 0; - try { - - ArrayList<String[]> lineList = new ArrayList<String[]>(); - - line = inputReader.readLine(); - lineNumber++; - - while (line != null && line.length() == 0) { - line = inputReader.readLine(); - lineNumber++; - System.out.println("skip empty line at line " + lineNumber); - } - - while (line != null && line.length() != 0 && !line.startsWith(STRING) && !line.startsWith(REGEX)) { - lineList.add(line.split(REGEX)); - line = inputReader.readLine(); - lineNumber++; - } - - int length = lineList.size(); - - if (length == 0) { - inputReader.close(); - return null; - } - - SentenceData09 it = new SentenceData09(); - - it.forms = new String[length + 1]; - - it.plemmas = new String[length + 1]; - // it.ppos = new String[length+1]; - it.gpos = new String[length + 1]; - it.labels = new String[length + 1]; - it.heads = new int[length + 1]; - it.pheads = new int[length + 1]; - it.plabels = new String[length + 1]; - - it.ppos = new String[length + 1]; - it.lemmas = new String[length + 1]; - it.fillp = new String[length + 1]; - it.feats = new String[length + 1][]; - it.ofeats = new String[length + 1]; - it.pfeats = new String[length + 1]; - it.id = new String[length + 1]; - - it.forms[0] = ROOT; - it.plemmas[0] = ROOT_LEMMA; - it.fillp[0] = "N"; - it.lemmas[0] = ROOT_LEMMA; - - it.gpos[0] = ROOT_POS; - it.ppos[0] = ROOT_POS; - it.labels[0] = NO_TYPE; - it.heads[0] = -1; - it.plabels[0] = NO_TYPE; - it.pheads[0] = -1; - it.ofeats[0] = NO_TYPE; - it.id[0] = "0"; - - // root is 0 therefore start with 1 - - for (i = 1; i <= length; i++) { - - String[] info = lineList.get(i - 1); - - it.id[i] = info[0]; - it.forms[i] = info[5]; // normalize( - if (info.length < 3) - continue; - - // it.lemmas[i] = info[2]; - it.plemmas[i] = info[6]; - it.gpos[i] = info[3]; - - if (info.length < 5) - continue; - it.ppos[i] = info[7];// .split("\\|")[0]; - - // feat 6 - // pfeat 7 - - // this causes trouble in the perl eval09 scirpt - // it.ofeats[i]=info[6].equals(CONLLWriter09.DASH)? "" : - // info[6]; - - // now we try underscore - it.ofeats[i] = "_"; - - // it.feats[i] ="_"; - it.pfeats[i] = "_"; - - if (info[8].equals(US)) - it.heads[i] = -1; - else - it.heads[i] = Integer.parseInt(info[8]);// head - - it.pheads[i] = -1;// head - - it.labels[i] = info[9]; - it.plabels[i] = "_"; - - it.fillp[i] = info[10]; - - if (info.length > 11) { - if (!info[10].equals(US)) - it.addPredicate(i, info[10]); - for (int k = 11; k < info.length; k++) - it.addArgument(i, k - 11, info[k]); - } - - } - return it; - - } catch (Exception e) { - System.out.println("\n!!! Error in input file sentence before line: " + lineNumber + " (in sentence line " - + i + " ) " + e.toString()); - e.printStackTrace(); - System.exit(0); - - // throw new Exception(); - return null; - } - - } - - /** - * Read a instance an store it in a compressed format - * - * @param is - * @return - * @throws IOException - */ - final public SentenceData09 getNext(Instances is) { - - SentenceData09 it = getNext(); - - if (is != null) - insert(is, it); - - return it; - - } - - final public boolean insert(Instances is, SentenceData09 it) { - - try { - - if (it == null) { - inputReader.close(); - return false; - } - - int i = is.createInstance09(it.length()); - - for (int p = 0; p < it.length(); p++) { - - is.setForm(i, p, normalize(it.forms[p])); - is.setGPos(i, p, it.gpos[p]); - - // System.out.println(""+is.gpos[i][p]); - - if (it.ppos[p] == null || it.ppos[p].equals(US)) { - - is.setPPoss(i, p, it.gpos[p]); - } else - is.setPPoss(i, p, it.ppos[p]); - - if (it.plemmas[p] == null || it.plemmas[p].equals(US)) { - is.setLemma(i, p, normalize(it.forms[p])); - } else - is.setLemma(i, p, normalize(it.plemmas[p])); - - if (it.lemmas != null) - if (it.lemmas[p] == null) { // ||it.org_lemmas[p].equals(US) - // that harms a lot the - // lemmatizer - is.setGLemma(i, p, it.plemmas[p]); - } else - is.setGLemma(i, p, it.lemmas[p]); - - if (it.feats != null && it.feats[p] != null) - is.setFeats(i, p, it.feats[p]); - - if (it.ofeats != null) - is.setFeature(i, p, it.ofeats[p]); - - is.setRel(i, p, it.labels[p]); - if (it.plabels != null) - is.setPRel(i, p, it.plabels[p]); - - is.setHead(i, p, it.heads[p]); - if (it.pheads != null) - is.setPHead(i, p, it.pheads[p]); - - if (it.fillp != null && it.fillp[p] != null && it.fillp[p].startsWith("Y")) - is.pfill[i].set(p); - else - is.pfill[i].clear(p); - } - - if (is.createSem(i, it)) { - DB.println("count " + i + " len " + it.length()); - DB.println(it.printSem()); - } - } catch (Exception e) { - DB.println("head " + it); - e.printStackTrace(); - } - return true; - - } - - public String normalize(String s) { - if (!normalizeOn) - return s; - if (s.matches(NUMBER)) - return NUM; - return s; - } - -} diff --git a/dependencyParser/mate-tools/src/is2/io/CONLLReader09.java b/dependencyParser/mate-tools/src/is2/io/CONLLReader09.java deleted file mode 100755 index cee897a..0000000 --- a/dependencyParser/mate-tools/src/is2/io/CONLLReader09.java +++ /dev/null @@ -1,409 +0,0 @@ - -package is2.io; - -import java.io.BufferedReader; -import java.io.FileInputStream; -import java.io.IOException; -import java.io.InputStreamReader; -import java.util.ArrayList; - -import is2.data.Instances; -import is2.data.SentenceData09; -import is2.util.DB; - -/** - * This class reads files in the CONLL-09 format. - * - * @author Bernd Bohnet - */ -public class CONLLReader09 extends IOGenerals { - - private BufferedReader inputReader; - - public static final boolean NORMALIZE = true; - - public static final boolean NO_NORMALIZE = false; - - public boolean normalizeOn = true; - - static public String joint = ""; - - private int format = 0; - - private int lineNumber = 0; - - public CONLLReader09(boolean normalize) { - - normalizeOn = normalize; - } - - public CONLLReader09(String file) { - lineNumber = 0; - try { - inputReader = new BufferedReader(new InputStreamReader(new FileInputStream(file), "UTF-8"), 32768); - } catch (Exception e) { - e.printStackTrace(); - } - } - - public CONLLReader09(String file, boolean normalize) { - this(file); - normalizeOn = normalize; - } - - /** - * Sets the input format: - * - * CONLL09 is standard, ONE_LINE - * - * @param format - * the fomrat (see the constants starting with F_). - */ - public void setInputFormat(int format) { - this.format = format; - } - - /** - * - */ - public CONLLReader09() { - } - - /** - * @param testfile - * @param formatTask - */ - public CONLLReader09(String testfile, int formatTask) { - this(testfile); - } - - public void startReading(String file) { - lineNumber = 0; - try { - inputReader = new BufferedReader(new InputStreamReader(new FileInputStream(file), "UTF-8"), 32768); - } catch (Exception e) { - e.printStackTrace(); - } - } - - public SentenceData09 getNext() { - - if (F_ONE_LINE == format) - return getNextOneLine(); - else - return getNextCoNLL09(); - } - - /** - * @return - */ - private SentenceData09 getNextOneLine() { - - String line = null; - int i = 0; - try { - - line = inputReader.readLine(); - lineNumber++; - - if (line == null) { - inputReader.close(); - return null; - } - - String[] tokens = line.split(" "); - int length = tokens.length; - if (line.isEmpty()) - length = 0; - - SentenceData09 it = new SentenceData09(); - - it.forms = new String[length + 1]; - - it.plemmas = new String[length + 1]; - // it.ppos = new String[length+1]; - it.gpos = new String[length + 1]; - it.labels = new String[length + 1]; - it.heads = new int[length + 1]; - it.pheads = new int[length + 1]; - it.plabels = new String[length + 1]; - - it.ppos = new String[length + 1]; - it.lemmas = new String[length + 1]; - it.fillp = new String[length + 1]; - it.feats = new String[length + 1][]; - it.ofeats = new String[length + 1]; - it.pfeats = new String[length + 1]; - it.id = new String[length + 1]; - - it.forms[0] = ROOT; - it.plemmas[0] = ROOT_LEMMA; - it.fillp[0] = "N"; - it.lemmas[0] = ROOT_LEMMA; - - it.gpos[0] = ROOT_POS; - it.ppos[0] = ROOT_POS; - it.labels[0] = NO_TYPE; - it.heads[0] = -1; - it.plabels[0] = NO_TYPE; - it.pheads[0] = -1; - it.ofeats[0] = NO_TYPE; - it.id[0] = "0"; - - // root is 0 therefore start with 1 - - for (i = 1; i <= length; i++) { - - it.id[i] = "" + i; - - it.forms[i] = this.normalizeOn ? normalize(tokens[i - 1]) : tokens[i - 1]; // normalize( - - } - - return it; - - } catch (Exception e) { - System.out.println("\n!!! Error in input file sentence before line: " + lineNumber + " (in sentence line " - + i + " ) " + e.toString()); - e.printStackTrace(); - - // throw new Exception(); - return null; - } - - } - - /** - * i.forms[heads[l]-1]+" "+rel+" "+ Read a instance - * - * @return a instance - * @throws Exception - */ - - public SentenceData09 getNextCoNLL09() { - - String line = null; - int i = 0; - try { - - ArrayList<String[]> lineList = new ArrayList<String[]>(); - - line = inputReader.readLine(); - lineNumber++; - - while (line != null && line.length() == 0) { - line = inputReader.readLine(); - lineNumber++; - System.out.println("skip empty line at line " + lineNumber); - } - - while (line != null && line.length() != 0 && !line.startsWith(STRING) && !line.startsWith(REGEX)) { - lineList.add(line.split(REGEX)); - line = inputReader.readLine(); - lineNumber++; - } - - int length = lineList.size(); - - if (length == 0) { - inputReader.close(); - return null; - } - - SentenceData09 it = new SentenceData09(); - - it.forms = new String[length + 1]; - - it.plemmas = new String[length + 1]; - // it.ppos = new String[length+1]; - it.gpos = new String[length + 1]; - it.labels = new String[length + 1]; - it.heads = new int[length + 1]; - it.pheads = new int[length + 1]; - it.plabels = new String[length + 1]; - - it.ppos = new String[length + 1]; - it.lemmas = new String[length + 1]; - it.fillp = new String[length + 1]; - it.feats = new String[length + 1][]; - it.ofeats = new String[length + 1]; - it.pfeats = new String[length + 1]; - it.id = new String[length + 1]; - - it.forms[0] = ROOT; - it.plemmas[0] = ROOT_LEMMA; - it.fillp[0] = "N"; - it.lemmas[0] = ROOT_LEMMA; - - it.gpos[0] = ROOT_POS; - it.ppos[0] = ROOT_POS; - it.labels[0] = NO_TYPE; - it.heads[0] = -1; - it.plabels[0] = NO_TYPE; - it.pheads[0] = -1; - it.ofeats[0] = NO_TYPE; - it.id[0] = "0"; - - // root is 0 therefore start with 1 - - for (i = 1; i <= length; i++) { - - String[] info = lineList.get(i - 1); - - it.id[i] = info[0]; - it.forms[i] = info[1]; // normalize( - if (info.length < 3) - continue; - - it.lemmas[i] = info[2]; - it.plemmas[i] = info[3]; - it.gpos[i] = info[4]; - - if (info.length < 5) - continue; - it.ppos[i] = info[5];// .split("\\|")[0]; - // feat 6 - - // now we try underscore - it.ofeats[i] = info[6].equals(CONLLWriter09.DASH) ? "_" : info[6]; - - if (info[7].equals(CONLLWriter09.DASH)) - it.feats[i] = null; - else { - it.feats[i] = info[7].split(PIPE); - it.pfeats[i] = info[7]; - } - - if (info[8].equals(US)) - it.heads[i] = -1; - else - it.heads[i] = Integer.parseInt(info[8]);// head - - it.pheads[i] = info[9].equals(US) ? it.pheads[i] = -1 : Integer.parseInt(info[9]);// head - - it.labels[i] = info[10]; - it.plabels[i] = info[11]; - it.fillp[i] = info[12]; - - if (info.length > 13) { - if (!info[13].equals(US)) - it.addPredicate(i, info[13]); - for (int k = 14; k < info.length; k++) - it.addArgument(i, k - 14, info[k]); - - } - - } - return it; - - } catch (Exception e) { - System.out.println("\n!!! Error in input file sentence before line: " + lineNumber + " (in sentence line " - + i + " ) " + e.toString()); - e.printStackTrace(); - System.exit(0); - - // throw new Exception(); - return null; - } - - } - - /** - * Read a instance an store it in a compressed format - * - * @param is - * @return - * @throws IOException - */ - final public SentenceData09 getNext(Instances is) { - - SentenceData09 it = getNext(); - - if (is != null) - insert(is, it); - - return it; - - } - - final public boolean insert(Instances is, SentenceData09 it) { - - try { - - if (it == null) { - inputReader.close(); - return false; - } - - int i = is.createInstance09(it.length()); - - for (int p = 0; p < it.length(); p++) { - - is.setForm(i, p, normalize(it.forms[p])); - // is.setFormOrg(i, p, it.forms[p]); - is.setGPos(i, p, it.gpos[p]); - - // System.out.println(""+is.gpos[i][p]); - - if (it.ppos[p] == null || it.ppos[p].equals(US)) { - - is.setPPoss(i, p, it.gpos[p]); - } else - is.setPPoss(i, p, it.ppos[p]); - - if (it.plemmas[p] == null || it.plemmas[p].equals(US)) { - is.setLemma(i, p, normalize(it.forms[p])); - } else - is.setLemma(i, p, normalize(it.plemmas[p])); - - if (it.lemmas != null) - if (it.lemmas[p] == null) { // ||it.org_lemmas[p].equals(US) - // that harms a lot the - // lemmatizer - is.setGLemma(i, p, it.plemmas[p]); - } else - is.setGLemma(i, p, it.lemmas[p]); - - if (it.feats != null && it.feats[p] != null) - is.setFeats(i, p, it.feats[p]); - - if (it.ofeats != null) - is.setFeature(i, p, it.ofeats[p]); - if (it.pfeats != null) - is.setPFeature(i, p, it.pfeats[p]); - - is.setRel(i, p, it.labels[p]); - if (it.plabels != null) - is.setPRel(i, p, it.plabels[p]); - - is.setHead(i, p, it.heads[p]); - if (it.pheads != null) - is.setPHead(i, p, it.pheads[p]); - - if (it.fillp != null && it.fillp[p] != null && it.fillp[p].startsWith("Y")) - is.pfill[i].set(p); - else - is.pfill[i].clear(p); - } - - if (is.createSem(i, it)) { - DB.println("count " + i + " len " + it.length()); - DB.println(it.printSem()); - } - } catch (Exception e) { - DB.println("head " + it); - e.printStackTrace(); - } - return true; - - } - - public String normalize(String s) { - if (!normalizeOn) - return s; - if (s.matches(NUMBER)) - return NUM; - return s; - } - -} diff --git a/dependencyParser/mate-tools/src/is2/io/CONLLWriter06.java b/dependencyParser/mate-tools/src/is2/io/CONLLWriter06.java deleted file mode 100755 index 24446b5..0000000 --- a/dependencyParser/mate-tools/src/is2/io/CONLLWriter06.java +++ /dev/null @@ -1,199 +0,0 @@ -package is2.io; - -import java.io.BufferedReader; -import java.io.BufferedWriter; -import java.io.File; -import java.io.FileInputStream; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.InputStreamReader; -import java.io.OutputStreamWriter; -import java.util.StringTokenizer; - -import is2.data.SentenceData09; -import is2.util.DB; - -public class CONLLWriter06 { - - public static final String DASH = "_"; - - protected BufferedWriter writer; - - public CONLLWriter06() { - } - - public static void main(String args[]) throws IOException { - - if (args.length == 2) { - File f = new File(args[0]); - File f2 = new File(args[1]); - // BufferedReader bf = new BufferedReader(new FileInputStream(new - // File(args[0]),"UTF-8"),32768); - BufferedReader ir = new BufferedReader(new InputStreamReader(new FileInputStream(f), "ISO-8859"), 32768); - BufferedWriter br = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(f2), "UTF-8")); - ; - boolean found = false; - boolean tab = false; - while (true) { - String l = ir.readLine(); - if (l == null) - break; - String x = l.trim(); - if (x.endsWith("\t")) - tab = true; - br.write(x); - br.newLine(); - if (!l.equals(x)) - found = true; - - } - ir.close(); - br.flush(); - br.close(); - - if (found) - DB.println("found diff. found tab? " + tab); - } else if (args.length == 3) { - File f1 = new File(args[1]); - File f2 = new File(args[2]); - - BufferedReader ir1 = new BufferedReader(new InputStreamReader(new FileInputStream(f1), "ISO-8859"), 32768); - BufferedReader ir2 = new BufferedReader(new InputStreamReader(new FileInputStream(f2), "UTF-8"), 32768); - - int line = 0, alltabs1 = 0, alltabs2 = 0; - while (true) { - String l1 = ir1.readLine(); - String l2 = ir2.readLine(); - - if (l1 == null && l2 != null) - DB.println("files do not end at the same line "); - if (l1 != null && l2 == null) - DB.println("files do not end at the same line "); - if (l1 == null) - break; - StringTokenizer t1 = new StringTokenizer(l1, "\t"); - StringTokenizer t2 = new StringTokenizer(l2, "\t"); - int tabs1 = 0; - while (t1.hasMoreTokens()) { - - t1.nextElement(); - tabs1++; - alltabs1++; - } - - int tabs2 = 0; - while (t2.hasMoreTokens()) { - - t2.nextElement(); - tabs2++; - alltabs2++; - } - line++; - if (tabs1 != tabs2) { - DB.println("number of tabs different in line " + line + " file1-tabs " + tabs1 + " file2-tabs " - + tabs2); - System.exit(0); - } - - } - ir1.close(); - ir2.close(); - DB.println("checked lines " + line + " with tabs in file 1 " + alltabs1 + " in file2 " + alltabs2); - - } else { - File f = new File(args[0]); - String[] dir = f.list(); - for (String fx : dir) { - BufferedReader ir = new BufferedReader( - new InputStreamReader(new FileInputStream(args[0] + File.separatorChar + fx), "UTF-8"), 32768); - System.out.println("check file " + fx); - while (true) { - String l = ir.readLine(); - if (l == null) - break; - if (l.endsWith("\t")) { - DB.println("found tab in file " + fx); - break; - } - } - ir.close(); - } - } - - } - - // public int version = CONLLReader09.TASK08; - - public CONLLWriter06(String file) { - - try { - writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file), "UTF-8")); - } catch (Exception e) { - e.printStackTrace(); - } - } - - public CONLLWriter06(String outfile, int formatTask) { - this(outfile); - // version = formatTask; - } - - public void write(SentenceData09 inst) throws IOException { - - for (int i = 0; i < inst.length(); i++) { - - writer.write(Integer.toString(i + 1)); - writer.write('\t'); // id - writer.write(inst.forms[i]); - writer.write('\t'); // form - - if (inst.lemmas != null && inst.lemmas[i] != null) { - writer.write(inst.lemmas[i]); - } else - writer.write(DASH); // lemma - writer.write('\t'); - - // writer.write(DASH); // cpos - // writer.write('\t'); - - writer.write(inst.gpos[i]); // cpos has to be included - writer.write('\t'); - - writer.write(inst.gpos[i]); // gpos - writer.write('\t'); - - if (inst.ofeats[i].isEmpty() || inst.ofeats[i].equals(" ")) - writer.write(DASH); - else - writer.write(inst.ofeats[i]); - writer.write('\t'); - - // writer.write(DASH); writer.write('\t'); // pfeat - - writer.write(Integer.toString(inst.heads[i])); - writer.write('\t'); // head - - if (inst.labels[i] != null) - writer.write(inst.labels[i]); // rel - else - writer.write(DASH); - writer.write('\t'); - - writer.write(DASH); - writer.write('\t'); - - writer.write(DASH); - writer.write('\t'); - - writer.newLine(); - } - writer.newLine(); - - } - - public void finishWriting() throws IOException { - writer.flush(); - writer.close(); - } - -} diff --git a/dependencyParser/mate-tools/src/is2/io/CONLLWriter09.java b/dependencyParser/mate-tools/src/is2/io/CONLLWriter09.java deleted file mode 100755 index c28ab24..0000000 --- a/dependencyParser/mate-tools/src/is2/io/CONLLWriter09.java +++ /dev/null @@ -1,334 +0,0 @@ -package is2.io; - -import java.io.BufferedReader; -import java.io.BufferedWriter; -import java.io.File; -import java.io.FileInputStream; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.InputStreamReader; -import java.io.OutputStreamWriter; -import java.io.Writer; -import java.util.StringTokenizer; - -import is2.data.SentenceData09; -import is2.util.DB; - -public class CONLLWriter09 extends IOGenerals { - - int format = 0; - - public static final String DASH = "_"; - - public static final boolean NO_ROOT = true, ROOT = false; - - protected BufferedWriter writer; - - public CONLLWriter09() { - } - - public static void main(String args[]) throws IOException { - - if (args.length == 2) { - File f = new File(args[0]); - File f2 = new File(args[1]); - BufferedReader ir = new BufferedReader(new InputStreamReader(new FileInputStream(f), "UTF-8"), 32768); - BufferedWriter br = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(f2), "UTF8")); - ; - boolean found = false; - boolean tab = false; - while (true) { - String l = ir.readLine(); - if (l == null) - break; - String x = l.trim(); - if (x.endsWith("\t")) - tab = true; - br.write(x); - br.newLine(); - if (!l.equals(x)) - found = true; - - } - ir.close(); - br.flush(); - br.close(); - - if (found) - DB.println("found diff. found tab? " + tab); - } else if (args.length == 3) { - File f1 = new File(args[1]); - File f2 = new File(args[2]); - - BufferedReader ir1 = new BufferedReader(new InputStreamReader(new FileInputStream(f1), "UTF-8"), 32768); - BufferedReader ir2 = new BufferedReader(new InputStreamReader(new FileInputStream(f2), "UTF-8"), 32768); - - int line = 0, alltabs1 = 0, alltabs2 = 0; - while (true) { - String l1 = ir1.readLine(); - String l2 = ir2.readLine(); - - if (l1 == null && l2 != null) - DB.println("files do not end at the same line "); - if (l1 != null && l2 == null) - DB.println("files do not end at the same line "); - if (l1 == null) - break; - StringTokenizer t1 = new StringTokenizer(l1, "\t"); - StringTokenizer t2 = new StringTokenizer(l2, "\t"); - int tabs1 = 0; - while (t1.hasMoreTokens()) { - - t1.nextElement(); - tabs1++; - alltabs1++; - } - - int tabs2 = 0; - while (t2.hasMoreTokens()) { - - t2.nextElement(); - tabs2++; - alltabs2++; - } - line++; - if (tabs1 != tabs2) { - DB.println("number of tabs different in line " + line + " file1-tabs " + tabs1 + " file2-tabs " - + tabs2); - System.exit(0); - } - - } - ir1.close(); - ir2.close(); - DB.println("checked lines " + line + " with tabs in file 1 " + alltabs1 + " in file2 " + alltabs2); - - } else { - File f = new File(args[0]); - String[] dir = f.list(); - for (String fx : dir) { - BufferedReader ir = new BufferedReader( - new InputStreamReader(new FileInputStream(args[0] + File.separatorChar + fx), "UTF-8"), 32768); - System.out.println("check file " + fx); - while (true) { - String l = ir.readLine(); - if (l == null) - break; - if (l.endsWith("\t")) { - DB.println("found tab in file " + fx); - break; - } - } - ir.close(); - } - } - - } - - public CONLLWriter09(String file) { - - try { - writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file), "UTF8")); - } catch (Exception e) { - e.printStackTrace(); - } - } - - public CONLLWriter09(Writer writer) { - this.writer = new BufferedWriter(writer); - } - - public CONLLWriter09(String outfile, int formatTask) { - this(outfile); - } - - public void write(SentenceData09 inst) throws IOException { - write(inst, NO_ROOT); - } - - /** - * - * @param inst - * @param root - * true: remove root node - * @throws IOException - */ - public void write(SentenceData09 inst, boolean root) throws IOException { - - int i, mod; - if (root && (inst.forms[0].startsWith("<root") - || (inst.lemmas[0] != null && inst.lemmas[0].startsWith("<root")))) { - i = 1; - mod = 0; - } else { - i = 0; - mod = 1; - } - // =()?1:0; - - if (format == IOGenerals.F_ONE_LINE) { - boolean first = true; - for (; i < inst.length(); i++) { - if (first) { - first = false; - } else - writer.write(" "); - writer.write(inst.plemmas[i]); - } - writer.newLine(); - - return; - } - - for (; i < inst.length(); i++) { - - if (inst.id == null || inst.id[i] == null) { - writer.write(Integer.toString(i + mod)); - writer.write('\t'); - } // id - else { - writer.write(inst.id[i]); - writer.write('\t'); - } - - writer.write(inst.forms[i]); - writer.write('\t'); // form - - if (inst.lemmas != null && inst.lemmas[i] != null) { - writer.write(inst.lemmas[i]); - } else - writer.write(DASH); // lemma - writer.write('\t'); - - if (inst.plemmas != null && inst.plemmas[i] != null) - writer.write(inst.plemmas[i]); - else - writer.write(DASH); // plemma - writer.write('\t'); - - if (inst.gpos[i] != null) - writer.write(inst.gpos[i]); // gpos - else - writer.write(DASH); - writer.write('\t'); - - if (inst.ppos != null && inst.ppos[i] != null) - writer.write(inst.ppos[i]); - else - writer.write(DASH); // ppos - writer.write('\t'); - - if (inst.ofeats != null && inst.ofeats[i] != null) - writer.write(inst.ofeats[i]); - else - writer.write(DASH); - writer.write('\t'); - - // writer.write(DASH); writer.write('\t'); // feat - if (inst.pfeats != null && inst.pfeats[i] != null) { - // System.out.println(""+inst.pfeats[i]); - writer.write(inst.pfeats[i]); - } else - writer.write(DASH); - writer.write('\t'); - - writer.write(Integer.toString(inst.heads[i])); - writer.write('\t'); // head - - if (inst.pheads != null) - writer.write(Integer.toString(inst.pheads[i])); - else - writer.write(DASH); - writer.write('\t'); // phead - - if (inst.labels[i] != null) - writer.write(inst.labels[i]); // rel - else - writer.write(DASH); - writer.write('\t'); - - if (inst.plabels != null && inst.plabels[i] != null) - writer.write(inst.plabels[i]); // rel - else - writer.write(DASH); - writer.write('\t'); - - if (inst.fillp != null && inst.fillp[i] != null) - writer.write(inst.fillp[i]); // fill p - else { - writer.write(DASH); - } - - // writer.write('\t'); - - if (inst.sem == null) { - writer.write('\t'); - writer.write(DASH); - - } else { - - boolean foundPred = false; - // print the predicate - for (int p = 0; p < inst.sem.length; p++) { - if (inst.semposition[p] == i) { - foundPred = true; - // System.out.println("write pred "+inst.sem[p] ); - writer.write('\t'); - writer.write(inst.sem[p]); - - // if (inst.sem[p].startsWith(".")) DB.println("error - // "+inst.sem[p]); - } - } - - if (!foundPred) { - writer.write('\t'); - writer.write(DASH); - // writer.write('\t'); - // writer.write(DASH); - } - - // print the arguments - for (int p = 0; p < inst.sem.length; p++) { - - boolean found = false; - if (inst.arg != null && inst.arg.length > p && inst.arg[p] != null) - for (int a = 0; a < inst.arg[p].length; a++) { - - if (i == inst.argposition[p][a]) { - writer.write('\t'); - writer.write(inst.arg[p][a]); - found = true; - break; - } - - } - if (!found) { - writer.write('\t'); - writer.write(DASH); - } - - } - - } - writer.newLine(); - } - writer.newLine(); - } - - public void finishWriting() throws IOException { - writer.flush(); - writer.close(); - } - - /** - * Sets the output format such as CoNLL or one line for the lemmata of the - * sentence (see F_xxxx constants). - * - * @param formatTask - */ - public void setOutputFormat(int formatTask) { - format = formatTask; - } - -} diff --git a/dependencyParser/mate-tools/src/is2/io/IOGenerals.java b/dependencyParser/mate-tools/src/is2/io/IOGenerals.java deleted file mode 100644 index 030bedd..0000000 --- a/dependencyParser/mate-tools/src/is2/io/IOGenerals.java +++ /dev/null @@ -1,32 +0,0 @@ -/** - * - */ -package is2.io; - -/** - * @author Dr. Bernd Bohnet, 18.08.2011 - * - * - */ -public class IOGenerals { - - // some constants - public static final String US = "_"; - public static final String REGEX = "\t"; - public static final String STRING = "*"; - public static final String PIPE = "\\|"; - public static final String NO_TYPE = "<no-type>"; - public static final String ROOT_POS = "<root-POS>"; - public static final String ROOT_LEMMA = "<root-LEMMA>"; - public static final String ROOT = "<root>"; - public static final String EMPTY_FEAT = "<ef>"; - - // the different readers - public static final int F_CONLL09 = 0; - public static final int F_ONE_LINE = 1; - - // normalization of the input - public static final String NUMBER = "[0-9]+|[0-9]+\\.[0-9]+|[0-9]+[0-9,]+"; - public static final String NUM = "<num>"; - -} diff --git a/dependencyParser/mate-tools/src/is2/io/PSReader.java b/dependencyParser/mate-tools/src/is2/io/PSReader.java deleted file mode 100644 index 5e8b1ad..0000000 --- a/dependencyParser/mate-tools/src/is2/io/PSReader.java +++ /dev/null @@ -1,23 +0,0 @@ -/** - * - */ -package is2.io; - -import is2.data.PSTree; - -/** - * @author Dr. Bernd Bohnet, 07.02.2011 - * - * - */ -public interface PSReader { - - public PSTree getNext(); - - /** - * @param ps - * @param filter - */ - public void startReading(String ps, String[] filter); - -} diff --git a/dependencyParser/mate-tools/src/is2/io/TigerReader.java b/dependencyParser/mate-tools/src/is2/io/TigerReader.java deleted file mode 100644 index 10fa0ea..0000000 --- a/dependencyParser/mate-tools/src/is2/io/TigerReader.java +++ /dev/null @@ -1,208 +0,0 @@ -/** - * - */ -package is2.io; - -import java.io.BufferedReader; -import java.io.File; -import java.io.FileInputStream; -import java.io.InputStreamReader; -import java.util.ArrayList; -import java.util.StringTokenizer; - -import is2.data.PSTree; - -/** - * @author Dr. Bernd Bohnet, 17.01.2011 - * - * Reads a sentences in Penn Tree Bank bracket style and return - * sentences. - */ -public class TigerReader implements PSReader { - - BufferedReader inputReader; - ArrayList<File> psFiles = new ArrayList<File>(); - ArrayList<PSTree> psCache = new ArrayList<PSTree>(); - - String filter[] = null; - int startFilter = -1; - int endFilter = -1; - - public TigerReader() { - } - - public TigerReader(String file) { - - try { - inputReader = new BufferedReader(new InputStreamReader(new FileInputStream(file), "ISO-8859-1"), 32768); - } catch (Exception e) { - e.printStackTrace(); - } - } - - /** - * @param ps - */ - @Override - public void startReading(String file, String[] filter) { - - try { - this.filter = filter; - startFilter = filter == null ? -1 : 1; - endFilter = filter == null ? -1 : 1; - - inputReader = new BufferedReader(new InputStreamReader(new FileInputStream(file), "ISO-8859-1"), 32768); - } catch (Exception e) { - e.printStackTrace(); - } - - } - - public static class Line { - String form; - String lemma; - String morph; - String pos; - int parent; - String edge; - - } - - static int stop = 0; - - /** - * @return - */ - @Override - public PSTree getNext() { - - PSTree ps = null; - String l = null; - ArrayList<Line> lines = new ArrayList<Line>(); - try { - int state = 1, terminals = 0, nonterminals = 0; - while ((l = inputReader.readLine()) != null) { - - if (startFilter == 1 && l.startsWith("#BOS " + filter[0])) { - System.out.println("found start " + l); - startFilter = 2; - } - if (endFilter == 1 && l.startsWith("#EOS " + filter[1])) { - System.out.println("found end " + l); - - endFilter = 2; - } - - if (startFilter == 1 || endFilter == 2) - continue; - - if (l.startsWith("#BOS")) { - - state = 2; - continue; - } - if (l.startsWith("#500")) - state = 3; - if (l.startsWith("#EOS")) - state = 4; - if (state < 2) - continue; - - if (state == 4) { - - ps = new PSTree(); - ps.create(terminals, nonterminals); - // System.out.println("terminals "+terminals); - // build ps tree - - int cnt = 0; - // ps.entries[0] =CONLLReader09.ROOT; - // ps.head[0]=-1; - int root = -1; - for (Line line : lines) { - - /* - * if (cnt==terminals) { // insert root root =cnt; - * cnt++; } - */ - ps.entries[cnt] = line.form; - if (cnt < terminals) - ps.pos[cnt] = line.pos; - else - ps.entries[cnt] = line.pos; - ps.lemmas[cnt] = line.lemma; - ps.head[cnt] = line.parent == 0 ? lines.size() - 1 - : line.parent >= 500 ? line.parent - 500 + terminals : line.parent; - // ps.head[cnt] = - // line.parent==0?lines.size()-1:line.parent>=500?line.parent-500+terminals:line.parent; - ps.morph[cnt] = line.morph; - cnt++; - - } - - if (root == -1) - root = terminals; - ps.head[cnt - 1] = 0; // root - ps.terminalCount = terminals; - lines.clear(); - state = 1; - - /* - * for(int k=0;k<ps.head.length;k++) { if - * (ps.head[k]<terminals && k!=root) { ps.head[k]=root; // - * DB.println("error "+k+" "+ps.head[k]); } } - */ - // System.out.println(""+ps.toString()); - // if (stop++ == 4)System.exit(0); - return ps; - } - - StringTokenizer t = new StringTokenizer(l, "\t"); - int tc = 0; - Line line = new Line(); - lines.add(line); - while (t.hasMoreTokens()) { - String token = t.nextToken(); - if (token.equals("\t")) - continue; - if (tc == 0) { - if (token.startsWith("#5") || token.startsWith("#6")) { - nonterminals++; - - } else { - terminals++; - - // change it back to the wrong format since the - // conll stuff was derived from this. - // if (token.equals("durchblicken")) - // token="durchblikken"; - line.form = token; - } - - } else if (tc == 1) { - line.lemma = token; - } else if (tc == 2) { - line.pos = token; - } else if (tc == 3) { - line.morph = token; - } else if (tc == 4) { - line.edge = token; - } else if (tc == 5) { - line.parent = Integer.parseInt(token); - } - - if (token.length() > 0) - tc++; - } - - // read till #EOS - - } - } catch (Exception e) { - e.printStackTrace(); - } - return ps; - - } - -} diff --git a/dependencyParser/mate-tools/src/is2/lemmatizer/Evaluator.java b/dependencyParser/mate-tools/src/is2/lemmatizer/Evaluator.java deleted file mode 100755 index cc1b423..0000000 --- a/dependencyParser/mate-tools/src/is2/lemmatizer/Evaluator.java +++ /dev/null @@ -1,108 +0,0 @@ -package is2.lemmatizer; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.Comparator; -import java.util.Hashtable; -import java.util.Map.Entry; - -import is2.data.SentenceData09; -import is2.io.CONLLReader09; - -public class Evaluator { - - public static void evaluate(String act_file, String pred_file, String format) throws Exception { - - CONLLReader09 goldReader = new CONLLReader09(act_file, CONLLReader09.NO_NORMALIZE); - CONLLReader09 predictedReader = new CONLLReader09(pred_file, CONLLReader09.NO_NORMALIZE); - // predictedReader.startReading(pred_file); - - Hashtable<String, Integer> errors = new Hashtable<String, Integer>(); - - int total = 0, corrL = 0, corrT = 0; - int numsent = 0; - SentenceData09 goldInstance = goldReader.getNext(); - SentenceData09 predInstance = predictedReader.getNext(); - - while (goldInstance != null) { - - int instanceLength = goldInstance.length(); - - if (instanceLength != predInstance.length()) - System.out.println("Lengths do not match on sentence " + numsent); - - String gold[] = goldInstance.lemmas; - String pred[] = predInstance.plemmas; - - boolean whole = true; - boolean wholeL = true; - - // NOTE: the first item is the root info added during - // nextInstance(), so we skip it. - - for (int i = 1; i < instanceLength; i++) { - if (gold[i].toLowerCase().equals(pred[i].toLowerCase())) - corrT++; - - if (gold[i].equals(pred[i])) - corrL++; - else { - - // System.out.println("error gold:"+goldPos[i]+" - // pred:"+predPos[i]+" "+goldInstance.forms[i]+" snt - // "+numsent+" i:"+i); - String key = "gold: '" + gold[i] + "' pred: '" + pred[i] + "'"; - Integer cnt = errors.get(key); - if (cnt == null) { - errors.put(key, 1); - } else { - errors.put(key, cnt + 1); - } - } - - } - total += instanceLength - 1; // Subtract one to not score fake root - // token - - if (whole) { - } - if (wholeL) { - } - numsent++; - - goldInstance = goldReader.getNext(); - predInstance = predictedReader.getNext(); - } - ArrayList<Entry<String, Integer>> opsl = new ArrayList<Entry<String, Integer>>(); - for (Entry<String, Integer> e : errors.entrySet()) { - opsl.add(e); - } - - Collections.sort(opsl, new Comparator<Entry<String, Integer>>() { - - @Override - public int compare(Entry<String, Integer> o1, Entry<String, Integer> o2) { - - return o1.getValue() == o2.getValue() ? 0 : o1.getValue() > o2.getValue() ? 1 : -1; - } - - }); - - /* - * for(Entry<String, Integer> e : opsl) { - * System.out.println(e.getKey()+" "+e.getValue()); } - */ - - System.out.println("Tokens: " + total + " Correct: " + corrT + " " + (float) corrT / total - + " correct uppercase " + (float) corrL / total); - } - - public static void main(String[] args) throws Exception { - String format = "CONLL"; - if (args.length > 2) - format = args[2]; - - evaluate(args[0], args[1], format); - } - -} diff --git a/dependencyParser/mate-tools/src/is2/lemmatizer/Lemmatizer.java b/dependencyParser/mate-tools/src/is2/lemmatizer/Lemmatizer.java deleted file mode 100755 index b15aaa7..0000000 --- a/dependencyParser/mate-tools/src/is2/lemmatizer/Lemmatizer.java +++ /dev/null @@ -1,543 +0,0 @@ -package is2.lemmatizer; - -import java.io.BufferedInputStream; -import java.io.BufferedOutputStream; -import java.io.DataInputStream; -import java.io.DataOutputStream; -import java.io.FileInputStream; -import java.io.FileNotFoundException; -import java.io.FileOutputStream; -import java.io.IOException; -import java.util.ArrayList; -import java.util.Collections; -import java.util.Comparator; -import java.util.HashMap; -import java.util.Map.Entry; -import java.util.zip.ZipEntry; -import java.util.zip.ZipInputStream; -import java.util.zip.ZipOutputStream; - -import is2.data.Cluster; -import is2.data.F2SF; -import is2.data.FV; -import is2.data.Instances; -import is2.data.InstancesTagger; -import is2.data.Long2Int; -import is2.data.ParametersFloat; -import is2.data.PipeGen; -import is2.data.SentenceData09; -import is2.io.CONLLReader09; -import is2.io.CONLLWriter09; -import is2.tools.IPipe; -import is2.tools.Tool; -import is2.tools.Train; -import is2.util.DB; -import is2.util.OptionsSuper; - -public class Lemmatizer implements Tool, Train { - - public Pipe pipe; - public ParametersFloat params; - private Long2Int li; - - private boolean doUppercase = false; - - private long[] vs = new long[40]; - - /** - * Creates a lemmatizer due to the model stored in modelFileName - * - * @param modelFileName - * the path and file name to a lemmatizer model - */ - public Lemmatizer(String modelFileName) { - - // tell the lemmatizer the location of the model - try { - Options m_options = new Options(new String[] { "-model", modelFileName }); - li = new Long2Int(m_options.hsize); - - // initialize the lemmatizer - readModel(m_options); - - } catch (IOException e) { - e.printStackTrace(); - } - } - - public Lemmatizer(boolean doUppercase) { - this.doUppercase = doUppercase; - } - - public static void main(String[] args) throws FileNotFoundException, Exception { - - Options options = new Options(args); - Lemmatizer lemmatizer = new Lemmatizer(options.upper); - - long start = System.currentTimeMillis(); - - if (options.train) { - - lemmatizer.li = new Long2Int(options.hsize); - lemmatizer.pipe = new Pipe(options, lemmatizer.li); - - InstancesTagger is = lemmatizer.pipe.createInstances(options.trainfile); - - DB.println("Features: " + lemmatizer.pipe.mf.size() + " Operations " - + lemmatizer.pipe.mf.getFeatureCounter().get(Pipe.OPERATION)); - - ParametersFloat params = new ParametersFloat(lemmatizer.li.size()); - - lemmatizer.train(options, lemmatizer.pipe, params, is); - - lemmatizer.writeModel(options, lemmatizer.pipe, params); - } - - if (options.test) { - - lemmatizer.readModel(options); - - lemmatizer.out(options, lemmatizer.pipe, lemmatizer.params); - } - - System.out.println(); - - if (options.eval) { - System.out.println("\nEVALUATION PERFORMANCE:"); - Evaluator.evaluate(options.goldfile, options.outfile, options.format); - } - long end = System.currentTimeMillis(); - System.out.println("used time " + ((float) ((end - start) / 100) / 10)); - } - - /* - * (non-Javadoc) - * - * @see is2.tools.Train#writeModel(is2.util.OptionsSuper, is2.tools.IPipe, - * is2.data.ParametersFloat) - */ - @Override - public void writeModel(OptionsSuper options, IPipe pipe, ParametersFloat params) { - try { - // store the model - ZipOutputStream zos = new ZipOutputStream( - new BufferedOutputStream(new FileOutputStream(options.modelName))); - zos.putNextEntry(new ZipEntry("data")); - DataOutputStream dos = new DataOutputStream(new BufferedOutputStream(zos)); - - MFO.writeData(dos); - - dos.flush(); - params.write(dos); - - pipe.write(dos); - - dos.writeBoolean(this.doUppercase); - - dos.flush(); - dos.close(); - } catch (Exception e) { - e.printStackTrace(); - } - } - - @Override - public void readModel(OptionsSuper options) { - - try { - - // load the model - ZipInputStream zis = new ZipInputStream(new BufferedInputStream(new FileInputStream(options.modelName))); - zis.getNextEntry(); - DataInputStream dis = new DataInputStream(new BufferedInputStream(zis)); - - MFO mf = new MFO(); - mf.read(dis); - params = new ParametersFloat(0); - params.read(dis); - li = new Long2Int(params.size()); - pipe = new Pipe(options, li); - pipe.mf = mf; - - pipe.initFeatures(); - pipe.initValues(); - - pipe.readMap(dis); - - for (Entry<String, Integer> e : MFO.getFeatureSet().get(Pipe.OPERATION).entrySet()) { - this.pipe.types[e.getValue()] = e.getKey(); - // System.out.println("set pos "+e.getKey()); - } - - pipe.cl = new Cluster(dis); - - if (dis.available() > 0) - this.doUppercase = dis.readBoolean(); - - dis.close(); - DB.println("Loading data finished. "); - - DB.println("number of params " + params.parameters.length); - DB.println("number of classes " + pipe.types.length); - - } catch (Exception e) { - e.printStackTrace(); - } - - } - - /** - * Do the training - * - * @param instanceLengths - * @param options - * @param pipe - * @param params - * @param li - * @throws IOException - * @throws InterruptedException - * @throws ClassNotFoundException - */ - @Override - public void train(OptionsSuper options, IPipe p, ParametersFloat params, Instances ist) { - - InstancesTagger is = (InstancesTagger) ist; - - int i = 0, del = 0; - FV g = new FV(), f = new FV(); - - int LC = this.pipe.types.length + 1, UC = LC + 1; - - String wds[] = MFO.reverse(MFO.getFeatureSet().get(PipeGen.WORD)); - - F2SF fs = params.getFV(); - double upd = 0; - - for (i = 0; i < options.numIters; i++) { - - System.out.print("Iteration " + i + ": "); - - long start = System.currentTimeMillis(); - int numInstances = is.size(); - int correct = 0, count = 0; - - long last = System.currentTimeMillis(); - int wrongOp = 0, correctOp = 0, correctUC = 0, wrongUC = 0; - - HashMap<String, Integer> map = new HashMap<String, Integer>(); - - for (int n = 0; n < numInstances; n++) { - - if ((n + 1) % 500 == 0) - del = PipeGen.outValueErr(n + 1, count - correct, (float) correct / (float) count, del, last, upd); - - upd = options.numIters * numInstances - (numInstances * i + (n + 1)) + 1; - - for (int k = 0; k < is.length(n); k++) { - - double best = -1000; - String bestOp = ""; - - count++; - pipe.addCoreFeatures(is, n, k, 0, wds[is.forms[n][k]], vs); - - String lemma = pipe.opse.get(wds[is.forms[n][k]].toLowerCase()); - - // predict - if (lemma == null) - for (int t = 0; t < pipe.types.length; t++) { - - fs.clear(); - for (int l = vs.length - 1; l >= 0; l--) - if (vs[l] > 0) - fs.add(li.l2i(vs[l] + (t * Pipe.s_type))); - - float score = (float) fs.getScore(); - if (score > best) { - bestOp = pipe.types[t]; - best = score; - } - } - - if (doUppercase) { - fs.clear(); - for (int l = vs.length - 1; l >= 0; l--) - if (vs[l] > 0) - fs.add(li.l2i(vs[l] + (LC * Pipe.s_type))); - - int correctOP = -1, selectedOP = -1; - if (wds[is.glemmas[n][k]].length() > 0 && Character.isUpperCase(wds[is.glemmas[n][k]].charAt(0)) - && fs.score > 0) { - - correctOP = UC; - selectedOP = LC; - } else if (wds[is.glemmas[n][k]].length() > 0 - && Character.isLowerCase(wds[is.glemmas[n][k]].charAt(0)) && fs.score <= 0) { - - correctOP = LC; - selectedOP = UC; - } - - if (correctOP != -1 && wds[is.glemmas[n][k]].length() > 0) { - - wrongUC++; - f.clear(); - for (int l = vs.length - 1; l >= 0; l--) - if (vs[l] > 0) - f.add(li.l2i(vs[l] + (selectedOP * Pipe.s_type))); - - g.clear(); - for (int l = vs.length - 1; l >= 0; l--) - if (vs[l] > 0) - g.add(li.l2i(vs[l] + (correctOP * Pipe.s_type))); - - double lam_dist = params.getScore(g) - params.getScore(f);// f - double loss = 1 - lam_dist; - - FV dist = g.getDistVector(f); - dist.update(params.parameters, params.total, params.update(dist, loss), upd, false); - - } else { - correctUC++; - } - } - if (lemma != null) { - correct++; - correctOp++; - continue; - } - - String op = Pipe.getOperation(is, n, k, wds); - if (op.equals(bestOp)) { - correct++; - correctOp++; - continue; - } - wrongOp++; - - f.clear(); - int bop = pipe.mf.getValue(Pipe.OPERATION, bestOp); - for (int r = vs.length - 1; r >= 0; r--) - if (vs[r] > 0) - f.add(li.l2i(vs[r] + (bop * Pipe.s_type))); - - g.clear(); - int gop = pipe.mf.getValue(Pipe.OPERATION, op); - for (int r = vs.length - 1; r >= 0; r--) - if (vs[r] > 0) - g.add(li.l2i(vs[r] + (gop * Pipe.s_type))); - double lam_dist = params.getScore(g) - params.getScore(f);// f - - double loss = 1 - lam_dist; - - FV dist = g.getDistVector(f); - - dist.update(params.parameters, params.total, params.update(dist, loss), upd, false); // 0.05 - - } - - } - ArrayList<Entry<String, Integer>> opsl = new ArrayList<Entry<String, Integer>>(); - for (Entry<String, Integer> e : map.entrySet()) { - if (e.getValue() > 1) { - opsl.add(e); - } - } - - Collections.sort(opsl, new Comparator<Entry<String, Integer>>() { - @Override - public int compare(Entry<String, Integer> o1, Entry<String, Integer> o2) { - - return o1.getValue() == o2.getValue() ? 0 : o1.getValue() > o2.getValue() ? 1 : -1; - } - }); - - if (opsl.size() > 0) - System.out.println(); - for (Entry<String, Integer> e : opsl) { - System.out.println(e.getKey() + " " + e.getValue()); - } - map.clear(); - - del = PipeGen.outValueErr(numInstances, count - correct, (float) correct / (float) count, del, last, upd, - "time " + (System.currentTimeMillis() - start) + " corr/wrong " + correctOp + " " + wrongOp - + " uppercase corr/wrong " + correctUC + " " + wrongUC); - del = 0; - System.out.println(); - } - - params.average(i * is.size()); - - } - - /** - * Do the work - * - * @param options - * @param pipe - * @param params - * @throws IOException - */ - @Override - public void out(OptionsSuper options, IPipe pipe, ParametersFloat params) { - - long start = System.currentTimeMillis(); - - CONLLReader09 depReader = new CONLLReader09(options.testfile, CONLLReader09.NO_NORMALIZE); - depReader.setInputFormat(options.formatTask); - CONLLWriter09 depWriter = new CONLLWriter09(options.outfile); - depWriter.setOutputFormat(options.formatTask); - - System.out.print("Processing Sentence: "); - - int cnt = 0; - int del = 0; - - try { - - while (true) { - - InstancesTagger is = new InstancesTagger(); - - is.init(1, new MFO()); - SentenceData09 instance = depReader.getNext(is);// pipe.nextInstance(null, - // depReader); - - if (instance == null) - break; - is.fillChars(instance, 0, Pipe._CEND); - cnt++; - SentenceData09 i09 = lemmatize(is, instance, this.li); - - if (options.normalize) - for (int k = 0; k < i09.length(); k++) { - boolean save = depReader.normalizeOn; - depReader.normalizeOn = true; - i09.plemmas[k] = depReader.normalize(i09.plemmas[k]); - depReader.normalizeOn = save; - } - - if (options.overwritegold) - i09.lemmas = i09.plemmas; - - depWriter.write(i09); - - if (cnt % 100 == 0) - del = PipeGen.outValue(cnt, del); - - } - depWriter.finishWriting(); - del = PipeGen.outValue(cnt, del); - long end = System.currentTimeMillis(); - - System.out.println(PipeGen.getSecondsPerInstnace(cnt, (end - start))); - System.out.println(PipeGen.getUsedTime(end - start)); - } catch (Exception e) { - e.printStackTrace(); - } - } - - private SentenceData09 lemmatize(InstancesTagger is, SentenceData09 instance, Long2Int li) { - - int LC = pipe.types.length + 1; - - is.feats[0] = new short[instance.length()][11]; - - is.fillChars(instance, 0, Pipe._CEND); - - int length = instance.length(); - - F2SF fs = new F2SF(params.parameters); - - for (int w1 = 0; w1 < length; w1++) { - instance.plemmas[w1] = "_"; - pipe.addCoreFeatures(is, 0, w1, 0, instance.forms[w1], vs); - - String f = null; - if (is.forms[0][w1] != -1) { - f = pipe.opse.get(instance.forms[w1].toLowerCase()); - if (f != null) { - instance.plemmas[w1] = f; - } - } - double best = -1000.0; - int bestOp = 0; - - for (int t = 0; t < pipe.types.length; t++) { - - fs.clear(); - for (int l = vs.length - 1; l >= 0; l--) - if (vs[l] > 0) - fs.add(li.l2i(vs[l] + (t * Pipe.s_type))); - - if (fs.score >= best) { - best = fs.score; - bestOp = t; - } - } - // instance.ppos[w1]=""+bestOp; - if (f == null) - instance.plemmas[w1] = StringEdit.change( - (doUppercase ? instance.forms[w1] : instance.forms[w1].toLowerCase()), pipe.types[bestOp]); - - // check for empty string - if (instance.plemmas[w1].length() == 0) - instance.plemmas[w1] = "_"; - - if (doUppercase) { - fs.clear(); - for (int l = vs.length - 1; l >= 0; l--) - if (vs[l] > 0) - fs.add(li.l2i(vs[l] + (LC * Pipe.s_type))); - - try { - - if (fs.score <= 0 && instance.plemmas[w1].length() > 1) { - instance.plemmas[w1] = Character.toUpperCase(instance.plemmas[w1].charAt(0)) - + instance.plemmas[w1].substring(1); - } else if (fs.score <= 0 && instance.plemmas[w1].length() > 0) { - instance.plemmas[w1] = String.valueOf(Character.toUpperCase(instance.plemmas[w1].charAt(0))); - } else if (fs.score > 0) { - instance.plemmas[w1] = instance.plemmas[w1].toLowerCase(); - } - - } catch (Exception e) { - e.printStackTrace(); - // System.out.println("error "+pipe.types[bestOp]+" - // "+instance.forms[w1]); - } - } - } - - SentenceData09 i09 = new SentenceData09(instance); - i09.createSemantic(instance); - return i09; - } - - /* - * (non-Javadoc) - * - * @see is2.tools.Tool#apply(is2.data.SentenceData09) - */ - @Override - public SentenceData09 apply(SentenceData09 snt) { - InstancesTagger is = new InstancesTagger(); - - // be robust - if (snt.length() == 0) - return snt; - - SentenceData09 it = new SentenceData09(); - it.createWithRoot(snt); - - is.init(1, new MFO()); - is.createInstance09(it.length()); - is.fillChars(it, 0, Pipe._CEND); - - for (int j = 0; j < it.length(); j++) - is.setForm(0, j, it.forms[j]); - - return lemmatize(is, it, li); - } - -} diff --git a/dependencyParser/mate-tools/src/is2/lemmatizer/MFO.java b/dependencyParser/mate-tools/src/is2/lemmatizer/MFO.java deleted file mode 100755 index 305e827..0000000 --- a/dependencyParser/mate-tools/src/is2/lemmatizer/MFO.java +++ /dev/null @@ -1,246 +0,0 @@ -package is2.lemmatizer; - -import java.io.DataInputStream; -import java.io.DataOutputStream; -import java.io.IOException; -import java.util.HashMap; -import java.util.Map.Entry; - -import is2.data.IEncoderPlus; -import is2.util.DB; - -/** - * Map Features, do not map long to integer - * - * @author Bernd Bohnet, 20.09.2009 - */ - -final public class MFO implements IEncoderPlus { - - /** The features and its values */ - static private final HashMap<String, HashMap<String, Integer>> m_featureSets = new HashMap<String, HashMap<String, Integer>>(); - - /** The feature class and the number of values */ - static private final HashMap<String, Integer> m_featureCounters = new HashMap<String, Integer>(); - - /** The number of bits needed to encode a feature */ - static final HashMap<String, Integer> m_featureBits = new HashMap<String, Integer>(); - - /** Integer counter for long2int */ - static private int count = 0; - - /** Stop growing */ - public boolean stop = false; - - final public static String NONE = "<None>"; - - public MFO() { - } - - public int size() { - return count; - } - - /** - * Register an attribute class, if it not exists and add a possible value - * - * @param type - * @param type2 - */ - @Override - final public int register(String a, String v) { - - HashMap<String, Integer> fs = getFeatureSet().get(a); - if (fs == null) { - fs = new HashMap<String, Integer>(); - getFeatureSet().put(a, fs); - fs.put(NONE, 0); - getFeatureCounter().put(a, 1); - } - Integer c = getFeatureCounter().get(a); - - Integer i = fs.get(v); - if (i == null) { - fs.put(v, c); - c++; - getFeatureCounter().put(a, c); - return c - 1; - } else - return i; - } - - /** - * Calculates the number of bits needed to encode a feature - */ - public void calculateBits() { - - for (Entry<String, Integer> e : getFeatureCounter().entrySet()) { - int bits = (int) Math.ceil((Math.log(e.getValue() + 1) / Math.log(2))); - m_featureBits.put(e.getKey(), bits); - } - - // System.out.println("total number of needed bits "+total); - } - - @Override - public String toString() { - - StringBuffer content = new StringBuffer(); - for (Entry<String, Integer> e : getFeatureCounter().entrySet()) { - content.append(e.getKey() + " " + e.getValue()); - content.append(':'); - // HashMap<String,Integer> vs = getFeatureSet().get(e.getKey()); - content.append(getFeatureBits(e.getKey())); - - /* - * if (vs.size()<120) for(Entry<String,Integer> e2 : vs.entrySet()) - * { content.append(e2.getKey()+" ("+e2.getValue()+") "); } - */ - content.append('\n'); - - } - return content.toString(); - } - - static final public short getFeatureBits(String a) { - if (m_featureBits.get(a) == null) - return 0; - return (short) m_featureBits.get(a).intValue(); - } - - /** - * Get the integer place holder of the string value v of the type a - * - * @param t - * the type - * @param v - * the value - * @return the integer place holder of v - */ - @Override - final public int getValue(String t, String v) { - - if (m_featureSets.get(t) == null) - return -1; - Integer vi = m_featureSets.get(t).get(v); - if (vi == null) - return -1; // stop && - return vi.intValue(); - } - - /** - * Static version of getValue - * - * @see getValue - */ - static final public int getValueS(String a, String v) { - - if (m_featureSets.get(a) == null) - return -1; - Integer vi = m_featureSets.get(a).get(v); - if (vi == null) - return -1; // stop && - return vi.intValue(); - } - - public int hasValue(String a, String v) { - - Integer vi = m_featureSets.get(a).get(v); - if (vi == null) - return -1; - return vi.intValue(); - } - - public static String printBits(int k) { - StringBuffer s = new StringBuffer(); - for (int i = 0; i < 31; i++) { - s.append((k & 0x00000001) == 1 ? '1' : '0'); - k = k >> 1; - - } - s.reverse(); - return s.toString(); - } - - /** - * Maps a long to a integer value. This is very useful to save memory for - * sparse data long values - * - * @param l - * @return the integer - */ - static public int misses = 0; - static public int good = 0; - - /** - * Write the data - * - * @param dos - * @throws IOException - */ - static public void writeData(DataOutputStream dos) throws IOException { - dos.writeInt(getFeatureSet().size()); - // DB.println("write"+getFeatureSet().size()); - for (Entry<String, HashMap<String, Integer>> e : getFeatureSet().entrySet()) { - dos.writeUTF(e.getKey()); - dos.writeInt(e.getValue().size()); - - for (Entry<String, Integer> e2 : e.getValue().entrySet()) { - - if (e2.getKey() == null) - DB.println("key " + e2.getKey() + " value " + e2.getValue() + " e -key " + e.getKey()); - dos.writeUTF(e2.getKey()); - dos.writeInt(e2.getValue()); - - } - - } - } - - public void read(DataInputStream din) throws IOException { - - int size = din.readInt(); - for (int i = 0; i < size; i++) { - String k = din.readUTF(); - int size2 = din.readInt(); - - HashMap<String, Integer> h = new HashMap<String, Integer>(); - getFeatureSet().put(k, h); - for (int j = 0; j < size2; j++) { - h.put(din.readUTF(), din.readInt()); - } - getFeatureCounter().put(k, size2); - } - - count = size; - // stop(); - calculateBits(); - } - - /** - * Clear the data - */ - static public void clearData() { - getFeatureSet().clear(); - m_featureBits.clear(); - getFeatureSet().clear(); - } - - @Override - public HashMap<String, Integer> getFeatureCounter() { - return m_featureCounters; - } - - static public HashMap<String, HashMap<String, Integer>> getFeatureSet() { - return m_featureSets; - } - - static public String[] reverse(HashMap<String, Integer> v) { - String[] set = new String[v.size()]; - for (Entry<String, Integer> e : v.entrySet()) { - set[e.getValue()] = e.getKey(); - } - return set; - } - -} diff --git a/dependencyParser/mate-tools/src/is2/lemmatizer/Options.java b/dependencyParser/mate-tools/src/is2/lemmatizer/Options.java deleted file mode 100755 index 30c2567..0000000 --- a/dependencyParser/mate-tools/src/is2/lemmatizer/Options.java +++ /dev/null @@ -1,72 +0,0 @@ -package is2.lemmatizer; - -import java.io.File; -import java.io.IOException; - -import is2.util.OptionsSuper; - -public final class Options extends OptionsSuper { - - public Options(String[] args) throws IOException { - - for (int i = 0; i < args.length; i++) { - - if (args[i].equals("--help")) - explain(); - - if (args[i].equals("-normalize")) { - normalize = Boolean.parseBoolean(args[++i]); - } else if (args[i].equals("-features")) { - features = args[i + 1]; - i++; - } else if (args[i].equals("-hsize")) { - hsize = Integer.parseInt(args[i + 1]); - i++; - } else if (args[i].equals("-len")) { - maxLen = Integer.parseInt(args[i + 1]); - i++; - } else if (args[i].equals("-tmp")) { - tmp = args[i + 1]; - i++; - } else if (args[i].equals("-uc")) { - upper = true; - System.out.println("set uppercase " + upper); - - } else - super.addOption(args, i); - - } - - if (trainfile != null) { - - if (tmp != null) - trainforest = File.createTempFile("train", ".tmp", new File(tmp)); - else - trainforest = File.createTempFile("train", ".tmp"); // ,new - // File("F:\\") - trainforest.deleteOnExit(); - } - - } - - private void explain() { - System.out.println("Usage: "); - System.out.println("java -class mate.jar is2.lemmatizer.Lemmatizer [Options]"); - System.out.println(); - System.out.println("Options:"); - System.out.println(""); - System.out.println(" -train <file> the corpus a model is trained on; default " + this.trainfile); - System.out.println(" -test <file> the input corpus for testing; default " + this.testfile); - System.out.println(" -out <file> the output corpus (result) of a test run; default " + this.outfile); - System.out.println(" -model <file> the parsing model for traing the model is stored in the files"); - System.out.println( - " and for parsing the model is load from this file; default " + this.modelName); - System.out.println( - " -i <number> the number of training iterations; good numbers are 10 for smaller corpora and 6 for bigger; default " - + this.numIters); - System.out.println(" -count <number> the n first sentences of the corpus are take for the training default " - + this.count); - - System.exit(0); - } -} diff --git a/dependencyParser/mate-tools/src/is2/lemmatizer/Pipe.java b/dependencyParser/mate-tools/src/is2/lemmatizer/Pipe.java deleted file mode 100755 index c8b4bba..0000000 --- a/dependencyParser/mate-tools/src/is2/lemmatizer/Pipe.java +++ /dev/null @@ -1,671 +0,0 @@ -package is2.lemmatizer; - -import java.io.DataInputStream; -import java.io.DataOutputStream; -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.Map.Entry; - -import is2.data.Cluster; -import is2.data.D4; -import is2.data.Instances; -import is2.data.InstancesTagger; -import is2.data.Long2Int; -import is2.data.PipeGen; -import is2.data.SentenceData09; -import is2.io.CONLLReader09; -import is2.tools.IPipe; -import is2.util.DB; -import is2.util.OptionsSuper; - -final public class Pipe extends PipeGen implements IPipe { - - private static final int _MIN_WORDS_MAPPED_BY_SCRIPT = 1; - private static final int _MIN_OCCURENT_FOR_SCRIPT_USE = 4; - - private static final String _F0 = "F0"; - private static final String _F1 = "F1", _F2 = "F2", _F3 = "F3", _F4 = "F4", _F5 = "F5", _F6 = "F6", _F7 = "F7", - _F8 = "F8", _F9 = "F9", _F10 = "F10"; - private static final String _F11 = "F11", _F12 = "F12", _F13 = "F13", _F14 = "F14", _F15 = "F15", _F16 = "F16", - _F17 = "F17", _F18 = "F18", _F19 = "F19", _F20 = "F20"; - private static final String _F21 = "F21", _F22 = "F22", _F23 = "F23", _F24 = "F24", _F25 = "F25", _F26 = "F26", - _F27 = "F27", _F28 = "F28", _F29 = "F29", _F30 = "F30"; - private static final String _F31 = "F31", _F32 = "F32", _F33 = "F33", _F34 = "F34", _F35 = "F35", _F36 = "F36", - _F37 = "F37", _F38 = "F38"; - private static int _f0, _f1, _f4, _f5, _f6, _f7, _f8, _f9, _f10, _f11, _f12, _f13, _f14, _f15, _f16, _f17, _f18, - _f19; - private static int _f21, _f27, _f28, _f31, _f32, _f33; - public static int _CEND, _swrd, _ewrd; - - public static final String MID = "MID", END = "END", STR = "STR", OPERATION = "OP"; - - private CONLLReader09 depReader; - - public HashMap<String, String> opse = new HashMap<String, String>(); - - public String[] types; - - public MFO mf = new MFO(); - private D4 z, x; - - Cluster cl; - OptionsSuper options; - Long2Int li; - - public Pipe(OptionsSuper options2, Long2Int l) { - - options = options2; - li = l; - } - - @Override - public InstancesTagger createInstances(String file) { - - InstancesTagger is = new InstancesTagger(); - - depReader = new CONLLReader09(CONLLReader09.NO_NORMALIZE); - - depReader.startReading(file); - mf.register(REL, "<root-type>"); - mf.register(POS, "<root-POS>"); - - System.out.print("Registering feature parts "); - HashMap<String, Integer> ops = new HashMap<String, Integer>(); - HashMap<String, HashSet<String>> op2form = new HashMap<String, HashSet<String>>(); - int ic = 0; - int del = 0; - HashSet<String> rm = new HashSet<String>(); - - while (true) { - SentenceData09 instance1 = depReader.getNext(); - if (instance1 == null) - break; - ic++; - if (ic % 100 == 0) { - del = outValue(ic, del); - } - - String[] labs1 = instance1.labels; - for (String element : labs1) { - // typeAlphabet.lookupIndex(labs1[i1]); - mf.register(REL, element); - } - - String[] w = instance1.forms; - for (int i1 = 0; i1 < w.length; i1++) { - // saw the first time? - if (mf.getValue(WORD, w[i1].toLowerCase()) == -1) - opse.put(instance1.forms[i1].toLowerCase(), instance1.lemmas[i1]); - - mf.register(WORD, w[i1].toLowerCase()); - } - for (String element : w) - mf.register(WORD, element); - - w = instance1.lemmas; - for (String element : w) - mf.register(WORD, element); - for (String element : w) - mf.register(WORD, element.toLowerCase()); - - w = instance1.plemmas; - for (String element : w) - mf.register(WORD, element); - for (String element : w) - mf.register(WORD, element.toLowerCase()); - - for (String element : w) - registerChars(CHAR, element); - - w = instance1.ppos; - for (String element : w) - mf.register(POS, element); - - w = instance1.gpos; - for (String element : w) - mf.register(POS, element); - - for (int i1 = 1; i1 < w.length; i1++) { - String op = getOperation(instance1, i1); - if (ops.get(op) == null) - ops.put(op, 1); - else { - ops.put(op, (ops.get(op) + 1)); - if (ops.get(op) > 4) - rm.add(instance1.forms[i1].toLowerCase()); - } - - HashSet<String> forms = op2form.get(op); - if (forms == null) { - forms = new HashSet<String>(); - op2form.put(op, forms); - } - forms.add(instance1.forms[i1].toLowerCase()); - - } - - } - - int countFreqSingleMappings = 0; - - int sc = 0; - ArrayList<Entry<String, Integer>> opsl = new ArrayList<Entry<String, Integer>>(); - for (Entry<String, Integer> e : ops.entrySet()) { - - // do not use scripts for infrequent cases or frequent single - // mappings (der -> die) - if (e.getValue() > _MIN_OCCURENT_FOR_SCRIPT_USE - && op2form.get(e.getKey()).size() > _MIN_WORDS_MAPPED_BY_SCRIPT) { - mf.register(OPERATION, e.getKey()); - sc++; - opsl.add(e); - } else { - // do not remove the infrequent cases - rm.removeAll(op2form.get(e.getKey())); - - if (op2form.get(e.getKey()).size() <= 1) - countFreqSingleMappings += op2form.get(e.getKey()).size(); - } - } - for (String k : rm) { - opse.remove(k); - } - - Collections.sort(opsl, new Comparator<Entry<String, Integer>>() { - - @Override - public int compare(Entry<String, Integer> o1, Entry<String, Integer> o2) { - - return o1.getValue() == o2.getValue() ? 0 : o1.getValue() > o2.getValue() ? 1 : -1; - } - }); - - /* - * for(Entry<String, Integer> e : opsl) { - * System.out.println(e.getKey()+" "+e.getValue()); } - */ - - if (options.clusterFile == null) - cl = new Cluster(); - else - cl = new Cluster(options.clusterFile, mf, 6); - - System.out.println("\nfound scripts " + ops.size() + " used scripts " + sc); - System.out.println("found mappings of single words " + countFreqSingleMappings); - System.out.println("use word maps instead of scripts " + this.opse.size()); - // System.out.println(" "+opse); - System.out.println("" + mf.toString()); - - initFeatures(); - - mf.calculateBits(); - initValues(); - - depReader.startReading(options.trainfile); - - int i = 0; - long start1 = System.currentTimeMillis(); - - System.out.print("Creating Features: "); - is.init(ic, mf); - del = 0; - while (true) { - try { - if (i % 100 == 0) { - del = outValue(i, del); - } - SentenceData09 instance1 = depReader.getNext(is); - if (instance1 == null) - break; - - is.fillChars(instance1, i, _CEND); - - if (i > options.count) - break; - - i++; - } catch (Exception e) { - DB.println("error in sentnence " + i); - e.printStackTrace(); - } - } - long end1 = System.currentTimeMillis(); - System.gc(); - long mem2 = Runtime.getRuntime().totalMemory() - Runtime.getRuntime().freeMemory(); - System.out.print(" time " + (end1 - start1) + " mem " + (mem2 / 1024) + " kb"); - - types = new String[mf.getFeatureCounter().get(OPERATION)]; - - for (Entry<String, Integer> e : MFO.getFeatureSet().get(OPERATION).entrySet()) { - types[e.getValue()] = e.getKey(); - // System.out.println("set pos "+e.getKey()); - } - - System.out.println("Num Features: " + mf.size()); - - return is; - - } - - /** - * @param is - * @param n - * @param k - * @param wds - * @return - */ - public static String getOperation(Instances is, int n, int k, String[] wds) { - - String form = wds[is.forms[n][k]]; - String olemma = wds[is.glemmas[n][k]]; - - String s = new StringBuffer(form.toLowerCase()).reverse().toString(); - String t = new StringBuffer(olemma.toLowerCase()).reverse().toString(); - - return getOperation2(s, t); - } - - public static String getOperation(SentenceData09 instance1, int i1) { - String s = new StringBuffer(instance1.forms[i1].toLowerCase()).reverse().toString(); - String t = new StringBuffer(instance1.lemmas[i1].toLowerCase()).reverse().toString(); - - return getOperation2(s, t); - } - - public static String getOperation(String si, String ti) { - String s = new StringBuffer(si.toLowerCase()).reverse().toString(); - String t = new StringBuffer(ti.toLowerCase()).reverse().toString(); - - return getOperation2(s, t); - } - - private static String getOperation2(String s, String t) { - StringBuffer po = new StringBuffer(); - String op; - if (!s.equals(t)) { - - int[][] d = StringEdit.LD(s, t); - StringEdit.searchPath(s, t, d, po, false); - op = po.toString(); - - } else - op = "0"; // do nothing - return op; - } - - private void registerChars(String type, String word) { - for (int i = 0; i < word.length(); i++) - mf.register(type, Character.toString(word.charAt(i))); - } - - @Override - public void initValues() { - - z = new D4(li); - - x = new D4(li); - x.a0 = s_type; - - s_pos = mf.getFeatureCounter().get(POS).intValue();// mf.getFeatureBits(POS); - s_word = mf.getFeatureCounter().get(WORD); - s_type = mf.getFeatureCounter().get(TYPE).intValue();// mf.getFeatureBits(TYPE); - s_char = mf.getFeatureCounter().get(CHAR).intValue();// mf.getFeatureBits(CHAR); - s_oper = mf.getFeatureCounter().get(OPERATION).intValue();// mf.getFeatureBits(OPERATION); - - types = new String[mf.getFeatureCounter().get(Pipe.OPERATION)]; - for (Entry<String, Integer> e : MFO.getFeatureSet().get(Pipe.OPERATION).entrySet()) - types[e.getValue()] = e.getKey(); - - // wds = new String[mf.getFeatureCounter().get(Pipe.WORD)]; - // for(Entry<String,Integer> e : - // mf.getFeatureSet().get(Pipe.WORD).entrySet()) wds[e.getValue()] = - // e.getKey(); - - z.a0 = s_type; - z.a1 = s_oper; - z.a2 = s_char; - z.a3 = s_char; - z.a4 = s_char; - z.a5 = s_char; - z.a6 = s_char; - z.a7 = s_char; - x.a0 = s_type; - x.a1 = s_oper; - x.a2 = s_word; - x.a3 = s_word; - x.a4 = s_word; - x.a5 = s_char; - x.a6 = s_char; - x.a7 = s_char; - - } - - public static int s_pos, s_word, s_type, s_dir, s_dist, s_char, s_oper; - - /** - * Initialize the features. - * - * @param maxFeatures - */ - @Override - public void initFeatures() { - - for (int k = 0; k < 50; k++) { - mf.register(TYPE, "F" + k); - } - - _f0 = mf.register(TYPE, _F0); - _f1 = mf.register(TYPE, _F1); - mf.register(TYPE, _F2); - mf.register(TYPE, _F3); - _f4 = mf.register(TYPE, _F4); - _f5 = mf.register(TYPE, _F5); - _f6 = mf.register(TYPE, _F6); - _f7 = mf.register(TYPE, _F7); - _f8 = mf.register(TYPE, _F8); - _f9 = mf.register(TYPE, _F9); - _f10 = mf.register(TYPE, _F10); - _f11 = mf.register(TYPE, _F11); - _f12 = mf.register(TYPE, _F12); - _f13 = mf.register(TYPE, _F13); - _f14 = mf.register(TYPE, _F14); - _f15 = mf.register(TYPE, _F15); - _f16 = mf.register(TYPE, _F16); - _f17 = mf.register(TYPE, _F17); - _f18 = mf.register(TYPE, _F18); - _f19 = mf.register(TYPE, _F19); - mf.register(TYPE, _F20); - _f21 = mf.register(TYPE, _F21); - mf.register(TYPE, _F22); - mf.register(TYPE, _F23); - mf.register(TYPE, _F24); - mf.register(TYPE, _F25); - mf.register(TYPE, _F26); - _f27 = mf.register(TYPE, _F27); - _f28 = mf.register(TYPE, _F28); - mf.register(TYPE, _F29); - mf.register(TYPE, _F30); - - _f31 = mf.register(TYPE, _F31); - _f32 = mf.register(TYPE, _F32); - _f33 = mf.register(TYPE, _F33); - mf.register(TYPE, _F34); - - mf.register(TYPE, _F35); - mf.register(TYPE, _F36); - mf.register(TYPE, _F37); - mf.register(TYPE, _F38); - - mf.register(POS, MID); - mf.register(POS, STR); - mf.register(POS, END); - mf.register(TYPE, CHAR); - - _swrd = mf.register(WORD, STR); - _ewrd = mf.register(WORD, END); - - _CEND = mf.register(CHAR, END); - - } - - final public void addCoreFeatures(InstancesTagger is, int ic, int i, int oper, String form, long[] f) { - - for (int l = f.length - 1; l >= 0; l--) - f[l] = 0; - - int formi = is.forms[ic][i]; - int wl = is.chars[ic][i][11];// .forms[i].length(); - - int position = 1 + (i < 3 ? i : 3); - - int c0 = is.chars[ic][i][0], c1 = is.chars[ic][i][1], c2 = is.chars[ic][i][2], c3 = is.chars[ic][i][3], - c4 = is.chars[ic][i][4]; - int e0 = is.chars[ic][i][6], e1 = is.chars[ic][i][7], e2 = is.chars[ic][i][8], e3 = is.chars[ic][i][9], - e4 = is.chars[ic][i][10]; - - int len = is.length(ic); - - x.v1 = oper; - x.v0 = _f0; - x.v2 = formi; - x.cz3(); - f[0] = x.getVal(); - f[1] = x.csa(3, position); - x.v0 = _f1; - x.v2 = formi; - x.v3 = i + 1 >= len ? x.v3 = _ewrd : is.forms[ic][i + 1]; - x.cz4(); - f[2] = x.getVal(); - - // contains upper case include again!!! - - short upper = 0; - short number = 1; - for (int k1 = 0; k1 < wl; k1++) { - char c = form.charAt(k1); - if (Character.isUpperCase(c)) { - if (k1 == 0) - upper = 1; - else { - // first char + another - if (upper == 1) - upper = 3; - // another uppercase in the word - else if (upper == 0) - upper = 2; - } - } - - if (Character.isDigit(c) && k1 == 0) - number = 2; - else if (Character.isDigit(c) && number == 1) - number = 3; - - } - - // contains a number - z.v0 = _f21; - z.v2 = number; - z.cz3(); - f[3] = z.getVal(); - - z.v0 = _f4; - z.v1 = oper; - z.v2 = c0; - z.cz3(); - f[4] = z.getVal(); - z.v0 = _f5; - z.v2 = e0; - z.cz3(); - f[5] = z.getVal(); - - z.v2 = c0; - z.v3 = c1; - z.v4 = c2; - z.v5 = c3; - z.v6 = c4; - z.v0 = _f6; - z.cz4(); - f[6] = z.getVal(); - z.v0 = _f7; - z.cz5(); - f[7] = z.getVal(); - z.v0 = _f8; - z.cz6(); - f[8] = z.getVal(); - z.v0 = _f9; - z.cz7(); - f[9] = z.getVal(); - - int c = 10; - z.v2 = e0; - z.v3 = e1; - z.v4 = e2; - z.v5 = e3; - z.v6 = e4; - z.v0 = _f10; - z.cz4(); - f[c++] = z.getVal(); - f[c++] = z.csa(3, upper); - z.v0 = _f11; - z.cz5(); - f[c++] = z.getVal(); - f[c++] = z.csa(3, upper); - z.v0 = _f12; - z.cz6(); - f[c++] = z.getVal(); - f[c++] = z.csa(3, upper); - z.v0 = _f13; - z.cz7(); - f[c++] = z.getVal(); - f[c++] = z.csa(3, upper); - - if (len > i + 1) { - - z.v0 = _f14; - z.v2 = is.chars[ic][i + 1][0]; - z.cz3(); - f[c++] = z.getVal(); - - z.v0 = _f15; - z.v2 = is.chars[ic][i + 1][5]; - z.cz3(); - f[c++] = z.getVal(); - - if (is.chars[ic][i + 1][11] > 1) { - z.v0 = _f16; - z.v2 = is.chars[ic][i + 1][0]; - z.v3 = is.chars[ic][i + 1][2]; - z.cz4(); - f[c++] = z.getVal(); - - z.v0 = _f17; - z.v2 = is.chars[ic][i + 1][1]; - z.v3 = is.chars[ic][i + 1][6]; - z.cz4(); - f[c++] = z.getVal();// fv.add(li.l2i(mf.calc4(b))); - } - - x.v0 = _f18; - x.v2 = is.forms[ic][i + 1]; - x.cz3(); - f[c++] = x.getVal(); - - if (len > i + 2) { - x.v0 = _f32; - x.v2 = is.forms[ic][i + 2]; - x.v3 = is.forms[ic][i + 1]; - x.cz4(); - f[c++] = x.getVal(); - x.cz3(); - f[c++] = x.getVal();// fv.add(li.l2i(mf.calc3(b))); - - } - - if (len > i + 3) { - x.v0 = _f33; - x.v2 = is.forms[ic][i + 3]; - x.v3 = is.forms[ic][i + 2]; - x.cz4(); - f[c++] = x.getVal();// fv.add(li.l2i(mf.calc4(b))); - x.cz3(); - f[27] = x.getVal();// fv.add(li.l2i(mf.calc3(b))); - } - } - - // length - - z.v0 = _f19; - z.v1 = oper; - z.v2 = wl; - z.cz3(); - f[c++] = z.getVal();// fv.add(li.l2i(mf.calc3(dl1))); - - if (i < 1) - return; - - x.v0 = _f27; - x.v1 = oper; - x.v2 = is.forms[ic][i - 1]; - x.cz3(); - f[c++] = x.getVal();// fv.add(li.l2i(mf.calc3(b))); - - if (i < 2) - return; - - // added this before it was 99.46 - x.v0 = _f28; - x.v2 = is.forms[ic][i - 2]; - x.cz3(); - f[c++] = x.getVal();// fv.add(li.l2i(mf.calc3(b))); - - // result 99.484 - if (i < 3) - return; - - x.v0 = _f31; - x.v1 = oper; - x.v2 = is.forms[ic][i - 3]; - x.v3 = is.forms[ic][i - 2]; - x.cz4(); - f[c++] = x.getVal();// fv.add(li.l2i(mf.calc4(b))); - - } - - // public String[] wds; - - /** - * Write the lemma that are not mapped by operations - * - * @param dos - */ - private void writeMap(DataOutputStream dos) { - - try { - dos.writeInt(opse.size()); - for (Entry<String, String> e : opse.entrySet()) { - dos.writeUTF(e.getKey()); - dos.writeUTF(e.getValue()); - } - } catch (IOException e1) { - e1.printStackTrace(); - } - } - - /** - * Read the form-lemma mapping not read by operations - * - * @param dis - */ - public void readMap(DataInputStream dis) { - try { - int size = dis.readInt(); - for (int i = 0; i < size; i++) { - opse.put(dis.readUTF(), dis.readUTF()); - } - } catch (IOException e1) { - e1.printStackTrace(); - } - } - - /* - * (non-Javadoc) - * - * @see is2.tools.IPipe#write(java.io.DataOutputStream) - */ - @Override - public void write(DataOutputStream dos) { - this.writeMap(dos); - try { - cl.write(dos); - } catch (IOException e) { - e.printStackTrace(); - } - - } - -} diff --git a/dependencyParser/mate-tools/src/is2/lemmatizer/StringEdit.java b/dependencyParser/mate-tools/src/is2/lemmatizer/StringEdit.java deleted file mode 100755 index 69fd872..0000000 --- a/dependencyParser/mate-tools/src/is2/lemmatizer/StringEdit.java +++ /dev/null @@ -1,303 +0,0 @@ -package is2.lemmatizer; - -import java.util.ArrayList; - -public class StringEdit { - - public static void main(String args[]) { - - String s = new StringBuffer(args[0]).reverse().toString(); - String t = new StringBuffer(args[1]).reverse().toString(); - - int d[][] = LD(s, t); - - StringBuffer opersations = new StringBuffer(); - searchPath(s, t, d, opersations, false); - System.out.println("resuylt " + " " + opersations); - - } - - // **************************** - // Get minimum of three values - // **************************** - - static private int Minimum(int a, int b, int c) { - int mi; - - mi = a; - if (b < mi) - mi = b; - if (c < mi) - mi = c; - - return mi; - - } - - // ***************************** - // Compute Levenshtein distance - // ***************************** - - static public int[][] LD(String s, String t) { - - int n = s.length(); - int m = t.length(); - ; // length of t - // char s_i; // ith character of s - // char t_j; // jth character of t - int cost; // cost - - // Step 1 - - int[][] d = new int[n + 1][m + 1]; - - if (n == 0) - return d; - if (m == 0) - return d; - - // Step 2 - - for (int i = 0; i <= n; i++) - d[i][0] = i; - for (int j = 0; j <= m; j++) - d[0][j] = j; - - // Step 3 - - for (int i = 1; i <= n; i++) { - - int s_i = s.charAt(i - 1); - - // Step 4 - - for (int j = 1; j <= m; j++) { - - // t_j = t.charAt (j - 1); - - // Step 5 - - if (s_i == t.charAt(j - 1)) - cost = 0; - else - cost = 1; - - // Step 6 - - d[i][j] = Minimum(d[i - 1][j] + 1, d[i][j - 1] + 1, d[i - 1][j - 1] + cost); - - } - - } - - // Step 7 - - return d; - - } - - static String searchPath(String s, String t, int[][] d, StringBuffer operations, boolean debug) { - - StringBuffer result = new StringBuffer(s); - - int n = d.length; - int m = d[0].length; - - int x = n - 1; - int y = m - 1; - boolean changed = false; - while (true) { - if (debug && changed) - System.out.println("result " + new StringBuffer(result).reverse()); - - if (d[x][y] == 0) - break; - if (y > 0 && x > 0 && d[x - 1][y - 1] < d[x][y]) { - if (debug) - System.out.println("min d[x-1][y-1] " + d[x - 1][y - 1] + " d[x][y] " + d[x][y] + " rep " - + s.charAt(x - 1) + " with " + t.charAt(y - 1) + " at " + (x - 1)); - - operations.append('R').append(Character.toString((char) (x - 1))).append(s.charAt(x - 1)) - .append(t.charAt(y - 1)); - if (debug) - result.setCharAt(x - 1, t.charAt(y - 1)); - y--; - x--; - changed = true; - continue; - } - if (y > 0 && d[x][y - 1] < d[x][y]) { - if (debug) - System.out.println("min d[x][y-1] " + d[x][y - 1] + " d[x][y] " + d[x][y] + " ins " - + t.charAt(y - 1) + " at " + (x)); - operations.append('I').append(Character.toString((char) (x))).append(t.charAt(y - 1)); - if (debug) - result.insert(x, t.charAt(y - 1)); - y--; - changed = true; - continue; - } - if (x > 0 && d[x - 1][y] < d[x][y]) { - if (debug) - System.out.println("min d[x-1][y] " + d[x - 1][y] + " d[x][y] " + d[x][y] + " del " - + s.charAt(x - 1) + " at " + (x - 1)); - operations.append('D').append(Character.toString((char) (x - 1))).append(s.charAt(x - 1)); - if (debug) - result.deleteCharAt(x - 1); - x--; - changed = true; - continue; - } - changed = false; - if (x > 0 && y > 0 && d[x - 1][y - 1] == d[x][y]) { - x--; - y--; - continue; - } - if (x > 0 && d[x - 1][y] == d[x][y]) { - x--; - continue; - } - if (y > 0 && d[x][y - 1] == d[x][y]) { - y--; - continue; - } - - } - if (debug) - return result.reverse().toString(); - else - return null; - } - - public static String change(String s, String operations) { - - StringBuffer result = new StringBuffer(s).reverse(); - - int pc = 0; - while (true) { - if (operations.length() <= pc) - break; - char nextOperation = operations.charAt(pc); - pc++; - if (nextOperation == 'R') { - // pc++; - int xm1 = operations.charAt(pc); - pc++; - char replace = operations.charAt(pc); - pc++; - char with = operations.charAt(pc); - // operations.append('R').append((char)x-1).append(s.charAt(x-1)).append(t.charAt(y-1)); - // System.out.println(""+result+" xm1 "+xm1+" op "+operations); - - if (result.length() <= xm1) - return s; - - if (result.charAt(xm1) == replace) - result.setCharAt(xm1, with); - // if (debug) result.setCharAt(x-1, t.charAt(y-1)); - pc++; - - } else if (nextOperation == 'I') { - // if (debug) System.out.println("min d[x][y-1] "+d[x][y-1]+" - // d[x][y] "+d[x][y]+" ins "+t.charAt(y-1)+" at "+(x)); - // operations.append('I').append((char)x).append(t.charAt(y-1)); - - // if (debug)result.insert(x, t.charAt(y-1)); - // y--; - // changed =true; - // pc++; - int x = operations.charAt(pc); - pc++; - char in = operations.charAt(pc); - - if (result.length() < x) - return s; - - result.insert(x, in); - pc++; - } else if (nextOperation == 'D') { - // pc++; - int xm1 = operations.charAt(pc); - - if (result.length() <= xm1) - return s; - - result.deleteCharAt(xm1); - pc++; - // delete with - pc++; - // operations.append('D').append((char)x-1).append(s.charAt(x-1)); - // if (debug)result.deleteCharAt(x-1); - } - - } - return result.reverse().toString(); - // else return null; - } - - /** - * @param opers - * @param postion - * @return - */ - public static String get(ArrayList<String> opers, int position) { - for (String s : opers) { - int p = s.charAt(1); - if (p == position) { - return s; - } - } - return "0"; - } - - /** - * @param form - * @param string - * @param c - * @return - */ - public static String changeSimple(String form, String operation, int c) { - - if (operation.equals("0")) - return form; - - if (operation.charAt(0) == 'I') { - StringBuffer f = new StringBuffer(form); - if (f.length() <= c) { - // DB.println("fail insert "); - return form; - } - f.insert(c + 1, operation.charAt(1)); - return f.toString(); - } - if (operation.charAt(0) == 'R') { - StringBuffer f = new StringBuffer(form); - // if (f.length()<=c) f.append(' '); - if (f.length() <= c) { - // DB.println("fail replace "); - return form; - } - f.setCharAt(c, operation.charAt(2)); - return f.toString(); - } - - if (operation.charAt(0) == 'D') { - StringBuffer f = new StringBuffer(form); - f.delete(c, c + 1);// .append(' '); - return f.toString(); - } - return form; - } - - /** - * @param string - * @return - */ - public static String simple(String o) { - StringBuffer s = new StringBuffer(o); - s.delete(1, 2); - return s.toString(); - } - -} diff --git a/dependencyParser/mate-tools/src/is2/mtag/Convert.java b/dependencyParser/mate-tools/src/is2/mtag/Convert.java deleted file mode 100755 index 05b0741..0000000 --- a/dependencyParser/mate-tools/src/is2/mtag/Convert.java +++ /dev/null @@ -1,99 +0,0 @@ -/** - * - */ -package is2.mtag; - -import java.io.BufferedReader; -import java.io.BufferedWriter; -import java.io.File; -import java.io.FileInputStream; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.InputStreamReader; -import java.io.OutputStreamWriter; -import java.util.ArrayList; - -/** - * @author Dr. Bernd Bohnet, 20.01.2010 - * - * - */ -public class Convert { - - public static void main(String[] args) throws IOException { - - Options options = new Options(args); - - split(options.trainfile); - - } - - /** - * @param trainfile - * @throws IOException - */ - private static void split(String trainfile) throws IOException { - - String dir = "split"; - boolean success = (new File("split")).mkdir(); - if (success) - System.out.println("Directory: " + dir + " created"); - - ArrayList<String> corpus = new ArrayList<String>(); - - BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(trainfile), "UTF-8"), - 32768); - String l = null; - int sentences = 0; - try { - while ((l = reader.readLine()) != null) { - - corpus.add(l); - if (l.length() < 8) - sentences++; - - } - } catch (IOException e) { - e.printStackTrace(); - } - System.out.println("Corpus has " + sentences + " sentences."); - - int partSize = sentences / 20; - System.out.println("Prepare corpus for cross annotations with 20 parts with part size " + partSize - + " number of lines " + corpus.size()); - - for (int k = 0; k < 20; k++) { - BufferedWriter br = new BufferedWriter( - new OutputStreamWriter(new FileOutputStream("split/p-" + k), "UTF-8")); - BufferedWriter rest = new BufferedWriter( - new OutputStreamWriter(new FileOutputStream("split/r-" + k), "UTF-8")); - int skip = k * partSize; - - int countSentences = 0; - int countSentencesWrote = 0; - System.out.println("skip from " + skip + " to " + (skip + partSize - 1)); - for (String x : corpus) { - if (countSentences >= skip && (countSentences < (skip + partSize) || k == 19)) { - rest.write(x); - rest.newLine(); - if (x.length() < 8) - countSentencesWrote++; - } else { - br.write(x); - br.newLine(); - } - - if (x.length() < 8) - countSentences++; - } - System.out.println("wrote for this part " + countSentencesWrote); - br.flush(); - br.close(); - rest.flush(); - rest.close(); - - } - - } - -} diff --git a/dependencyParser/mate-tools/src/is2/mtag/Evaluator.java b/dependencyParser/mate-tools/src/is2/mtag/Evaluator.java deleted file mode 100755 index 16c7bba..0000000 --- a/dependencyParser/mate-tools/src/is2/mtag/Evaluator.java +++ /dev/null @@ -1,149 +0,0 @@ -package is2.mtag; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.Comparator; -import java.util.Hashtable; -import java.util.Map.Entry; - -import is2.data.SentenceData09; -import is2.io.CONLLReader09; - -public class Evaluator { - - public static void evaluate(String act_file, String pred_file, String format) throws Exception { - - CONLLReader09 goldReader = new CONLLReader09(act_file);// DependencyReader.createDependencyReader(); - // boolean labeled = goldReader.startReading(act_file); - - CONLLReader09 predictedReader = new CONLLReader09(); - predictedReader.startReading(pred_file); - - // if (labeled != predLabeled) - // System.out.println("Gold file and predicted file appear to differ on - // whether or not they are labeled. Expect problems!!!"); - - int total = 0, totalP = 0, corrT = 0; - int totalD = 0, corrD = 0, err = 0; - int numsent = 0; - SentenceData09 goldInstance = goldReader.getNext(); - SentenceData09 predInstance = predictedReader.getNext(); - - Hashtable<String, Integer> errors = new Hashtable<String, Integer>(); - Hashtable<String, StringBuffer> words = new Hashtable<String, StringBuffer>(); - - while (goldInstance != null) { - - int instanceLength = goldInstance.length(); - - if (instanceLength != predInstance.length()) - System.out.println("Lengths do not match on sentence " + numsent); - - String gold[] = goldInstance.ofeats; - String pred[] = predInstance.pfeats; - - boolean whole = true; - boolean wholeL = true; - - // NOTE: the first item is the root info added during - // nextInstance(), so we skip it. - - for (int i = 1; i < instanceLength; i++) { - if (gold[i].equals(pred[i]) || (gold[i].equals("_") && pred[i] == null)) - corrT++; - else { - // System.out.println("gold:"+goldFeats[i]+" - // pred:"+predFeats[i]+" "+goldInstance.forms[i]+" snt - // "+numsent+" i:"+i); - // for (int k = 1; k < instanceLength; k++) { - - // System.out.print(goldInstance.forms[k]+":"+goldInstance.gpos[k]); - // if (k==i) System.out.print(":"+predInstance.gpos[k]); - // System.out.print(" "); - - // } - // System.out.println(); - String key = "gold: '" + gold[i] + "' pred: '" + pred[i] + "'"; - Integer cnt = errors.get(key); - StringBuffer errWrd = words.get(key); - if (cnt == null) { - errors.put(key, 1); - words.put(key, new StringBuffer().append(goldInstance.forms[i])); - } else { - errors.put(key, cnt + 1); - errWrd.append(" " + goldInstance.forms[i]); - } - err++; - - } - String[] gf = gold[i].split("|"); - int eq = 0; - - if (pred[i] != null) { - String[] pf = pred[i].split("|"); - totalP += pf.length; - - if (pf.length > gf.length) { - } else { - } - - for (String g : gf) { - for (String p : pf) { - if (g.equals(p)) { - eq++; - break; - } - } - } - } else { - } - totalD += gf.length; - corrD += eq; - } - total += instanceLength - 1; // Subtract one to not score fake root - // token - - if (whole) { - } - if (wholeL) { - } - numsent++; - - goldInstance = goldReader.getNext(); - predInstance = predictedReader.getNext(); - } - - ArrayList<Entry<String, Integer>> opsl = new ArrayList<Entry<String, Integer>>(); - for (Entry<String, Integer> e : errors.entrySet()) { - opsl.add(e); - } - - Collections.sort(opsl, new Comparator<Entry<String, Integer>>() { - - @Override - public int compare(Entry<String, Integer> o1, Entry<String, Integer> o2) { - - return o1.getValue() == o2.getValue() ? 0 : o1.getValue() > o2.getValue() ? -1 : 1; - } - - }); - - System.out.println("10 top most errors:"); - - System.out.println("Tokens: " + total + " Correct: " + corrT + " " + (float) corrT / total + " R " - + ((float) corrD / totalD) + " tP " + totalP + " tG " + totalD + " P " + (float) corrD / totalP); - System.out.println("err: " + err + " total " + total + " corr " + corrT); - // System.out.println("Unlabeled Complete Correct: " + - // ((double)corrsent/numsent)); - - } - - public static void main(String[] args) throws Exception { - String format = "CONLL"; - if (args.length > 2) - format = args[2]; - - evaluate(args[0], args[1], format); - } - -} diff --git a/dependencyParser/mate-tools/src/is2/mtag/ExtractorM.java b/dependencyParser/mate-tools/src/is2/mtag/ExtractorM.java deleted file mode 100644 index e84f859..0000000 --- a/dependencyParser/mate-tools/src/is2/mtag/ExtractorM.java +++ /dev/null @@ -1,683 +0,0 @@ -package is2.mtag; - -import java.io.DataInputStream; -import java.io.DataOutputStream; -import java.io.IOException; -import java.util.HashMap; -import java.util.HashSet; -import java.util.Map.Entry; - -import is2.data.Cluster; -import is2.data.F2SF; -import is2.data.Instances; -import is2.data.InstancesTagger; -import is2.data.Long2Int; -import is2.data.Long2IntInterface; -import is2.data.ParametersFloat; -import is2.data.PipeGen; -import is2.data.SentenceData09; -import is2.io.CONLLReader09; -import is2.io.IOGenerals; -import is2.tools.IPipe; -import is2.util.OptionsSuper; - -final public class ExtractorM extends PipeGen implements IPipe { - - public static int _CEND; - - private static final String STWRD = "STWRD", STPOS = "STPOS", END = "END", STR = "STR"; - - public String[] types; - - Cluster cl; - - final public MFO mf = new MFO(); - public Long2IntInterface li; - - final MFO.Data4 d1 = new MFO.Data4(), d2 = new MFO.Data4(), d3 = new MFO.Data4(), dw = new MFO.Data4(); - final MFO.Data4 dwp = new MFO.Data4(), dp = new MFO.Data4(); - - private OptionsSuper options; - private int _ewrd; - static private int _strp; - - public ExtractorM(Options options, Long2Int long2Int) throws IOException { - this.options = options; - - li = long2Int; - } - - public ExtractorM(OptionsSuper options) { - this.options = options; - } - - public HashMap<Integer, Integer> form2morph = new HashMap<Integer, Integer>(); - - @Override - public Instances createInstances(String file) { - - CONLLReader09 depReader = new CONLLReader09(CONLLReader09.NO_NORMALIZE); - - depReader.startReading(file); - mf.register(POS, "<root-POS>"); - - mf.register(FFEATS, IOGenerals.NO_TYPE); - mf.register(FFEATS, ""); - - InstancesTagger is = new InstancesTagger(); - - System.out.println("Registering feature parts "); - - HashMap<String, HashSet<String>> op2form = new HashMap<String, HashSet<String>>(); - HashMap<String, Integer> freq = new HashMap<String, Integer>(); - - int ic = 0; - while (true) { - SentenceData09 instance1 = depReader.getNext(); - if (instance1 == null) - break; - ic++; - - String[] w = instance1.forms; - for (String element : w) - mf.register(WORD, element); - for (String element : w) - registerChars(CHAR, element); - - for (int i1 = 0; i1 < w.length; i1++) { - mf.register(WORD, w[i1].toLowerCase()); - Integer f = freq.get(w[i1].toLowerCase()); - - if (f == null) - freq.put(w[i1].toLowerCase(), 1); - else - freq.put(w[i1].toLowerCase(), f + 1); - - HashSet<String> forms = op2form.get(w[i1].toLowerCase()); - if (forms == null) { - forms = new HashSet<String>(); - op2form.put(w[i1].toLowerCase(), forms); - } - forms.add(instance1.ofeats[i1] == null ? "_" : instance1.ofeats[i1]); - } - for (String element : w) - registerChars(CHAR, element.toLowerCase()); - - w = instance1.plemmas; - for (String element : w) - mf.register(WORD, element); - for (String element : w) - registerChars(CHAR, element); - - w = instance1.ppos; - for (String element : w) - mf.register(POS, element); - - w = instance1.gpos; - for (String element : w) - mf.register(POS, element); - - w = instance1.ofeats; - for (String element : w) - if (element != null) - mf.register(FEAT, element); - for (String element : w) - if (element != null) - mf.register(FFEATS, element); - - // w = instance1.pfeats; - // for(int i1 = 0; i1 < w.length; i1++) if (w[i1]!=null) - // mf.register(FEAT, w[i1]); - } - - for (Entry<String, HashSet<String>> e : op2form.entrySet()) { - if (e.getValue().size() == 1 && freq.get(e.getKey()) > 10) { - // System.out.println("found map "+e.getKey()+" "+e.getValue()+" - // "+freq.get(e.getKey())); - form2morph.put(mf.getValue(PipeGen.WORD, e.getKey()), - mf.getValue(FFEATS, (String) e.getValue().toArray()[0])); - } - } - - initFeatures(); - - mf.calculateBits(); - initValues(); - - System.out.println("" + mf.toString()); - - depReader.startReading(file); - - int num1 = 0; - long start1 = System.currentTimeMillis(); - - System.out.print("Creating Features: "); - is.init(ic, mf); - int del = 0; - - while (true) { - if (num1 % 100 == 0) { - del = outValue(num1, del); - } - SentenceData09 instance1 = depReader.getNext(is); - if (instance1 == null) - break; - - if (num1 > options.count) - break; - - num1++; - } - long end1 = System.currentTimeMillis(); - System.gc(); - long mem2 = Runtime.getRuntime().totalMemory() - Runtime.getRuntime().freeMemory(); - System.out.print(" time " + (end1 - start1) + " mem " + (mem2 / 1024) + " kb"); - - types = new String[mf.getFeatureCounter().get(FFEATS)]; - - for (Entry<String, Integer> e : MFO.getFeatureSet().get(FFEATS).entrySet()) { - types[e.getValue()] = e.getKey(); - } - - if (options.clusterFile == null) - cl = new Cluster(); - else - cl = new Cluster(options.clusterFile, mf, 6); - - System.out.println("Num Features: " + types.length); - - depReader.startReading(file); - - int num11 = 0; - - while (true) { - - SentenceData09 instance = depReader.getNext(); - if (instance == null) - break; - - is.fillChars(instance, num11, _CEND); - - if (num11 > options.count) - break; - - num11++; - } - - return is;// .toNativeArray(); - - } - - private void registerChars(String type, String word) { - for (int i = 0; i < word.length(); i++) - mf.register(type, Character.toString(word.charAt(i))); - } - - @Override - public void initValues() { - s_feat = MFO.getFeatureBits(FFEATS); - s_word = MFO.getFeatureBits(WORD); - s_type = MFO.getFeatureBits(TYPE); - s_char = MFO.getFeatureBits(CHAR); - s_pos = MFO.getFeatureBits(POS); - // dl1.a[0] = s_type; dl1.a[1] = s_pos; - // for (int k = 2; k < 7; k++) dl1.a[k] = s_pos; - - d1.a0 = s_type; - d1.a1 = s_feat; - d1.a2 = s_word; - d2.a0 = s_type; - d2.a1 = s_feat; - d2.a2 = s_feat; - d2.a3 = s_feat; - d2.a4 = s_feat; - d2.a5 = s_feat; - d2.a6 = s_feat; - d3.a0 = s_type; - d3.a1 = s_feat; - d3.a2 = s_char; - d3.a3 = s_char; - d3.a4 = s_char; - d3.a5 = s_char; - d3.a6 = s_char; - d3.a7 = s_char; - dp.a0 = s_type; - dp.a1 = s_feat; - dp.a2 = s_pos; - dp.a3 = s_pos; - dp.a4 = s_feat;// dp.a5= s_char; dp.a6= s_char; dp.a7= s_char; - dw.a0 = s_type; - dw.a1 = s_feat; - dw.a2 = s_word; - dw.a3 = s_word; - dw.a4 = s_word; - dw.a5 = s_word; - dw.a6 = s_word; - dw.a7 = s_word; - dwp.a0 = s_type; - dwp.a1 = s_feat; - dwp.a2 = s_word; - dwp.a3 = s_feat; - dwp.a4 = s_word; - - } - - public static short s_feat, s_word, s_type, s_dir, s_dist, s_char, s_pos; - - /** - * Initialize the features types. - */ - @Override - public void initFeatures() { - - for (int t = 0; t < 62; t++) { - mf.register(TYPE, "F" + t); - } - - // _mid = mf.register(POS, MID); - _strp = mf.register(POS, STR); - mf.register(POS, END); - - mf.register(WORD, STR); - _ewrd = mf.register(WORD, END); - - _CEND = mf.register(CHAR, END); - - // optional features - mf.register(WORD, STWRD); - mf.register(POS, STPOS); - - } - - final public void addCF(InstancesTagger is, int ic, String fs, int i, short pfeat[], short ppos[], int[] forms, - int[] lemmas, long[] vs) { - - int c0 = is.chars[ic][i][0], c1 = is.chars[ic][i][1], c2 = is.chars[ic][i][2], c3 = is.chars[ic][i][3], - c4 = is.chars[ic][i][4], c5 = is.chars[ic][i][5]; - int e0 = is.chars[ic][i][6], e1 = is.chars[ic][i][7], e2 = is.chars[ic][i][8], e3 = is.chars[ic][i][9], - e4 = is.chars[ic][i][10]; - - int f = 1, n = 0; - short upper = 0, number = 1; - for (int k1 = 0; k1 < fs.length(); k1++) { - char c = fs.charAt(k1); - if (Character.isUpperCase(c)) { - if (k1 == 0) - upper = 1; - else { - // first char + another - if (upper == 1) - upper = 3; - // another uppercase in the word - else if (upper == 0) - upper = 2; - } - } - - if (Character.isDigit(c) && k1 == 0) - number = 2; - else if (Character.isDigit(c) && number == 1) - number = 3; - } - - int form = forms[i]; - - int len = forms.length; - long l; - d1.v0 = f++; - d1.v2 = form; - l = mf.calc3(d1); - vs[n++] = mf.calc3(d1); - - d1.v0 = f++; - d1.v2 = is.formlc[ic][i]; - vs[n++] = mf.calc3(d1); - - d3.v2 = c0; - d3.v3 = c1; - d3.v4 = c2; - d3.v5 = c3; - d3.v6 = c4; - d3.v0 = f++; - vs[n++] = mf.calc3(d3); - d3.v0 = f++; - vs[n++] = mf.calc4(d3); - d3.v0 = f++; - vs[n++] = mf.calc5(d3); - d3.v0 = f++; - vs[n++] = mf.calc6(d3); - d3.v0 = f++; - vs[n++] = mf.calc7(d3); - - if (form != -1) { - d3.v2 = c2; - d3.v3 = c3; - d3.v4 = c4; - d3.v5 = c5; - d3.v6 = cl.getLP(form); - d3.v0 = f; - vs[n++] = mf.calc6(d3); - d3.v0 = f + 1; - vs[n++] = mf.calc7(d3); - } - f += 2; - - if (form > 0) { - d3.v0 = f; - d3.v5 = cl.getLP(form); - vs[n++] = mf.calc6(d3); - d3.v0 = f + 1; - d3.v4 = cl.getLP(form); - vs[n++] = mf.calc5(d3); - d3.v0 = f + 2; - d3.v3 = cl.getLP(form); - vs[n++] = mf.calc4(d3); - } - f += 3; - - d3.v2 = e0; - d3.v3 = e1; - d3.v4 = e2; - d3.v5 = e3; - d3.v6 = e4; - d3.v0 = f++; - vs[n++] = mf.calc3(d3); - d3.v0 = f++; - vs[n++] = l = mf.calc4(d3); - vs[n++] = d3.calcs(3, upper, l); - d3.v0 = f++; - vs[n++] = l = mf.calc5(d3); - vs[n++] = d3.calcs(3, upper, l); - d3.v0 = f++; - vs[n++] = l = mf.calc6(d3); - vs[n++] = d3.calcs(3, upper, l); - d3.v0 = f++; - vs[n++] = l = mf.calc7(d3); - vs[n++] = d3.calcs(3, upper, l); - - if (form > 0) { - d3.v0 = f; - d3.v5 = cl.getLP(form); - vs[n++] = mf.calc6(d3); - d3.v0 = f + 1; - d3.v4 = cl.getLP(form); - vs[n++] = mf.calc5(d3); - d3.v0 = f + 2; - d3.v3 = cl.getLP(form); - vs[n++] = mf.calc4(d3); - } - f += 3; - - dw.v0 = f++; - dw.v2 = i + 1 < len ? forms[i + 1] : _ewrd; - dw.v3 = forms[i]; - vs[n++] = mf.calc4(dw); - - if (len > i + 1) { - - dw.v0 = f; - dw.v2 = forms[i + 1]; - vs[n++] = mf.calc3(dw); - d3.v0 = f + 1; - d3.v2 = is.chars[ic][i + 1][0]; - vs[n++] = mf.calc3(d3); - d3.v0 = f + 2; - d3.v2 = is.chars[ic][i + 1][6]; - vs[n++] = mf.calc3(d3); - - d3.v2 = e0; - d3.v3 = e1; - - d3.v0 = f + 3; - d3.v4 = is.chars[ic][i + 1][0]; - vs[n++] = mf.calc5(d3); - d3.v0 = f + 4; - d3.v4 = is.chars[ic][i + 1][6]; - vs[n++] = mf.calc5(d3); - - if (is.chars[ic][i + 1][11] > 1) { // instance.forms[i+1].length() - - d3.v0 = f + 5; - d3.v2 = is.chars[ic][i + 1][0]; - d3.v3 = is.chars[ic][i + 1][1]; - vs[n++] = mf.calc4(d3); - d3.v0 = f + 6; - d3.v2 = is.chars[ic][i + 1][6]; - d3.v3 = is.chars[ic][i + 1][7]; - vs[n++] = mf.calc4(d3); - - d3.v2 = e0; - d3.v3 = e1; - - d3.v0 = f + 7; - d3.v4 = is.chars[ic][i + 1][0]; - d3.v5 = is.chars[ic][i + 1][1]; - vs[n++] = mf.calc6(d3); - d3.v0 = f + 8; - d3.v4 = is.chars[ic][i + 1][6]; - d3.v5 = is.chars[ic][i + 1][7]; - vs[n++] = mf.calc6(d3); - - if (forms[i + 1] > 0) { - d3.v0 = f + 9; - d3.v2 = is.chars[ic][i + 1][0]; - d3.v3 = is.chars[ic][i + 1][1]; - d3.v4 = cl.getLP(forms[i + 1]); - vs[n++] = mf.calc5(d3); - d3.v0 = f + 10; - d3.v2 = is.chars[ic][i + 1][6]; - d3.v3 = is.chars[ic][i + 1][7]; - d3.v4 = cl.getLP(forms[i + 1]); - vs[n++] = mf.calc5(d3); - } - } - - if (forms[i + 1] > 0) { - dw.v0 = f + 11; - dw.v2 = cl.getLP(forms[i + 1]); - dw.v3 = forms[i]; - vs[n++] = mf.calc4(dw); - } - - if (len > i + 2) { - dw.v0 = f + 12; - dw.v2 = forms[i + 2]; - dw.v3 = forms[i + 1]; - vs[n++] = mf.calc4(dw); - vs[n++] = mf.calc3(dw); - // d2.v0=f+13; d2.v2=pfeat[i+1]; d2.v3= pfeat[i+2]; - // vs[n++]=mf.calc4(d2); - // dp.v0= f+14; dp.v2=ppos[i+1]; dp.v3=ppos[i+2]; - // vs[n++]=mf.calc4(dp); - - } - - if (len > i + 3) { - dw.v0 = f + 14; - dw.v2 = forms[i + 3]; - dw.v3 = forms[i + 2]; - vs[n++] = mf.calc4(dw); - vs[n++] = mf.calc3(dw); - - } - } - f += 16; - - // length - d2.v0 = f++; - d2.v2 = is.chars[ic][i][11]; - vs[n++] = mf.calc3(d2); - - // contains a number - d2.v0 = f++; - d2.v2 = number; - vs[n++] = mf.calc3(d2); - d1.v0 = f++; - d1.v2 = lemmas[i]; - vs[n++] = mf.calc3(d1); - - if (i != 0 && len > i + 1) { - dw.v0 = f; - dw.v2 = lemmas[i - 1]; - dw.v3 = lemmas[i + 1]; - vs[n++] = mf.calc4(dw); - d2.v0 = f + 1; - d2.v2 = pfeat[i - 1]; - d2.v3 = pfeat[i + 1]; - vs[n++] = mf.calc4(d2); - } - f += 2; - - d2.v0 = f++; - d2.v2 = i >= 1 ? pfeat[i - 1] : _strp; - vs[n++] = mf.calc3(d2); - dp.v0 = f++; - dp.v2 = ppos[i]; - vs[n++] = mf.calc3(dp); - - if (i > 0) { - dw.v0 = f++; - dw.v2 = i >= 1 ? forms[i - 1] : _strp; - vs[n++] = mf.calc3(dw); - dw.v0 = f++; - dw.v2 = i >= 1 ? lemmas[i - 1] : _strp; - vs[n++] = mf.calc3(dw); - - if (len > i + 1) { - // d2.v0=f; d2.v2= pfeat[i-1];d2.v3= pfeat[i+1]; - // vs[n++]=mf.calc4(d2); - // dp.v0= f+1; dp.v2=ppos[i-1]; dp.v3=ppos[i+1]; - // vs[n++]=mf.calc4(dp); - - } - f++; - dp.v0 = f++; - dp.v2 = ppos[i]; - dp.v3 = ppos[i - 1]; - vs[n++] = mf.calc4(dp); - - if (i > 1) { - d2.v0 = f++; - d2.v2 = i < 2 ? _strp : pfeat[i - 2]; - vs[n++] = mf.calc3(d2); - d2.v0 = f++; - d2.v2 = pfeat[i - 1]; - d2.v3 = pfeat[i - 2]; - vs[n++] = mf.calc4(d2); - - dw.v0 = f++; - dw.v2 = forms[i - 2]; - vs[n++] = mf.calc3(dw); - dwp.v0 = f++; - dwp.v2 = forms[i - 1]; - dwp.v3 = pfeat[i - 2]; - vs[n++] = mf.calc4(dwp); - dwp.v0 = f++; - dwp.v2 = forms[i - 2]; - dwp.v3 = pfeat[i - 1]; - vs[n++] = mf.calc4(dwp); - - if (i > 2) { - d2.v0 = f++; - d2.v2 = pfeat[i - 3]; - vs[n++] = mf.calc3(d2); - d2.v0 = f++; - d2.v2 = pfeat[i - 2]; - d2.v3 = pfeat[i - 3]; - vs[n++] = mf.calc4(d2); - dw.v0 = f++; - dw.v2 = forms[i - 3]; - dw.v3 = forms[i - 2]; - vs[n++] = mf.calc4(dw); - // dp.v0= f++; dp.v2=ppos[i-3]; dp.v3=ppos[i-2]; - // vs[n++]=mf.calc4(dp); - } - } - } - vs[n] = Integer.MIN_VALUE; - } - - public int fillFeatureVectorsOne(ParametersFloat params, int w1, String form, Instances is, int n, short[] features, - long[] vs) { - double best = -1; - int bestType = -1; - - F2SF f = new F2SF(params.parameters); - // is.gfeats[n] - addCF((InstancesTagger) is, n, form, w1, features, is.pposs[n], is.forms[n], is.plemmas[n], vs); - - for (int t = 0; t < types.length; t++) { - - f.clear(); - int p = t << ExtractorM.s_type; - for (long element : vs) { - if (element == Integer.MIN_VALUE) - break; - if (element >= 0) - f.add(li.l2i(element + p)); - } - if (f.score > best) { - bestType = t; - best = f.score; - } - - } - return bestType; - - } - - // static ArrayList<T> todo = new ArrayList<T>(); - static SentenceData09 instance; - - public static int _FC = 200; - - /** - * Write the lemma that are not mapped by operations - * - * @param dos - */ - public void writeMap(DataOutputStream dos) { - - try { - dos.writeInt(this.form2morph.size()); - for (Entry<Integer, Integer> e : form2morph.entrySet()) { - dos.writeInt(e.getKey()); - dos.writeInt(e.getValue()); - } - } catch (IOException e1) { - e1.printStackTrace(); - } - } - - /** - * Read the form-lemma mapping not read by operations - * - * @param dis - */ - public void readMap(DataInputStream dis) { - try { - int size = dis.readInt(); - for (int i = 0; i < size; i++) { - form2morph.put(dis.readInt(), dis.readInt()); - } - } catch (IOException e1) { - e1.printStackTrace(); - } - } - - /* - * (non-Javadoc) - * - * @see is2.tools.IPipe#write(java.io.DataOutputStream) - */ - @Override - public void write(DataOutputStream dos) { - try { - cl.write(dos); - writeMap(dos); - } catch (IOException e) { - e.printStackTrace(); - } - } - -} diff --git a/dependencyParser/mate-tools/src/is2/mtag/MFO.java b/dependencyParser/mate-tools/src/is2/mtag/MFO.java deleted file mode 100755 index e315ba4..0000000 --- a/dependencyParser/mate-tools/src/is2/mtag/MFO.java +++ /dev/null @@ -1,532 +0,0 @@ -package is2.mtag; - -import java.io.DataInputStream; -import java.io.DataOutputStream; -import java.io.IOException; -import java.util.HashMap; -import java.util.Map.Entry; - -import is2.data.IEncoderPlus; -import is2.util.DB; - -/** - * Map Features, do not map long to integer - * - * @author Bernd Bohnet, 20.09.2009 - */ - -final public class MFO implements IEncoderPlus { - - /** The features and its values */ - static private final HashMap<String, HashMap<String, Integer>> m_featureSets = new HashMap<String, HashMap<String, Integer>>(); - - /** The feature class and the number of values */ - static private final HashMap<String, Integer> m_featureCounters = new HashMap<String, Integer>(); - - /** The number of bits needed to encode a feature */ - static final HashMap<String, Integer> m_featureBits = new HashMap<String, Integer>(); - - /** Integer counter for long2int */ - // private int count=0; - - /** Stop growing */ - public boolean stop = false; - - final public static String NONE = "<None>"; - - public static class Data { - public final String[] a = new String[8]; - public final String[] v = new String[8]; - final short[] s = new short[9]; - - public void clear(int i) { - v[i] = null; - } - } - - final public static class Data4 { - public int shift; - public short a0, a1, a2, a3, a4, a5, a6, a7, a8, a9; - public int v0, v1, v2, v3, v4, v5, v6, v7, v8, v9; - - final public long calcs(int b, long v, long l) { - if (l < 0) - return l; - l |= v << shift; - shift += b; - return l; - } - - final public long calc2() { - - if (v0 < 0 || v1 < 0) - return -1; - - long l = v0; - shift = a0; - l |= (long) v1 << shift; - shift += a1; - - return l; - } - - final public long calc3() { - - if (v0 < 0 || v1 < 0 || v2 < 0) - return -1; - // if (v1<0||v2<0) return -1; - - long l = v0; - shift = a0; - l |= (long) v1 << shift; - shift += a1; - l |= (long) v2 << shift; - shift = (short) (shift + a2); - - // shift=; - return l; - } - - final public long calc4() { - if (v0 < 0 || v1 < 0 || v2 < 0 || v3 < 0) - return -1; - - long l = v0; - shift = a0; - l |= (long) v1 << shift; - shift += a1; - l |= (long) v2 << shift; - shift += a2; - l |= (long) v3 << shift; - shift = shift + a3; - - return l; - } - - final public long calc5() { - - if (v0 < 0 || v1 < 0 || v2 < 0 || v3 < 0 || v4 < 0) - return -1; - - long l = v0; - shift = a0; - l |= (long) v1 << shift; - shift += a1; - l |= (long) v2 << shift; - shift += a2; - l |= (long) v3 << shift; - shift += a3; - l |= (long) v4 << shift; - shift = shift + a4; - - return l; - } - - final public long calc6() { - - if (v0 < 0 || v1 < 0 || v2 < 0 || v3 < 0 || v4 < 0 || v5 < 0) - return -1; - - long l = v0; - shift = a0; - l |= (long) v1 << shift; - shift += a1; - l |= (long) v2 << shift; - shift += a2; - l |= (long) v3 << shift; - shift += a3; - l |= (long) v4 << shift; - shift += a4; - l |= (long) v5 << shift; - shift = shift + a5; - - return l; - } - - final public long calc7() { - - if (v0 < 0 || v1 < 0 || v2 < 0 || v3 < 0 || v4 < 0 || v5 < 0 || v6 < 0) - return -1; - - long l = v0; - shift = a0; - l |= (long) v1 << shift; - shift += a1; - l |= (long) v2 << shift; - shift += a2; - l |= (long) v3 << shift; - shift += a3; - l |= (long) v4 << shift; - shift += a4; - l |= (long) v5 << shift; - shift += a5; - l |= (long) v6 << shift; - shift = shift + a6; - - return l; - } - - final public long calc8() { - - if (v0 < 0 || v1 < 0 || v2 < 0 || v3 < 0 || v4 < 0 || v5 < 0 || v6 < 0 || v7 < 0) - return -1; - - long l = v0; - shift = a0; - l |= (long) v1 << shift; - shift += a1; - l |= (long) v2 << shift; - shift += a2; - l |= (long) v3 << shift; - shift += a3; - l |= (long) v4 << shift; - shift += a4; - l |= (long) v5 << shift; - shift += a5; - l |= (long) v6 << shift; - shift += a6; - l |= (long) v7 << shift; - shift = shift + a7; - - return l; - } - - } - - public MFO() { - } - - // public int size() {return count;} - - /** - * Register an attribute class, if it not exists and add a possible value - * - * @param type - * @param type2 - */ - @Override - final public int register(String a, String v) { - - HashMap<String, Integer> fs = getFeatureSet().get(a); - if (fs == null) { - fs = new HashMap<String, Integer>(); - getFeatureSet().put(a, fs); - fs.put(NONE, 0); - getFeatureCounter().put(a, 1); - } - Integer c = getFeatureCounter().get(a); - - Integer i = fs.get(v); - if (i == null) { - fs.put(v, c); - c++; - getFeatureCounter().put(a, c); - return c - 1; - } else - return i; - } - - /** - * Calculates the number of bits needed to encode a feature - */ - public void calculateBits() { - - for (Entry<String, Integer> e : getFeatureCounter().entrySet()) { - int bits = (int) Math.ceil((Math.log(e.getValue() + 1) / Math.log(2))); - m_featureBits.put(e.getKey(), bits); - } - - // System.out.println("total number of needed bits "+total); - } - - @Override - public String toString() { - - StringBuffer content = new StringBuffer(); - for (Entry<String, Integer> e : getFeatureCounter().entrySet()) { - content.append(e.getKey() + " " + e.getValue()); - content.append(':'); - // HashMap<String,Integer> vs = getFeatureSet().get(e.getKey()); - content.append(getFeatureBits(e.getKey())); - - /* - * if (vs.size()<120) for(Entry<String,Integer> e2 : vs.entrySet()) - * { content.append(e2.getKey()+" ("+e2.getValue()+") "); } - */ - content.append('\n'); - - } - return content.toString(); - } - - static final public long calcs(Data4 d, int b, long v, long l) { - if (l < 0) - return l; - l |= v << d.shift; - d.shift += b; - return l; - } - - static final public short getFeatureBits(String a) { - return (short) m_featureBits.get(a).intValue(); - } - - /** - * Get the integer place holder of the string value v of the type a - * - * @param t - * the type - * @param v - * the value - * @return the integer place holder of v - */ - @Override - final public int getValue(String t, String v) { - - if (m_featureSets.get(t) == null) - return -1; - Integer vi = m_featureSets.get(t).get(v); - if (vi == null) - return -1; // stop && - return vi.intValue(); - } - - /** - * Static version of getValue - * - * @see getValue - */ - static final public int getValueS(String a, String v) { - - if (m_featureSets.get(a) == null) - return -1; - Integer vi = m_featureSets.get(a).get(v); - if (vi == null) - return -1; // stop && - return vi.intValue(); - } - - public int hasValue(String a, String v) { - - Integer vi = m_featureSets.get(a).get(v); - if (vi == null) - return -1; - return vi.intValue(); - } - - final public long calc2(Data4 d) { - - if (d.v0 < 0 || d.v1 < 0) - return -1; - // if (d.v1<0||d.v2<0) return -1; - - long l = d.v0; - short shift = d.a0; - l |= (long) d.v1 << shift; - shift += d.a1; - // l |= (long)d.v2<<shift; - d.shift = shift; - - // d.shift=; - return l; - } - - final public long calc3(Data4 d) { - - if (d.v0 < 0 || d.v1 < 0 || d.v2 < 0) - return -1; - // if (d.v1<0||d.v2<0) return -1; - - long l = d.v0; - short shift = d.a0; - l |= (long) d.v1 << shift; - shift += d.a1; - l |= (long) d.v2 << shift; - d.shift = shift + d.a2; - - // d.shift=; - return l; - } - - final public long calc4(Data4 d) { - if (d.v0 < 0 || d.v1 < 0 || d.v2 < 0 || d.v3 < 0) - return -1; - - long l = d.v0; - int shift = d.a0; - l |= (long) d.v1 << shift; - shift += d.a1; - l |= (long) d.v2 << shift; - shift += d.a2; - l |= (long) d.v3 << shift; - d.shift = shift + d.a3; - - return l; - } - - final public long calc5(Data4 d) { - - if (d.v0 < 0 || d.v1 < 0 || d.v2 < 0 || d.v3 < 0 || d.v4 < 0) - return -1; - - long l = d.v0; - int shift = d.a0; - l |= (long) d.v1 << shift; - shift += d.a1; - l |= (long) d.v2 << shift; - shift += d.a2; - l |= (long) d.v3 << shift; - shift += d.a3; - l |= (long) d.v4 << shift; - d.shift = shift + d.a4; - - return l; - } - - final public long calc6(Data4 d) { - - if (d.v0 < 0 || d.v1 < 0 || d.v2 < 0 || d.v3 < 0 || d.v4 < 0 || d.v5 < 0) - return -1; - - long l = d.v0; - int shift = d.a0; - l |= (long) d.v1 << shift; - shift += d.a1; - l |= (long) d.v2 << shift; - shift += d.a2; - l |= (long) d.v3 << shift; - shift += d.a3; - l |= (long) d.v4 << shift; - shift += d.a4; - l |= (long) d.v5 << shift; - d.shift = shift + d.a5; - - return l; - } - - final public long calc7(Data4 d) { - - if (d.v0 < 0 || d.v1 < 0 || d.v2 < 0 || d.v3 < 0 || d.v4 < 0 || d.v5 < 0 || d.v6 < 0) - return -1; - - long l = d.v0; - int shift = d.a0; - l |= (long) d.v1 << shift; - shift += d.a1; - l |= (long) d.v2 << shift; - shift += d.a2; - l |= (long) d.v3 << shift; - shift += d.a3; - l |= (long) d.v4 << shift; - shift += d.a4; - l |= (long) d.v5 << shift; - shift += d.a5; - l |= (long) d.v6 << shift; - d.shift = shift + d.a6; - - return l; - } - - final public long calc8(Data4 d) { - - if (d.v0 < 0 || d.v1 < 0 || d.v2 < 0 || d.v3 < 0 || d.v4 < 0 || d.v5 < 0 || d.v6 < 0 || d.v7 < 0) - return -1; - - long l = d.v0; - int shift = d.a0; - l |= (long) d.v1 << shift; - shift += d.a1; - l |= (long) d.v2 << shift; - shift += d.a2; - l |= (long) d.v3 << shift; - shift += d.a3; - l |= (long) d.v4 << shift; - shift += d.a4; - l |= (long) d.v5 << shift; - shift += d.a5; - l |= (long) d.v6 << shift; - shift += d.a6; - l |= (long) d.v7 << shift; - d.shift = shift + d.a7; - - return l; - } - - /** - * Maps a long to a integer value. This is very useful to save memory for - * sparse data long values - * - * @param node - * @return the integer - */ - static public int misses = 0; - static public int good = 0; - - /** - * Write the data - * - * @param dos - * @throws IOException - */ - static public void writeData(DataOutputStream dos) throws IOException { - - dos.writeInt(getFeatureSet().size()); - for (Entry<String, HashMap<String, Integer>> e : getFeatureSet().entrySet()) { - dos.writeUTF(e.getKey()); - dos.writeInt(e.getValue().size()); - - for (Entry<String, Integer> e2 : e.getValue().entrySet()) { - - if (e2.getKey() == null) - DB.println("key " + e2.getKey() + " value " + e2.getValue() + " e -key " + e.getKey()); - dos.writeUTF(e2.getKey()); - dos.writeInt(e2.getValue()); - } - } - } - - public void read(DataInputStream din) throws IOException { - - int size = din.readInt(); - for (int i = 0; i < size; i++) { - String k = din.readUTF(); - int size2 = din.readInt(); - - HashMap<String, Integer> h = new HashMap<String, Integer>(); - getFeatureSet().put(k, h); - for (int j = 0; j < size2; j++) { - h.put(din.readUTF(), din.readInt()); - } - getFeatureCounter().put(k, size2); - } - - calculateBits(); - } - - /** - * Clear the data - */ - static public void clearData() { - getFeatureSet().clear(); - m_featureBits.clear(); - getFeatureSet().clear(); - } - - @Override - public HashMap<String, Integer> getFeatureCounter() { - return m_featureCounters; - } - - static public HashMap<String, HashMap<String, Integer>> getFeatureSet() { - return m_featureSets; - } - - static public String[] reverse(HashMap<String, Integer> v) { - String[] set = new String[v.size()]; - for (Entry<String, Integer> e : v.entrySet()) { - set[e.getValue()] = e.getKey(); - } - return set; - } - -} diff --git a/dependencyParser/mate-tools/src/is2/mtag/Options.java b/dependencyParser/mate-tools/src/is2/mtag/Options.java deleted file mode 100755 index 20969ff..0000000 --- a/dependencyParser/mate-tools/src/is2/mtag/Options.java +++ /dev/null @@ -1,54 +0,0 @@ -package is2.mtag; - -import is2.util.OptionsSuper; - -public final class Options extends OptionsSuper { - - public Options(String[] args) { - - for (int i = 0; i < args.length; i++) { - - if (args[i].equals("--help")) - explain(); - - if (args[i].equals("-nonormalize")) { - normalize = false; - } else if (args[i].equals("-features")) { - features = args[i + 1]; - i++; - } else if (args[i].equals("-hsize")) { - hsize = Integer.parseInt(args[i + 1]); - i++; - } else if (args[i].equals("-len")) { - maxLen = Integer.parseInt(args[i + 1]); - i++; - } else - super.addOption(args, i); - } - } - - private void explain() { - System.out.println("Usage: "); - System.out.println("java -cp anna.jar is2.mtag.Tagger [Options]"); - System.out.println(); - System.out.println("Example: "); - System.out.println( - " java -cp mate.jar is2.mtag.Tagger -model eps3.model -train corpora/conll08st/train/train.closed -test corpora/conll08st/devel/devel.closed -out b3.test -eval corpora/conll08st/devel/devel.closed -count 2000 -i 6"); - System.out.println(""); - System.out.println("Options:"); - System.out.println(""); - System.out.println(" -train <file> the corpus a model is trained on; default " + this.trainfile); - System.out.println(" -test <file> the input corpus for testing; default " + this.testfile); - System.out.println(" -out <file> the output corpus (result) of a test run; default " + this.outfile); - System.out.println(" -model <file> the parsing model for traing the model is stored in the files"); - System.out.println( - " and for parsing the model is load from this file; default " + this.modelName); - System.out.println( - " -i <number> the number of training iterations; good numbers are 10 for smaller corpora and 6 for bigger; default " - + this.numIters); - System.out.println(" -count <number> the n first sentences of the corpus are take for the training default " - + this.count); - - System.exit(0); - } -} diff --git a/dependencyParser/mate-tools/src/is2/mtag/Pipe.java b/dependencyParser/mate-tools/src/is2/mtag/Pipe.java deleted file mode 100755 index 75fb3fe..0000000 --- a/dependencyParser/mate-tools/src/is2/mtag/Pipe.java +++ /dev/null @@ -1,675 +0,0 @@ -package is2.mtag; - -import java.io.DataInputStream; -import java.io.DataOutputStream; -import java.io.IOException; -import java.util.HashMap; -import java.util.HashSet; -import java.util.Map.Entry; - -import is2.data.Cluster; -import is2.data.F2SF; -import is2.data.Instances; -import is2.data.InstancesTagger; -import is2.data.Long2Int; -import is2.data.Long2IntInterface; -import is2.data.ParametersFloat; -import is2.data.PipeGen; -import is2.data.SentenceData09; -import is2.io.CONLLReader09; -import is2.io.IOGenerals; -import is2.tools.IPipe; -import is2.util.OptionsSuper; - -final public class Pipe extends PipeGen implements IPipe { - - public static int _CEND; - - private static final String STWRD = "STWRD", STPOS = "STPOS", END = "END", STR = "STR"; - - public String[] types; - - Cluster cl; - - final public MFO mf = new MFO(); - public Long2IntInterface li; - - final MFO.Data4 d1 = new MFO.Data4(), d2 = new MFO.Data4(), d3 = new MFO.Data4(), dw = new MFO.Data4(); - final MFO.Data4 dwp = new MFO.Data4(), dp = new MFO.Data4(); - - private OptionsSuper options; - private int _ewrd; - static private int _strp; - - public Pipe(Options options, Long2Int long2Int) throws IOException { - this.options = options; - - li = long2Int; - } - - public Pipe(OptionsSuper options) { - this.options = options; - } - - public HashMap<Integer, Integer> form2morph = new HashMap<Integer, Integer>(); - - @Override - public Instances createInstances(String file) { - - CONLLReader09 depReader = new CONLLReader09(CONLLReader09.NO_NORMALIZE); - - depReader.startReading(file); - mf.register(POS, "<root-POS>"); - - mf.register(FEAT, IOGenerals.NO_TYPE); - mf.register(FEAT, ""); - - InstancesTagger is = new InstancesTagger(); - - System.out.println("Registering feature parts "); - - HashMap<String, HashSet<String>> op2form = new HashMap<String, HashSet<String>>(); - HashMap<String, Integer> freq = new HashMap<String, Integer>(); - - int ic = 0; - while (true) { - SentenceData09 instance1 = depReader.getNext(); - if (instance1 == null) - break; - ic++; - - String[] w = instance1.forms; - for (String element : w) - mf.register(WORD, element); - for (String element : w) - registerChars(CHAR, element); - for (int i1 = 0; i1 < w.length; i1++) { - mf.register(WORD, w[i1].toLowerCase()); - Integer f = freq.get(w[i1].toLowerCase()); - if (f == null) - freq.put(w[i1].toLowerCase(), 1); - else - freq.put(w[i1].toLowerCase(), f + 1); - - HashSet<String> forms = op2form.get(w[i1].toLowerCase()); - if (forms == null) { - forms = new HashSet<String>(); - op2form.put(w[i1].toLowerCase(), forms); - } - forms.add(instance1.ofeats[i1] == null ? "_" : instance1.ofeats[i1]); - } - for (String element : w) - registerChars(CHAR, element.toLowerCase()); - - w = instance1.plemmas; - for (String element : w) - mf.register(WORD, element); - for (String element : w) - registerChars(CHAR, element); - - w = instance1.ppos; - for (String element : w) - mf.register(POS, element); - - w = instance1.gpos; - for (String element : w) - mf.register(POS, element); - - w = instance1.ofeats; - for (String element : w) - if (element != null) - mf.register(FEAT, element); - - // w = instance1.pfeats; - // for(int i1 = 0; i1 < w.length; i1++) if (w[i1]!=null) - // mf.register(FEAT, w[i1]); - } - - for (Entry<String, HashSet<String>> e : op2form.entrySet()) { - if (e.getValue().size() == 1 && freq.get(e.getKey()) > 10) { - // System.out.println("found map "+e.getKey()+" "+e.getValue()+" - // "+freq.get(e.getKey())); - form2morph.put(mf.getValue(PipeGen.WORD, e.getKey()), - mf.getValue(FEAT, (String) e.getValue().toArray()[0])); - } - } - - initFeatures(); - - mf.calculateBits(); - initValues(); - - System.out.println("" + mf.toString()); - - depReader.startReading(file); - - int num1 = 0; - long start1 = System.currentTimeMillis(); - - System.out.print("Creating Features: "); - is.init(ic, mf); - int del = 0; - - while (true) { - if (num1 % 100 == 0) { - del = outValue(num1, del); - } - SentenceData09 instance1 = depReader.getNext(is); - if (instance1 == null) - break; - - if (num1 > options.count) - break; - - num1++; - } - long end1 = System.currentTimeMillis(); - System.gc(); - long mem2 = Runtime.getRuntime().totalMemory() - Runtime.getRuntime().freeMemory(); - System.out.print(" time " + (end1 - start1) + " mem " + (mem2 / 1024) + " kb"); - - types = new String[mf.getFeatureCounter().get(FEAT)]; - - for (Entry<String, Integer> e : MFO.getFeatureSet().get(FEAT).entrySet()) { - types[e.getValue()] = e.getKey(); - } - - if (options.clusterFile == null) - cl = new Cluster(); - else - cl = new Cluster(options.clusterFile, mf, 6); - - System.out.println("Num Features: " + types.length); - - depReader.startReading(file); - - int num11 = 0; - - while (true) { - - SentenceData09 instance = depReader.getNext(); - if (instance == null) - break; - - is.fillChars(instance, num11, _CEND); - - if (num11 > options.count) - break; - - num11++; - } - - return is;// .toNativeArray(); - - } - - private void registerChars(String type, String word) { - for (int i = 0; i < word.length(); i++) - mf.register(type, Character.toString(word.charAt(i))); - } - - @Override - public void initValues() { - s_feat = MFO.getFeatureBits(FEAT); - s_word = MFO.getFeatureBits(WORD); - s_type = MFO.getFeatureBits(TYPE); - s_char = MFO.getFeatureBits(CHAR); - s_pos = MFO.getFeatureBits(POS); - // dl1.a[0] = s_type; dl1.a[1] = s_pos; - // for (int k = 2; k < 7; k++) dl1.a[k] = s_pos; - - d1.a0 = s_type; - d1.a1 = s_feat; - d1.a2 = s_word; - d2.a0 = s_type; - d2.a1 = s_feat; - d2.a2 = s_feat; - d2.a3 = s_feat; - d2.a4 = s_feat; - d2.a5 = s_feat; - d2.a6 = s_feat; - d3.a0 = s_type; - d3.a1 = s_feat; - d3.a2 = s_char; - d3.a3 = s_char; - d3.a4 = s_char; - d3.a5 = s_char; - d3.a6 = s_char; - d3.a7 = s_char; - dp.a0 = s_type; - dp.a1 = s_feat; - dp.a2 = s_pos; - dp.a3 = s_pos; - dp.a4 = s_feat;// dp.a5= s_char; dp.a6= s_char; dp.a7= s_char; - dw.a0 = s_type; - dw.a1 = s_feat; - dw.a2 = s_word; - dw.a3 = s_word; - dw.a4 = s_word; - dw.a5 = s_word; - dw.a6 = s_word; - dw.a7 = s_word; - dwp.a0 = s_type; - dwp.a1 = s_feat; - dwp.a2 = s_word; - dwp.a3 = s_feat; - dwp.a4 = s_word; - - } - - public static short s_feat, s_word, s_type, s_dir, s_dist, s_char, s_pos; - - /** - * Initialize the features types. - */ - @Override - public void initFeatures() { - - for (int t = 0; t < 62; t++) { - mf.register(TYPE, "F" + t); - } - - // _mid = mf.register(POS, MID); - _strp = mf.register(POS, STR); - mf.register(POS, END); - - mf.register(WORD, STR); - _ewrd = mf.register(WORD, END); - - _CEND = mf.register(CHAR, END); - - // optional features - mf.register(WORD, STWRD); - mf.register(POS, STPOS); - - } - - final public void addCF(InstancesTagger is, int ic, String fs, int i, int pfeat[], short ppos[], int[] forms, - int[] lemmas, long[] vs) { - - int c0 = is.chars[ic][i][0], c1 = is.chars[ic][i][1], c2 = is.chars[ic][i][2], c3 = is.chars[ic][i][3], - c4 = is.chars[ic][i][4], c5 = is.chars[ic][i][5]; - int e0 = is.chars[ic][i][6], e1 = is.chars[ic][i][7], e2 = is.chars[ic][i][8], e3 = is.chars[ic][i][9], - e4 = is.chars[ic][i][10]; - - int f = 1, n = 0; - short upper = 0, number = 1; - for (int k1 = 0; k1 < fs.length(); k1++) { - char c = fs.charAt(k1); - if (Character.isUpperCase(c)) { - if (k1 == 0) - upper = 1; - else { - // first char + another - if (upper == 1) - upper = 3; - // another uppercase in the word - else if (upper == 0) - upper = 2; - } - } - - if (Character.isDigit(c) && k1 == 0) - number = 2; - else if (Character.isDigit(c) && number == 1) - number = 3; - } - - int form = forms[i]; - - int len = forms.length; - long l; - d1.v0 = f++; - d1.v2 = form; - l = mf.calc3(d1); - vs[n++] = mf.calc3(d1); - - d1.v0 = f++; - d1.v2 = is.formlc[ic][i]; - vs[n++] = mf.calc3(d1); - - d3.v2 = c0; - d3.v3 = c1; - d3.v4 = c2; - d3.v5 = c3; - d3.v6 = c4; - d3.v0 = f++; - vs[n++] = mf.calc3(d3); - d3.v0 = f++; - vs[n++] = mf.calc4(d3); - d3.v0 = f++; - vs[n++] = mf.calc5(d3); - d3.v0 = f++; - vs[n++] = mf.calc6(d3); - d3.v0 = f++; - vs[n++] = mf.calc7(d3); - - if (form != -1) { - d3.v2 = c2; - d3.v3 = c3; - d3.v4 = c4; - d3.v5 = c5; - d3.v6 = cl.getLP(form); - d3.v0 = f; - vs[n++] = mf.calc6(d3); - d3.v0 = f + 1; - vs[n++] = mf.calc7(d3); - } - f += 2; - - if (form > 0) { - d3.v0 = f; - d3.v5 = cl.getLP(form); - vs[n++] = mf.calc6(d3); - d3.v0 = f + 1; - d3.v4 = cl.getLP(form); - vs[n++] = mf.calc5(d3); - d3.v0 = f + 2; - d3.v3 = cl.getLP(form); - vs[n++] = mf.calc4(d3); - } - f += 3; - - d3.v2 = e0; - d3.v3 = e1; - d3.v4 = e2; - d3.v5 = e3; - d3.v6 = e4; - d3.v0 = f++; - vs[n++] = mf.calc3(d3); - d3.v0 = f++; - vs[n++] = l = mf.calc4(d3); - vs[n++] = d3.calcs(3, upper, l); - d3.v0 = f++; - vs[n++] = l = mf.calc5(d3); - vs[n++] = d3.calcs(3, upper, l); - d3.v0 = f++; - vs[n++] = l = mf.calc6(d3); - vs[n++] = d3.calcs(3, upper, l); - d3.v0 = f++; - vs[n++] = l = mf.calc7(d3); - vs[n++] = d3.calcs(3, upper, l); - - if (form > 0) { - d3.v0 = f; - d3.v5 = cl.getLP(form); - vs[n++] = mf.calc6(d3); - d3.v0 = f + 1; - d3.v4 = cl.getLP(form); - vs[n++] = mf.calc5(d3); - d3.v0 = f + 2; - d3.v3 = cl.getLP(form); - vs[n++] = mf.calc4(d3); - } - f += 3; - - dw.v0 = f++; - dw.v2 = i + 1 < len ? forms[i + 1] : _ewrd; - dw.v3 = forms[i]; - vs[n++] = mf.calc4(dw); - - if (len > i + 1) { - - dw.v0 = f; - dw.v2 = forms[i + 1]; - vs[n++] = mf.calc3(dw); - d3.v0 = f + 1; - d3.v2 = is.chars[ic][i + 1][0]; - vs[n++] = mf.calc3(d3); - d3.v0 = f + 2; - d3.v2 = is.chars[ic][i + 1][6]; - vs[n++] = mf.calc3(d3); - - d3.v2 = e0; - d3.v3 = e1; - - d3.v0 = f + 3; - d3.v4 = is.chars[ic][i + 1][0]; - vs[n++] = mf.calc5(d3); - d3.v0 = f + 4; - d3.v4 = is.chars[ic][i + 1][6]; - vs[n++] = mf.calc5(d3); - - if (is.chars[ic][i + 1][11] > 1) { // instance.forms[i+1].length() - - d3.v0 = f + 5; - d3.v2 = is.chars[ic][i + 1][0]; - d3.v3 = is.chars[ic][i + 1][1]; - vs[n++] = mf.calc4(d3); - d3.v0 = f + 6; - d3.v2 = is.chars[ic][i + 1][6]; - d3.v3 = is.chars[ic][i + 1][7]; - vs[n++] = mf.calc4(d3); - - d3.v2 = e0; - d3.v3 = e1; - - d3.v0 = f + 7; - d3.v4 = is.chars[ic][i + 1][0]; - d3.v5 = is.chars[ic][i + 1][1]; - vs[n++] = mf.calc6(d3); - d3.v0 = f + 8; - d3.v4 = is.chars[ic][i + 1][6]; - d3.v5 = is.chars[ic][i + 1][7]; - vs[n++] = mf.calc6(d3); - - if (forms[i + 1] > 0) { - d3.v0 = f + 9; - d3.v2 = is.chars[ic][i + 1][0]; - d3.v3 = is.chars[ic][i + 1][1]; - d3.v4 = cl.getLP(forms[i + 1]); - vs[n++] = mf.calc5(d3); - d3.v0 = f + 10; - d3.v2 = is.chars[ic][i + 1][6]; - d3.v3 = is.chars[ic][i + 1][7]; - d3.v4 = cl.getLP(forms[i + 1]); - vs[n++] = mf.calc5(d3); - } - } - - if (forms[i + 1] > 0) { - dw.v0 = f + 11; - dw.v2 = cl.getLP(forms[i + 1]); - dw.v3 = forms[i]; - vs[n++] = mf.calc4(dw); - } - - if (len > i + 2) { - dw.v0 = f + 12; - dw.v2 = forms[i + 2]; - dw.v3 = forms[i + 1]; - vs[n++] = mf.calc4(dw); - vs[n++] = mf.calc3(dw); - // d2.v0=f+13; d2.v2=pfeat[i+1]; d2.v3= pfeat[i+2]; - // vs[n++]=mf.calc4(d2); - // dp.v0= f+14; dp.v2=ppos[i+1]; dp.v3=ppos[i+2]; - // vs[n++]=mf.calc4(dp); - - } - - if (len > i + 3) { - dw.v0 = f + 14; - dw.v2 = forms[i + 3]; - dw.v3 = forms[i + 2]; - vs[n++] = mf.calc4(dw); - vs[n++] = mf.calc3(dw); - - } - } - f += 16; - - // length - d2.v0 = f++; - d2.v2 = is.chars[ic][i][11]; - vs[n++] = mf.calc3(d2); - - // contains a number - d2.v0 = f++; - d2.v2 = number; - vs[n++] = mf.calc3(d2); - d1.v0 = f++; - d1.v2 = lemmas[i]; - vs[n++] = mf.calc3(d1); - - if (i != 0 && len > i + 1) { - dw.v0 = f; - dw.v2 = lemmas[i - 1]; - dw.v3 = lemmas[i + 1]; - vs[n++] = mf.calc4(dw); - d2.v0 = f + 1; - d2.v2 = pfeat[i - 1]; - d2.v3 = pfeat[i + 1]; - vs[n++] = mf.calc4(d2); - } - f += 2; - - d2.v0 = f++; - d2.v2 = i >= 1 ? pfeat[i - 1] : _strp; - vs[n++] = mf.calc3(d2); - dp.v0 = f++; - dp.v2 = ppos[i]; - vs[n++] = mf.calc3(dp); - - if (i > 0) { - dw.v0 = f++; - dw.v2 = i >= 1 ? forms[i - 1] : _strp; - vs[n++] = mf.calc3(dw); - dw.v0 = f++; - dw.v2 = i >= 1 ? lemmas[i - 1] : _strp; - vs[n++] = mf.calc3(dw); - - if (len > i + 1) { - // d2.v0=f; d2.v2= pfeat[i-1];d2.v3= pfeat[i+1]; - // vs[n++]=mf.calc4(d2); - // dp.v0= f+1; dp.v2=ppos[i-1]; dp.v3=ppos[i+1]; - // vs[n++]=mf.calc4(dp); - - } - f++; - dp.v0 = f++; - dp.v2 = ppos[i]; - dp.v3 = ppos[i - 1]; - vs[n++] = mf.calc4(dp); - - if (i > 1) { - d2.v0 = f++; - d2.v2 = i < 2 ? _strp : pfeat[i - 2]; - vs[n++] = mf.calc3(d2); - d2.v0 = f++; - d2.v2 = pfeat[i - 1]; - d2.v3 = pfeat[i - 2]; - vs[n++] = mf.calc4(d2); - - dw.v0 = f++; - dw.v2 = forms[i - 2]; - vs[n++] = mf.calc3(dw); - dwp.v0 = f++; - dwp.v2 = forms[i - 1]; - dwp.v3 = pfeat[i - 2]; - vs[n++] = mf.calc4(dwp); - dwp.v0 = f++; - dwp.v2 = forms[i - 2]; - dwp.v3 = pfeat[i - 1]; - vs[n++] = mf.calc4(dwp); - - if (i > 2) { - d2.v0 = f++; - d2.v2 = pfeat[i - 3]; - vs[n++] = mf.calc3(d2); - d2.v0 = f++; - d2.v2 = pfeat[i - 2]; - d2.v3 = pfeat[i - 3]; - vs[n++] = mf.calc4(d2); - dw.v0 = f++; - dw.v2 = forms[i - 3]; - dw.v3 = forms[i - 2]; - vs[n++] = mf.calc4(dw); - // dp.v0= f++; dp.v2=ppos[i-3]; dp.v3=ppos[i-2]; - // vs[n++]=mf.calc4(dp); - } - } - } - vs[n] = Integer.MIN_VALUE; - } - - public int fillFeatureVectorsOne(ParametersFloat params, int w1, String form, Instances is, int n, int[] features, - long[] vs) { - double best = -1; - int bestType = -1; - - F2SF f = new F2SF(params.parameters); - // is.gfeats[n] - addCF((InstancesTagger) is, n, form, w1, features, is.pposs[n], is.forms[n], is.plemmas[n], vs); - - for (int t = 0; t < types.length; t++) { - - f.clear(); - int p = t << Pipe.s_type; - for (int k = vs.length - 1; k >= 0; k--) - if (vs[k] >= 0) - f.add(li.l2i(vs[k] + p)); - if (f.score > best) { - bestType = t; - best = f.score; - } - - } - return bestType; - - } - - // static ArrayList<T> todo = new ArrayList<T>(); - static SentenceData09 instance; - - public static int _FC = 200; - - /** - * Write the lemma that are not mapped by operations - * - * @param dos - */ - public void writeMap(DataOutputStream dos) { - - try { - dos.writeInt(this.form2morph.size()); - for (Entry<Integer, Integer> e : form2morph.entrySet()) { - dos.writeInt(e.getKey()); - dos.writeInt(e.getValue()); - } - } catch (IOException e1) { - e1.printStackTrace(); - } - } - - /** - * Read the form-lemma mapping not read by operations - * - * @param dis - */ - public void readMap(DataInputStream dis) { - try { - int size = dis.readInt(); - for (int i = 0; i < size; i++) { - form2morph.put(dis.readInt(), dis.readInt()); - } - } catch (IOException e1) { - e1.printStackTrace(); - } - } - - /* - * (non-Javadoc) - * - * @see is2.tools.IPipe#write(java.io.DataOutputStream) - */ - @Override - public void write(DataOutputStream dos) { - try { - cl.write(dos); - writeMap(dos); - } catch (IOException e) { - e.printStackTrace(); - } - } - -} diff --git a/dependencyParser/mate-tools/src/is2/mtag/Tagger.java b/dependencyParser/mate-tools/src/is2/mtag/Tagger.java deleted file mode 100644 index 05aa8d7..0000000 --- a/dependencyParser/mate-tools/src/is2/mtag/Tagger.java +++ /dev/null @@ -1,386 +0,0 @@ -package is2.mtag; - -import java.io.BufferedInputStream; -import java.io.BufferedOutputStream; -import java.io.DataInputStream; -import java.io.DataOutputStream; -import java.io.FileInputStream; -import java.io.FileNotFoundException; -import java.io.FileOutputStream; -import java.io.IOException; -import java.util.Map.Entry; -import java.util.zip.ZipEntry; -import java.util.zip.ZipInputStream; -import java.util.zip.ZipOutputStream; - -import is2.data.Cluster; -import is2.data.FV; -import is2.data.Instances; -import is2.data.InstancesTagger; -import is2.data.Long2Int; -import is2.data.ParametersFloat; -import is2.data.PipeGen; -import is2.data.SentenceData09; -import is2.io.CONLLReader09; -import is2.io.CONLLWriter09; -import is2.tools.IPipe; -import is2.tools.Tool; -import is2.tools.Train; -import is2.util.DB; -import is2.util.OptionsSuper; - -public class Tagger implements Tool, Train { - - ExtractorM pipe; - ParametersFloat params; - - /** - * Initialize - * - * @param options - */ - public Tagger(Options options) { - - // load the model - try { - readModel(options); - } catch (Exception e) { - e.printStackTrace(); - } - - } - - /** - * @param string - * @throws IOException - */ - public Tagger(String modelFileName) { - this(new Options(new String[] { "-model", modelFileName })); - } - - public Tagger() { - } - - public static void main(String[] args) throws FileNotFoundException, Exception { - - Options options = new Options(args); - - Tagger tagger = new Tagger(); - - if (options.train) { - - Long2Int li = new Long2Int(options.hsize); - tagger.pipe = new ExtractorM(options, li); - InstancesTagger is = (InstancesTagger) tagger.pipe.createInstances(options.trainfile); - ParametersFloat params = new ParametersFloat(li.size()); - - tagger.train(options, tagger.pipe, params, is); - tagger.writeModel(options, tagger.pipe, params); - } - - if (options.test) { - - tagger.readModel(options); - tagger.out(options, tagger.pipe, tagger.params); - } - - if (options.eval) { - - System.out.println("\nEvaluate:"); - Evaluator.evaluate(options.goldfile, options.outfile, options.format); - } - } - - /* - * (non-Javadoc) - * - * @see is2.mtag2.Learn#writeModel(is2.mtag2.Options, is2.mtag2.Pipe, - * is2.data.ParametersFloat) - */ - @Override - public void writeModel(OptionsSuper options, IPipe pipe, ParametersFloat params) { - - try { - ZipOutputStream zos = new ZipOutputStream( - new BufferedOutputStream(new FileOutputStream(options.modelName))); - zos.putNextEntry(new ZipEntry("data")); - DataOutputStream dos = new DataOutputStream(new BufferedOutputStream(zos)); - - MFO.writeData(dos); - - MFO.clearData(); - - DB.println("number of parameters " + params.parameters.length); - dos.flush(); - params.write(dos); - pipe.write(dos); - dos.flush(); - dos.close(); - } catch (Exception e) { - e.printStackTrace(); - } - } - - /* - * (non-Javadoc) - * - * @see is2.mtag2.Learn#readModel(is2.mtag2.Options) - */ - @Override - public void readModel(OptionsSuper options) { - - try { - pipe = new ExtractorM(options); - params = new ParametersFloat(0); - - // load the model - ZipInputStream zis = new ZipInputStream(new BufferedInputStream(new FileInputStream(options.modelName))); - zis.getNextEntry(); - DataInputStream dis = new DataInputStream(new BufferedInputStream(zis)); - pipe.mf.read(dis); - pipe.initValues(); - pipe.initFeatures(); - - params.read(dis); - pipe.li = new Long2Int(params.parameters.length); - pipe.cl = new Cluster(dis); - pipe.readMap(dis); - dis.close(); - - this.pipe.types = new String[pipe.mf.getFeatureCounter().get(PipeGen.FFEATS)]; - for (Entry<String, Integer> e : MFO.getFeatureSet().get(PipeGen.FFEATS).entrySet()) - this.pipe.types[e.getValue()] = e.getKey(); - - DB.println("Loading data finished. "); - - DB.println("number of parameter " + params.parameters.length); - DB.println("number of classes " + this.pipe.types.length); - } catch (Exception e) { - e.printStackTrace(); - } - } - - /* - * (non-Javadoc) - * - * @see is2.mtag2.Learn#train(is2.mtag2.Options, is2.mtag2.Pipe, - * is2.data.ParametersFloat, is2.data.InstancesTagger) - */ - @Override - public void train(OptionsSuper options, IPipe pipe, ParametersFloat params, Instances is) { - - int i = 0; - int del = 0; - - String[] wds = MFO.reverse(MFO.getFeatureSet().get(PipeGen.WORD)); - int numInstances = is.size(); - - float upd = (options.numIters * numInstances + 1); - - for (i = 0; i < options.numIters; i++) { - - long start = System.currentTimeMillis(); - - long last = System.currentTimeMillis(); - - FV pred = new FV(), gold = new FV(); - int correct = 0, count = 0; - - for (int n = 0; n < numInstances; n++) { - - upd--; - - if ((n + 1) % 500 == 0) - del = PipeGen.outValueErr(n + 1, (count - correct), (float) correct / (float) count, del, last, - upd); - - int length = is.length(n); - - int feats[] = new int[length]; - long[] vs = new long[ExtractorM._FC]; - - for (int w1 = 0; w1 < length; w1++) { - - count++; - - if (this.pipe.form2morph.get(is.forms[n][w1]) != null) { - correct++; - continue; - } - - int bestType = this.pipe.fillFeatureVectorsOne(params, w1, wds[is.forms[n][w1]], is, n, - is.gfeats[n], vs); - feats[w1] = bestType; - - if (bestType == is.gfeats[n][w1]) { - correct++; - continue; - } - - pred.clear(); - int p = bestType << ExtractorM.s_type; - // System.out.println("test type "+bestType+" ex type - // "+ExtractorM.s_type); - for (long element : vs) { - if (element == Integer.MIN_VALUE) - break; - if (element >= 0) - pred.add(this.pipe.li.l2i(element + p)); - } - - gold.clear(); - p = is.gfeats[n][w1] << ExtractorM.s_type; - for (long element : vs) { - if (element == Integer.MIN_VALUE) - break; - if (element >= 0) - gold.add(this.pipe.li.l2i(element + p)); - } - params.update(pred, gold, upd, 1.0f); - } - - } - - long end = System.currentTimeMillis(); - String info = "time " + (end - start); - del = PipeGen.outValueErr(numInstances, (count - correct), (float) correct / (float) count, del, last, 0, - info); - - System.out.println(); - } - - params.average(i * is.size()); - - } - - @Override - public void out(OptionsSuper options, IPipe pipe, ParametersFloat params) { - - try { - long start = System.currentTimeMillis(); - - CONLLReader09 depReader = new CONLLReader09(options.testfile, options.formatTask); - CONLLWriter09 depWriter = new CONLLWriter09(options.outfile, options.formatTask); - - depReader.normalizeOn = false; - - System.out.print("Processing Sentence: "); - pipe.initValues(); - - int cnt = 0; - int del = 0; - while (true) { - - InstancesTagger is = new InstancesTagger(); - is.init(1, this.pipe.mf); - cnt++; - - SentenceData09 instance = depReader.getNext(is); - if (instance == null || instance.forms == null) - break; - is.fillChars(instance, 0, ExtractorM._CEND); - - instance = exec(instance, this.pipe, params, is); - - SentenceData09 i09 = new SentenceData09(instance); - i09.createSemantic(instance); - - if (options.overwritegold) - i09.ofeats = i09.pfeats; - - depWriter.write(i09); - - if (cnt % 100 == 0) - del = PipeGen.outValue(cnt, del); - - } - depWriter.finishWriting(); - - del = PipeGen.outValue(cnt, del); - - long end = System.currentTimeMillis(); - System.out.println(PipeGen.getSecondsPerInstnace(cnt, (end - start))); - System.out.println(PipeGen.getUsedTime((end - start))); - } catch (Exception e) { - e.printStackTrace(); - } - } - - private SentenceData09 exec(SentenceData09 instance, ExtractorM pipe, ParametersFloat params, InstancesTagger is) { - - int length = instance.ppos.length; - - short[] feats = new short[instance.gpos.length]; - - long vs[] = new long[ExtractorM._FC]; - - String[] forms = instance.forms; - - instance.pfeats = new String[instance.gpos.length]; - - for (int j = 0; j < length; j++) { - if (pipe.form2morph.get(is.forms[0][j]) != null) { - feats[j] = (short) pipe.form2morph.get(is.forms[0][j]).intValue(); - instance.pfeats[j] = this.pipe.types[feats[j]]; - } else { - - int bestType = pipe.fillFeatureVectorsOne(params, j, forms[j], is, 0, feats, vs); - feats[j] = (short) bestType; - instance.pfeats[j] = this.pipe.types[bestType]; - } - } - for (int j = 0; j < length; j++) { - if (pipe.form2morph.get(is.forms[0][j]) != null) { - feats[j] = (short) pipe.form2morph.get(is.forms[0][j]).intValue(); - instance.pfeats[j] = this.pipe.types[feats[j]]; - } else { - - int bestType = pipe.fillFeatureVectorsOne(params, j, forms[j], is, 0, feats, vs); - feats[j] = (short) bestType; - instance.pfeats[j] = this.pipe.types[bestType]; - } - } - return instance; - } - - /* - * (non-Javadoc) - * - * @see is2.tools.Tool#apply(is2.data.SentenceData09) - */ - @Override - public SentenceData09 apply(SentenceData09 snt) { - - try { - SentenceData09 it = new SentenceData09(); - it.createWithRoot(snt); - - InstancesTagger is = new InstancesTagger(); - is.init(1, pipe.mf); - is.createInstance09(it.forms.length); - - String[] forms = it.forms; - - int length = forms.length; - - // is.setForm(0, 0, CONLLReader09.ROOT); - for (int i = 0; i < length; i++) - is.setForm(0, i, forms[i]); - for (int i = 0; i < length; i++) - is.setLemma(0, i, it.plemmas[i]); - for (int i = 0; i < length; i++) - is.setPPoss(0, i, it.ppos[i]); - - is.fillChars(it, 0, ExtractorM._CEND); - - exec(it, pipe, params, is); - SentenceData09 i09 = new SentenceData09(it); - i09.createSemantic(it); - return i09; - } catch (Exception e) { - e.printStackTrace(); - } - - return null; - } -} diff --git a/dependencyParser/mate-tools/src/is2/parser/Closed.java b/dependencyParser/mate-tools/src/is2/parser/Closed.java deleted file mode 100755 index af491aa..0000000 --- a/dependencyParser/mate-tools/src/is2/parser/Closed.java +++ /dev/null @@ -1,30 +0,0 @@ -package is2.parser; - -import is2.data.Parse; - -final public class Closed { - - public float p; - // short b,e,m; - byte dir; - - Closed d; - Open u; - - public Closed(short s, short t, int m, int dir, Open u, Closed d, float score) { - // this.b = s; - // this.e = t; - // this.m = (short)m; - this.dir = (byte) dir; - this.u = u; - this.d = d; - p = score; - } - - public void create(Parse parse) { - if (u != null) - u.create(parse); - if (d != null) - d.create(parse); - } -} diff --git a/dependencyParser/mate-tools/src/is2/parser/D5.java b/dependencyParser/mate-tools/src/is2/parser/D5.java deleted file mode 100644 index 407b4e1..0000000 --- a/dependencyParser/mate-tools/src/is2/parser/D5.java +++ /dev/null @@ -1,293 +0,0 @@ -/** - * - */ -package is2.parser; - -import is2.data.DX; -import is2.data.IFV; -import is2.data.Long2IntInterface; - -/** - * @author Dr. Bernd Bohnet, 30.10.2010 - * - * - */ -final public class D5 extends DX { - - public long shift; - private long h; - - /* - * (non-Javadoc) - * - * @see is2.parser52L.DX#cz2() - */ - final public void cz2() { - - if (v0 < 0 || v1 < 0) { - shift = 0; - h = -1; - return; - } - - h = v0 | v1 << (shift = a0); - shift += a1; - - } - - /* - * (non-Javadoc) - * - * @see is2.parser52L.DX#cz3() - */ - @Override - final public void cz3() { - - if (v0 < 0 || v1 < 0 || v2 < 0) { - shift = 0; - h = -1; - return; - - } - - h = v0 | v1 << (shift = a0) | v2 << (shift += a1); - shift = shift + a2; - - } - - /* - * (non-Javadoc) - * - * @see is2.parser52L.DX#cz4() - */ - @Override - final public void cz4() { - if (v0 < 0 || v1 < 0 || v2 < 0 || v3 < 0) { - shift = 0; - h = -1; - return; - } - - h = v0 | v1 << (shift = a0) | v2 << (shift += a1) | v3 << (shift += a2); - shift = shift + a3; - - } - - /* - * (non-Javadoc) - * - * @see is2.parser52L.DX#cz5() - */ - @Override - final public void cz5() { - - if (v0 < 0 || v1 < 0 || v2 < 0 || v3 < 0 || v4 < 0) { - shift = 0; - h = -1; - return; - } - - h = v0 | v1 << (shift = a0) | v2 << (shift += a1) | v3 << (shift += a2) | v4 << (shift += a3); - shift = shift + a4; - - } - - /* - * (non-Javadoc) - * - * @see is2.parser52L.DX#cz6() - */ - @Override - final public void cz6() { - - if (v0 < 0 || v1 < 0 || v2 < 0 || v3 < 0 || v4 < 0 || v5 < 0) { - shift = 0; - h = -1; - return; - } - - h = v0 | v1 << (shift = a0) | v2 << (shift += a1) | v3 << (shift += a2) | v4 << (shift += a3) - | v5 << (shift += a4); - shift = shift + a5; - - } - - /* - * (non-Javadoc) - * - * @see is2.parser52L.DX#cz7() - */ - @Override - final public void cz7() { - - if (v0 < 0 || v1 < 0 || v2 < 0 || v3 < 0 || v4 < 0 || v5 < 0 || v6 < 0) { - shift = 0; - h = -1; - return; - } - - h = v0 | v1 << (shift = a0) | v2 << (shift += a1) | v3 << (shift += a2) | v4 << (shift += a3) - | v5 << (shift += a4) | v6 << (shift += a5); - shift = shift + a6; - - } - - /* - * (non-Javadoc) - * - * @see is2.parser52L.DX#cz8() - */ - @Override - final public void cz8() { - - if (v0 < 0 || v1 < 0 || v2 < 0 || v3 < 0 || v4 < 0 || v5 < 0 || v6 < 0 || v7 < 0) { - h = -1; - shift = 0; - return; - } - - h = v0 | v1 << (shift = a0) | v2 << (shift += a1) | v3 << (shift += a2) | v4 << (shift += a3) - | v5 << (shift += a4) | v6 << (shift += a5) | v7 << (shift += a6); - shift = shift + a7; - - } - - /* - * (non-Javadoc) - * - * @see is2.parser52L.DX#clean() - */ - @Override - final public void clean() { - v0 = 0; - v1 = 0; - v2 = 0; - v3 = 0; - v4 = 0; - v5 = 0; - v6 = 0; - v7 = 0; - v8 = 0; - shift = 0; - h = 0; - } - - public final Long2IntInterface _li; - - public D5(Long2IntInterface li) { - _li = li; - } - - /* - * (non-Javadoc) - * - * @see is2.parser52L.DX#cs(int, int) - */ - @Override - final public long cs(int b, int v) { - if (h < 0) { - h = -1; - shift = 0; - return -1; - } - - h |= (long) v << shift; - shift += b; - if (shift > 64) { - System.out.println("shift too large " + shift); - new Exception().printStackTrace(); - } - - return h; - - } - - /* - * (non-Javadoc) - * - * @see is2.parser52L.DX#csa(int, int) - */ - @Override - final public long csa(int b, int v) { - if (h < 0) { - h = -1; - shift = 0; - return -1; - } - - h |= (long) v << shift; - shift += b; - if (shift > 64) { - System.out.println("shift too large " + shift); - new Exception().printStackTrace(); - } - - return h; - - } - - /* - * (non-Javadoc) - * - * @see is2.parser52L.DX#csa(int, int, is2.data.IFV) - */ - @Override - final public void csa(int b, int v, IFV f) { - if (h < 0) { - h = -1; - shift = 0; - return; - } - - h |= (long) v << shift; - shift += b; - if (shift > 64) { - System.out.println("shift too large " + shift); - new Exception().printStackTrace(); - } - - f.add(_li.l2i(h)); - } - - /* - * (non-Javadoc) - * - * @see is2.parser52L.DX#getVal() - */ - @Override - public long getVal() { - if (h < 0) { - h = -1; - shift = 0; - return h; - } - return h; - } - - /* - * (non-Javadoc) - * - * @see is2.parser52L.DX#map(is2.data.IFV, long) - */ - @Override - public void map(IFV f, long l) { - if (l > 0) - f.add(_li.l2i(l)); - } - - /* - * (non-Javadoc) - * - * @see is2.data.DX#computeLabeValue(short, short) - */ - @Override - public int computeLabeValue(int label, int shift) { - return label << shift; - } - - @Override - public void fix() { - - } - -} \ No newline at end of file diff --git a/dependencyParser/mate-tools/src/is2/parser/Decoder.java b/dependencyParser/mate-tools/src/is2/parser/Decoder.java deleted file mode 100755 index 1fe2340..0000000 --- a/dependencyParser/mate-tools/src/is2/parser/Decoder.java +++ /dev/null @@ -1,243 +0,0 @@ -package is2.parser; - -import java.util.ArrayList; -import java.util.concurrent.ExecutorService; - -import is2.data.DataFES; -import is2.data.Parse; - -/** - * @author Bernd Bohnet, 01.09.2009 - * - * This methods do the actual work and they build the dependency trees. - */ -final public class Decoder { - - public static final boolean TRAINING = true; - public static long timeDecotder; - public static long timeRearrange; - - /** - * Threshold for rearrange edges non-projective - */ - public static float NON_PROJECTIVITY_THRESHOLD = 0.3F; - - static ExecutorService executerService = java.util.concurrent.Executors.newFixedThreadPool(Parser.THREADS); - - // do not initialize - private Decoder() { - }; - - /** - * Build a dependency tree based on the data - * - * @param pos - * part-of-speech tags - * @param x - * the data - * @param projective - * projective or non-projective - * @param edges - * the edges - * @return a parse tree - * @throws InterruptedException - */ - public static Parse decode(short[] pos, DataFES x, boolean projective, boolean training) - throws InterruptedException { - - long ts = System.nanoTime(); - - if (executerService.isShutdown()) - executerService = java.util.concurrent.Executors.newCachedThreadPool(); - final int n = pos.length; - - final Open O[][][][] = new Open[n][n][2][]; - final Closed C[][][][] = new Closed[n][n][2][]; - - ArrayList<ParallelDecoder> pe = new ArrayList<ParallelDecoder>(); - - for (int i = 0; i < Parser.THREADS; i++) - pe.add(new ParallelDecoder(pos, x, O, C, n)); - - for (short k = 1; k < n; k++) { - - // provide the threads the data - for (short s = 0; s < n; s++) { - short t = (short) (s + k); - if (t >= n) - break; - - ParallelDecoder.add(s, t); - } - - executerService.invokeAll(pe); - } - - float bestSpanScore = (-1.0F / 0.0F); - Closed bestSpan = null; - for (int m = 1; m < n; m++) - if (C[0][n - 1][1][m].p > bestSpanScore) { - bestSpanScore = C[0][n - 1][1][m].p; - bestSpan = C[0][n - 1][1][m]; - } - - // build the dependency tree from the chart - Parse out = new Parse(pos.length); - - bestSpan.create(out); - - out.heads[0] = -1; - out.labels[0] = 0; - - timeDecotder += (System.nanoTime() - ts); - - ts = System.nanoTime(); - - if (!projective) - rearrange(pos, out.heads, out.labels, x, training); - - timeRearrange += (System.nanoTime() - ts); - - return out; - } - - public static Parse[] decodeAll(short[] pos, DataFES x, boolean projective, boolean training) - throws InterruptedException { - - long ts = System.nanoTime(); - - if (executerService.isShutdown()) - executerService = java.util.concurrent.Executors.newCachedThreadPool(); - final int n = pos.length; - - final Open O[][][][] = new Open[n][n][2][]; - final Closed C[][][][] = new Closed[n][n][2][]; - - ArrayList<ParallelDecoder> pe = new ArrayList<ParallelDecoder>(); - - for (int i = 0; i < Parser.THREADS; i++) - pe.add(new ParallelDecoder(pos, x, O, C, n)); - - for (short k = 1; k < n; k++) { - - // provide the threads the data - for (short s = 0; s < n; s++) { - short t = (short) (s + k); - if (t >= n) - break; - - ParallelDecoder.add(s, t); - } - - executerService.invokeAll(pe); - } - - Parse[] out = new Parse[n - 1]; - - // float bestSpanScore = (-1.0F / 0.0F); - // Closed bestSpan = null; - for (int m = 1; m < n; m++) { - // if (C[0][n - 1][1][m].p > bestSpanScore) { - // bestSpanScore = C[0][n - 1][1][m].p; - // bestSpan = C[0][n - 1][1][m]; - // } - out[m - 1] = new Parse(pos.length); - C[0][n - 1][1][m].create(out[m - 1]); - out[m - 1].heads[0] = -1; - out[m - 1].labels[0] = 0; - } - - // build the dependency tree from the chart - // Parse out= new Parse(pos.length); - - // bestSpan.create(out); - - // out.heads[0]=-1; - // out.labels[0]=0; - - timeDecotder += (System.nanoTime() - ts); - - ts = System.nanoTime(); - - if (!projective) - for (Parse p : out) - rearrange(pos, p.heads, p.labels, x, training); - // if (!projective) rearrange(pos, out.heads, out.labels,x,training); - - timeRearrange += (System.nanoTime() - ts); - - return out; - } - - /** - * This is the parallel non-projective edge re-arranger - * - * @param pos - * part-of-speech tags - * @param heads - * parent child relation - * @param labs - * edge labels - * @param x - * the data - * @param edges - * the existing edges defined by part-of-speech tags - * @throws InterruptedException - */ - public static void rearrange(short[] pos, short[] heads, short[] labs, DataFES x, boolean training) - throws InterruptedException { - - int threads = (pos.length > Parser.THREADS) ? Parser.THREADS : pos.length; - - // wh what to change, nPar - new parent, nType - new type - short wh = -1, nPar = -1, nType = -1; - ArrayList<ParallelRearrange> pe = new ArrayList<ParallelRearrange>(); - - while (true) { - boolean[][] isChild = new boolean[heads.length][heads.length]; - for (int i = 1, l1 = 1; i < heads.length; i++, l1 = i) - while ((l1 = heads[l1]) != -1) - isChild[l1][i] = true; - - float max = Float.NEGATIVE_INFINITY; - float p = Extractor.encode3(pos, heads, labs, x); - - pe.clear(); - for (int i = 0; i < threads; i++) - pe.add(new ParallelRearrange(isChild, pos, x, heads, labs)); - - for (int ch = 1; ch < heads.length; ch++) { - - for (short pa = 0; pa < heads.length; pa++) { - if (ch == pa || pa == heads[ch] || isChild[ch][pa]) - continue; - - ParallelRearrange.add(p, (short) ch, pa); - } - } - executerService.invokeAll(pe); - - for (ParallelRearrange.PA rp : ParallelRearrange.order) - if (max < rp.max) { - max = rp.max; - wh = rp.wh; - nPar = rp.nPar; - nType = rp.nType; - } - ParallelRearrange.order.clear(); - - if (max <= NON_PROJECTIVITY_THRESHOLD) - break; // bb: changed from 0.0 - - heads[wh] = nPar; - labs[wh] = nType; - - } - } - - public static String getInfo() { - - return "Decoder non-projectivity threshold: " + NON_PROJECTIVITY_THRESHOLD; - } - -} diff --git a/dependencyParser/mate-tools/src/is2/parser/Edges.java b/dependencyParser/mate-tools/src/is2/parser/Edges.java deleted file mode 100644 index 39a0190..0000000 --- a/dependencyParser/mate-tools/src/is2/parser/Edges.java +++ /dev/null @@ -1,208 +0,0 @@ -/** - * - */ -package is2.parser; - -import java.io.DataInputStream; -import java.io.DataOutputStream; -import java.io.IOException; -import java.util.Arrays; -import java.util.Comparator; -import java.util.HashMap; -import java.util.Map.Entry; - -/** - * @author Dr. Bernd Bohnet, 13.05.2009; - * - * - */ -public final class Edges { - - private static short[][][] edges; - private static HashMap<Short, Integer> labelCount = new HashMap<Short, Integer>(); - - private static HashMap<String, Integer> slabelCount = new HashMap<String, Integer>(); - - static short[] def = new short[1]; - - private Edges() { - } - - /** - * @param length - */ - public static void init(int length) { - edges = new short[length][length][]; - } - - public static void findDefault() { - - int best = 0; - - for (Entry<Short, Integer> e : labelCount.entrySet()) { - - if (best < e.getValue()) { - best = e.getValue(); - def[0] = e.getKey(); - } - } - - // labelCount=null; - // String[] types = new String[mf.getFeatureCounter().get(PipeGen.REL)]; - // for (Entry<String, Integer> e : - // MFO.getFeatureSet().get(PipeGen.REL).entrySet()) types[e.getValue()] - // = e.getKey(); - - is2.util.DB.println("set default label to " + def[0] + " "); - - // System.out.println("found default "+def[0]); - - } - - final static public void put(int pos1, int pos2, short label) { - putD(pos1, pos2, label); - // putD(pos2, pos1,!dir, label); - } - - final static public void putD(int pos1, int pos2, short label) { - - Integer lc = labelCount.get(label); - if (lc == null) - labelCount.put(label, 1); - else - labelCount.put(label, lc + 1); - - String key = pos1 + "-" + pos2 + label; - Integer lcs = slabelCount.get(key); - if (lcs == null) - slabelCount.put(key, 1); - else - slabelCount.put(key, lcs + 1); - - if (edges[pos1][pos2] == null) { - edges[pos1][pos2] = new short[1]; - edges[pos1][pos2][0] = label; - - // edgesh[pos1][pos2][dir?0:1] = new TIntHashSet(2); - // edgesh[pos1][pos2][dir?0:1].add(label); - } else { - short labels[] = edges[pos1][pos2]; - for (short l : labels) { - // contains label already? - if (l == label) - return; - } - - short[] nlabels = new short[labels.length + 1]; - System.arraycopy(labels, 0, nlabels, 0, labels.length); - nlabels[labels.length] = label; - edges[pos1][pos2] = nlabels; - - // edgesh[pos1][pos2][dir?0:1].add(label); - } - } - - final static public short[] get(int pos1, int pos2) { - - if (pos1 < 0 || pos2 < 0 || edges[pos1][pos2] == null) - return def; - return edges[pos1][pos2]; - } - - /** - * @param dis - */ - static public void write(DataOutputStream d) throws IOException { - - int len = edges.length; - d.writeShort(len); - - for (int p1 = 0; p1 < len; p1++) { - for (int p2 = 0; p2 < len; p2++) { - if (edges[p1][p2] == null) - d.writeShort(0); - else { - d.writeShort(edges[p1][p2].length); - for (int l = 0; l < edges[p1][p2].length; l++) { - d.writeShort(edges[p1][p2][l]); - } - - } - } - } - - d.writeShort(def[0]); - - } - - /** - * @param dis - */ - public static void read(DataInputStream d) throws IOException { - int len = d.readShort(); - - edges = new short[len][len][]; - for (int p1 = 0; p1 < len; p1++) { - for (int p2 = 0; p2 < len; p2++) { - int ll = d.readShort(); - if (ll == 0) { - edges[p1][p2] = null; - } else { - edges[p1][p2] = new short[ll]; - for (int l = 0; l < ll; l++) { - edges[p1][p2][l] = d.readShort(); - } - } - } - } - - def[0] = d.readShort(); - - } - - public static void print() { - for(int i = 0; i < edges.length; ++i) - for(int j = 0; j < edges[i].length; ++j) - if(edges[i][j] != null) - System.out.println("edges[" + i + "][" + j + "] = " + Arrays.toString(edges[i][j])); - - assert def.length == 0; - System.out.println("def = [" + def[0] + "]"); - } - - public static class C implements Comparator<Short> { - - public C() { - super(); - } - - String _key; - - public C(String key) { - super(); - _key = key; - } - - /* - * (non-Javadoc) - * - * @see java.util.Comparator#compare(java.lang.Object, java.lang.Object) - */ - @Override - public int compare(Short l1, Short l2) { - - // int c1 = labelCount.get(l1); - // int c2 = labelCount.get(l2); - // if (true) return c1==c2?0:c1>c2?-1:1; - - int x1 = slabelCount.get(_key + l1.shortValue()); - int x2 = slabelCount.get(_key + l2.shortValue()); - // System.out.println(x1+" "+x2); - - return x1 == x2 ? 0 : x1 > x2 ? -1 : 1; - - } - - } - -} diff --git a/dependencyParser/mate-tools/src/is2/parser/Evaluator.java b/dependencyParser/mate-tools/src/is2/parser/Evaluator.java deleted file mode 100755 index f0d45ec..0000000 --- a/dependencyParser/mate-tools/src/is2/parser/Evaluator.java +++ /dev/null @@ -1,100 +0,0 @@ -package is2.parser; - -import is2.data.SentenceData09; -import is2.io.CONLLReader09; - -public class Evaluator { - - public static final String PUNCT = "!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~"; - - public static class Results { - - public int total; - public int corr; - public float las; - public float ula; - - } - - public static Results evaluate(String act_file, String pred_file) throws Exception { - - CONLLReader09 goldReader = new CONLLReader09(act_file, -1); - CONLLReader09 predictedReader = new CONLLReader09(pred_file, -1); - - int total = 0, corr = 0, corrL = 0; - int numsent = 0, corrsent = 0, corrsentL = 0; - SentenceData09 goldInstance = goldReader.getNext(); - SentenceData09 predInstance = predictedReader.getNext(); - - while (goldInstance != null) { - - int instanceLength = goldInstance.length(); - - if (instanceLength != predInstance.length()) - System.out.println("Lengths do not match on sentence " + numsent); - - int[] goldHeads = goldInstance.heads; - String[] goldLabels = goldInstance.labels; - int[] predHeads = predInstance.heads; - String[] predLabels = predInstance.labels; - - boolean whole = true; - boolean wholeL = true; - - // NOTE: the first item is the root info added during - // nextInstance(), so we skip it. - - int punc = 0; - for (int i = 1; i < instanceLength; i++) { - if (predHeads[i] == goldHeads[i]) { - corr++; - - if (goldLabels[i].equals(predLabels[i])) - corrL++; - else { - // System.out.println(numsent+" error gold - // "+goldLabels[i]+" "+predLabels[i]+" head - // "+goldHeads[i]+" child "+i); - wholeL = false; - } - } else { - // System.out.println(numsent+"error gold "+goldLabels[i]+" - // "+predLabels[i]+" head "+goldHeads[i]+" child "+i); - whole = false; - wholeL = false; - } - } - total += ((instanceLength - 1) - punc); // Subtract one to not score - // fake root token - - if (whole) - corrsent++; - if (wholeL) - corrsentL++; - numsent++; - - goldInstance = goldReader.getNext(); - predInstance = predictedReader.getNext(); - } - - Results r = new Results(); - - r.total = total; - r.corr = corr; - r.las = (float) Math.round(((double) corrL / total) * 100000) / 1000; - r.ula = (float) Math.round(((double) corr / total) * 100000) / 1000; - System.out.print("Total: " + total + " \tCorrect: " + corr + " "); - System.out.println("LAS: " + (double) Math.round(((double) corrL / total) * 100000) / 1000 + " \tTotal: " - + (double) Math.round(((double) corrsentL / numsent) * 100000) / 1000 + " \tULA: " - + (double) Math.round(((double) corr / total) * 100000) / 1000 + " \tTotal: " - + (double) Math.round(((double) corrsent / numsent) * 100000) / 1000); - - return r; - } - - public static float round(double v) { - - return Math.round(v * 10000F) / 10000F; - } - -} diff --git a/dependencyParser/mate-tools/src/is2/parser/Extractor.java b/dependencyParser/mate-tools/src/is2/parser/Extractor.java deleted file mode 100755 index 3ba9cc9..0000000 --- a/dependencyParser/mate-tools/src/is2/parser/Extractor.java +++ /dev/null @@ -1,1726 +0,0 @@ -package is2.parser; - -import is2.data.Cluster; -import is2.data.D6; -import is2.data.DX; -import is2.data.DataFES; -import is2.data.F2SF; -import is2.data.FV; -import is2.data.IFV; -import is2.data.Instances; -import is2.data.Long2IntInterface; -import is2.data.PipeGen; -import is2.util.DB; -import is2.util.OptionsSuper; - -final public class Extractor { - - static final int _SIB = 85; - public static int s_rel, s_word, s_type, s_dir, s_dist, s_feat, s_child, s_spath, s_lpath, s_pos, s_rel1; - public final DX d0, dl1, dl2, dwr, dr, dwwp, dw, dwp, dlf, d3lp, d2lp, d2pw, d2pp; - - public final Long2IntInterface li; - - public boolean s_stack = false; - - public Extractor(Long2IntInterface li, boolean stack, int what) { - - s_stack = stack; - - this.li = li; - - if (what == OptionsSuper.MULTIPLICATIVE) { - d0 = new D6(li); - dl1 = new D6(li); - dl2 = new D6(li); - dwr = new D6(li); - dr = new D6(li); - dwwp = new D6(li); - dw = new D6(li); - dwp = new D6(li); - dlf = new D6(li); - d3lp = new D6(li); - d2lp = new D6(li); - d2pw = new D6(li); - d2pp = new D6(li); - } else { - d0 = new D5(li); - dl1 = new D5(li); - dl2 = new D5(li); - dwr = new D5(li); - dr = new D5(li); - dwwp = new D5(li); - dw = new D5(li); - dwp = new D5(li); - dlf = new D5(li); - d3lp = new D5(li); - d2lp = new D5(li); - d2pw = new D5(li); - d2pp = new D5(li); - } - - } - - public static void initStat(int what) { - MFO mf = new MFO(); - if (what == OptionsSuper.MULTIPLICATIVE) { - - DB.println("mult (d4) "); - - s_rel = mf.getFeatureCounter().get(REL).intValue() * 16; - s_rel1 = mf.getFeatureCounter().get(REL).intValue() + 1; - s_pos = mf.getFeatureCounter().get(POS).intValue(); - s_word = mf.getFeatureCounter().get(WORD).intValue(); - s_type = mf.getFeatureCounter().get(TYPE).intValue(); - s_dir = (mf.getFeatureCounter().get(DIR)); - la = (mf.getValue(DIR, LA)); - ra = (mf.getValue(DIR, RA)); - s_dist = (mf.getFeatureCounter().get(DIST));// mf.getFeatureBits(DIST); - s_feat = (mf.getFeatureCounter().get(PipeGen.FEAT));// mf.getFeatureBits(Pipe.FEAT); - s_spath = (mf.getFeatureCounter().get(Cluster.SPATH) == null ? 0 - : mf.getFeatureCounter().get(Cluster.SPATH));// mf.getFeatureBits(Cluster.SPATH); - s_lpath = (mf.getFeatureCounter().get(Cluster.LPATH) == null ? 0 - : mf.getFeatureCounter().get(Cluster.LPATH));// mf.getFeatureBits(Cluster.LPATH); - - } else { - - s_rel = MFO.getFeatureBits(REL); - s_pos = MFO.getFeatureBits(POS); - s_word = MFO.getFeatureBits(WORD); - s_type = MFO.getFeatureBits(TYPE); - s_dir = MFO.getFeatureBits(DIR); - la = mf.getValue(DIR, LA); - ra = mf.getValue(DIR, RA); - s_dist = MFO.getFeatureBits(DIST); - s_feat = MFO.getFeatureBits(PipeGen.FEAT); - s_spath = MFO.getFeatureBits(Cluster.SPATH); - s_lpath = MFO.getFeatureBits(Cluster.LPATH); - - DB.println("shift init (d5) "); - } - - } - - public void init() { - - d0.a0 = s_type; - d0.a1 = s_pos; - d0.a2 = s_pos; - d0.a3 = s_pos; - d0.a4 = s_pos; - d0.a5 = s_pos; - d0.a6 = s_pos; - d0.a7 = s_pos; - d0.fix(); - dl1.a0 = s_type; - dl1.a1 = s_rel; - dl1.a2 = s_pos; - dl1.a3 = s_pos; - dl1.a4 = s_pos; - dl1.a5 = s_pos; - dl1.a6 = s_pos; - dl1.a7 = s_pos; - dl1.fix(); - dl2.a0 = s_type; - dl2.a1 = s_rel; - dl2.a2 = s_word; - dl2.a3 = s_pos; - dl2.a4 = s_pos; - dl2.a5 = s_pos; - dl2.a6 = s_pos; - dl2.a7 = s_pos; - dl2.fix(); - dwp.a0 = s_type; - dwp.a1 = s_rel; - dwp.a2 = s_word; - dwp.a3 = s_pos; - dwp.a4 = s_pos; - dwp.a5 = s_word; - dwp.fix(); - dwwp.a0 = s_type; - dwwp.a1 = s_rel; - dwwp.a2 = s_word; - dwwp.a3 = s_word; - dwwp.a4 = s_pos; - dwwp.a5 = s_word; - dwwp.fix(); - dlf.a0 = s_type; - dlf.a1 = s_rel; - dlf.a2 = s_pos; - dlf.a3 = s_pos; - dlf.a4 = s_feat; - dlf.a5 = s_feat; - dlf.a6 = s_pos; - dlf.a7 = s_pos; - dlf.fix(); - d3lp.a0 = s_type; - d3lp.a1 = s_rel; - d3lp.a2 = s_lpath; - d3lp.a3 = s_lpath; - d3lp.a4 = s_lpath; - d3lp.a5 = s_word; - d3lp.a6 = s_spath; - d3lp.a7 = s_spath; - d3lp.fix(); - d2lp.a0 = s_type; - d2lp.a1 = s_rel; - d2lp.a2 = s_lpath; - d2lp.a3 = s_lpath; - d2lp.a4 = s_word; - d2lp.a5 = s_word; - d2lp.fix(); // d3lp.a6 = s_spath; d3lp.a7 = s_spath; - d2pw.a0 = s_type; - d2pw.a1 = s_rel; - d2pw.a2 = s_lpath; - d2pw.a3 = s_lpath; - d2pw.a4 = s_word; - d2pw.a5 = s_word; - d2pw.fix(); // d3lp.a6 = s_spath; d3lp.a7 = s_spath; - d2pp.a0 = s_type; - d2pp.a1 = s_rel; - d2pp.a2 = s_lpath; - d2pp.a3 = s_lpath; - d2pp.a4 = s_pos; - d2pp.a5 = s_pos; - d2pp.fix(); // d3lp.a6 = s_spath; d3lp.a7 = s_spath; - } - - public int basic(short[] pposs, int p, int d, IFV f) { - - d0.clean(); - dl1.clean(); - dl2.clean(); - dwp.clean(); - dwwp.clean(); - dlf.clean(); - d3lp.clean(); - - d3lp.clean(); - d2lp.clean(); - d2pw.clean(); - d2pp.clean(); - - int n = 1; - int dir = (p < d) ? ra : la; - d0.v0 = n++; - d0.v1 = pposs[p]; - d0.v2 = pposs[d]; // d0.stop=4; - int end = (p >= d ? p : d); - int start = (p >= d ? d : p) + 1; - - for (int i = start; i < end; i++) { - d0.v3 = pposs[i]; - d0.cz4(); - d0.csa(s_dir, dir, f); - } - return n; - } - - public int firstm(Instances is, int i, int prnt, int dpnt, int label, Cluster cluster, long[] f) { - - for (int k = 0; k < f.length; k++) - f[k] = 0; - - short[] pposs = is.pposs[i]; - int[] form = is.forms[i]; - short[][] feats = is.feats[i]; - - int pF = form[prnt], dF = form[dpnt]; - int pL = is.plemmas[i][prnt], dL = is.plemmas[i][dpnt]; - int pP = pposs[prnt], dP = pposs[dpnt]; - - int prntLS = pF == -1 ? -1 : cluster.getLP(pF), chldLS = dF == -1 ? -1 : cluster.getLP(dF); - - // final int dir= (prnt < dpnt)? ra:la; - - if (pF > maxForm) - pF = -1; - if (pL > maxForm) - pL = -1; - - if (dF > maxForm) - dF = -1; - if (dL > maxForm) - dL = -1; - - int n = 3, c = 0; - - dl2.v1 = label; - dl2.v0 = n++; - dl2.v2 = pF; - dl2.v3 = dP; - dl2.cz4(); - f[c++] = dl2.getVal(); - dl2.v0 = n++; - dl2.cz3(); - f[c++] = dl2.getVal(); - dl2.v0 = n++; - dl2.v2 = dF; - dl2.v3 = pP; - dl2.cz4(); - f[c++] = dl2.getVal(); - dl2.v0 = n++; - dl2.cz3(); - f[c++] = dl2.getVal(); - - dwwp.v1 = label; - dwwp.v0 = n++; - dwwp.v2 = pF; - dwwp.v3 = dF; - dwwp.cz4(); - f[c++] = dwwp.getVal(); - - dl1.v1 = label; - dl1.v0 = n++; - dl1.v2 = dP; - dl1.cz3(); - f[c++] = dl1.getVal(); - dl1.v0 = n++; - dl1.v2 = pP; - dl1.cz3(); - f[c++] = dl1.getVal(); - dl1.v0 = n++; - dl1.v3 = dP; - dl1.cz4(); - f[c++] = dl1.getVal(); - - int pPm1 = prnt > 0 ? pposs[prnt - 1] : s_str, dPm1 = dpnt > 0 ? pposs[dpnt - 1] : s_str; - int pPp1 = prnt < pposs.length - 1 ? pposs[prnt + 1] : s_end, - dPp1 = dpnt < pposs.length - 1 ? pposs[dpnt + 1] : s_end; - - int pPm2 = prnt > 1 ? pposs[prnt - 2] : s_str, dPm2 = dpnt > 1 ? pposs[dpnt - 2] : s_str; - int pPp2 = prnt < pposs.length - 2 ? pposs[prnt + 2] : s_end, - dPp2 = dpnt < pposs.length - 2 ? pposs[dpnt + 2] : s_end; - - int pFm1 = prnt > 0 ? form[prnt - 1] : s_stwrd, dFm1 = dpnt > 0 ? form[dpnt - 1] : s_stwrd; - int pFp1 = prnt < form.length - 1 ? form[prnt + 1] : s_stwrd, - dFp1 = dpnt < form.length - 1 ? form[dpnt + 1] : s_stwrd; - - if (prnt - 1 == dpnt) - pPm1 = -1; - if (prnt == dpnt - 1) - dPm1 = -1; - - if (prnt + 1 == dpnt) - pPp1 = -1; - if (prnt == dpnt + 1) - dPp1 = -1; - - if (prnt - 2 == dpnt) - pPm2 = -1; - if (prnt == dpnt - 2) - dPm2 = -1; - - if (prnt + 2 == dpnt) - pPp2 = -1; - if (prnt == dpnt + 2) - dPp2 = -1; - - dl1.v0 = n++; - dl1.v2 = pP; - dl1.v3 = pPp1; - dl1.v4 = dP; - dl1.v5 = dPp1; - dl1.v6 = (prnt + 1 == dpnt ? 4 : prnt == dpnt + 1 ? 5 : 6); - dl1.cz7(); - f[c++] = dl1.getVal(); - dl1.v0 = n++; - dl1.v5 = dPm1; - dl1.v6 = (prnt + 1 == dpnt ? 4 : prnt == dpnt - 1 ? 5 : 6); - dl1.cz7(); - f[c++] = dl1.getVal(); - dl1.v0 = n++; - dl1.v3 = pPm1; - dl1.v6 = (prnt - 1 == dpnt ? 4 : prnt == dpnt - 1 ? 5 : 6); - dl1.cz7(); - f[c++] = dl1.getVal(); - dl1.v0 = n++; - dl1.v5 = dPp1; - dl1.v6 = (prnt - 1 == dpnt ? 4 : prnt == dpnt + 1 ? 5 : 6); - dl1.cz7(); - f[c++] = dl1.getVal(); - - dl1.v0 = n++; - dl1.v3 = pPm1; - dl1.v5 = (prnt - 1 == dpnt ? 4 : 5); - dl1.cz6(); - f[c++] = dl1.getVal(); - dl1.v0 = n++; - dl1.v3 = dPm1; - dl1.v5 = (prnt == dpnt - 1 ? 4 : 5); - dl1.cz6(); - f[c++] = dl1.getVal(); - dl1.v0 = n++; - dl1.v3 = dPp1; - dl1.v5 = (prnt == dpnt + 1 ? 4 : 5); - dl1.cz6(); - f[c++] = dl1.getVal(); - dl1.v0 = n++; - dl1.v3 = pPp1; - dl1.v5 = (prnt + 1 == dpnt ? 4 : 5); - dl1.cz6(); - f[c++] = dl1.getVal(); - - dl1.v0 = n++; - dl1.v2 = pP; - dl1.v3 = pPp2; - dl1.v4 = dP; - dl1.v5 = dPp2; - dl1.v6 = (prnt + 2 == dpnt ? 4 : prnt == dpnt + 2 ? 5 : 6); - dl1.cz7(); - f[c++] = dl1.getVal(); - dl1.v0 = n++; - dl1.v5 = dPm2; - dl1.v6 = (prnt + 2 == dpnt ? 4 : prnt == dpnt - 2 ? 5 : 6); - dl1.cz7(); - f[c++] = dl1.getVal(); - dl1.v0 = n++; - dl1.v3 = pPm2; - dl1.v6 = (prnt - 2 == dpnt ? 4 : prnt == dpnt - 2 ? 5 : 6); - dl1.cz7(); - f[c++] = dl1.getVal(); - dl1.v0 = n++; - dl1.v5 = dPp2; - dl1.v6 = (prnt - 2 == dpnt ? 4 : prnt == dpnt + 2 ? 5 : 6); - dl1.cz7(); - f[c++] = dl1.getVal(); - - // remove this again - dl1.v0 = n++; - dl1.v3 = pPm2; - dl1.v5 = (prnt - 2 == dpnt ? 4 : 5); - dl1.cz6(); - f[c++] = dl1.getVal(); - dl1.v0 = n++; - dl1.v3 = dPm2; - dl1.v5 = (prnt == dpnt - 2 ? 4 : 5); - dl1.cz6(); - f[c++] = dl1.getVal(); - dl1.v0 = n++; - dl1.v3 = dPp2; - dl1.v5 = (prnt == dpnt + 2 ? 4 : 5); - dl1.cz6(); - f[c++] = dl1.getVal(); - dl1.v0 = n++; - dl1.v3 = pPp2; - dl1.v5 = (prnt + 2 == dpnt ? 4 : 5); - dl1.cz6(); - f[c++] = dl1.getVal(); - - dl2.v0 = n++; - dl2.v3 = dFm1; - dl2.v3 = pPp1; - dl2.v4 = pP; - dl2.v5 = (prnt + 1 == dpnt ? 4 : prnt == dpnt - 1 ? 5 : 6); - dl2.cz6(); - f[c++] = dl2.getVal(); - dl2.v0 = n++; - dl2.v3 = dFp1; - dl2.v3 = pPm1; - dl2.v5 = (prnt - 1 == dpnt ? 4 : prnt == dpnt + 1 ? 5 : 6); - dl2.cz6(); - f[c++] = dl2.getVal(); - dl2.v0 = n++; - dl2.v3 = pFm1; - dl2.v3 = dPp1; - dl2.v4 = dP; - dl2.v5 = (prnt - 1 == dpnt ? 4 : prnt == dpnt + 1 ? 5 : 6); - dl2.cz6(); - f[c++] = dl2.getVal(); - dl2.v0 = n++; - dl2.v3 = pFp1; - dl2.v3 = dPm1; - dl2.v5 = (prnt + 1 == dpnt ? 4 : prnt == dpnt - 1 ? 5 : 6); - dl2.cz6(); - f[c++] = dl2.getVal(); - - // maybe without dir - dl2.v0 = n++; - dl2.v3 = dFm1; - dl2.v3 = dPm2; - dl2.v4 = pP; - dl2.v5 = (prnt == dpnt - 1 ? 4 : prnt == dpnt - 2 ? 5 : 6); - dl2.cz6(); - f[c++] = dl2.getVal(); - dl2.v0 = n++; - dl2.v3 = dFp1; - dl2.v3 = dPp2; - dl2.v5 = (prnt == dpnt + 1 ? 4 : prnt == dpnt + 2 ? 5 : 6); - dl2.cz6(); - f[c++] = dl2.getVal(); - dl2.v0 = n++; - dl2.v3 = pFm1; - dl2.v3 = pPm2; - dl2.v4 = dP; - dl2.v5 = (prnt - 1 == dpnt ? 4 : prnt - 2 == dpnt ? 5 : 6); - dl2.cz6(); - f[c++] = dl2.getVal(); - dl2.v0 = n++; - dl2.v3 = pFp1; - dl2.v3 = pPp2; - dl2.v5 = (prnt + 1 == dpnt ? 4 : prnt + 2 == dpnt ? 5 : 6); - dl2.cz6(); - f[c++] = dl2.getVal(); - - dwwp.v0 = n++; - dwwp.v2 = pF; - dwwp.v3 = dF; - dwwp.v4 = dP; - dwwp.cz5(); - f[c++] = dwwp.getVal(); - dwwp.v0 = n++; - dwwp.v2 = pF; - dwwp.v3 = dF; - dwwp.v4 = pP; - dwwp.cz5(); - f[c++] = dwwp.getVal(); - // dwwp.v0= n++; dwwp.v2=dF; dwwp.v3=pF; dwwp.v4=pP; dwwp.v4=dP; - // dwwp.cz6(); f[c++]=dwwp.getVal(); - - // until here - - // lemmas - - dl2.v1 = label; - dl2.v0 = n++; - dl2.v2 = pL; - dl2.v3 = dP; - dl2.cz4(); - f[c++] = dl2.getVal(); - dl2.v0 = n++; - dl2.cz3(); - f[c++] = dl2.getVal(); - dl2.v0 = n++; - dl2.v2 = dL; - dl2.v3 = pP; - dl2.cz4(); - f[c++] = dl2.getVal(); - dl2.v0 = n++; - dl2.cz3(); - f[c++] = dl2.getVal(); - - dwwp.v1 = label; - dwwp.v0 = n++; - dwwp.v2 = pL; - dwwp.v3 = dL; - dwwp.cz4(); - f[c++] = dwwp.getVal(); - - dwp.v1 = label; - dwp.v0 = n++; - dwp.v2 = dL; - dwp.v3 = pP; - dwp.v4 = dP; - dwp.v5 = pL; // dwp.cz6(); f[c++]=dwp.getVal(); - - dwp.v0 = n++; - dwp.v2 = pL; - dwp.v3 = pP; - dwp.v4 = dP; - dwp.v0 = n++; - dwp.cz5(); - f[c++] = dwp.getVal(); - - dwp.v0 = n++; - dwp.v2 = pL; - dwp.cz5(); - f[c++] = dwp.getVal(); - dwwp.v0 = n++; - dwwp.v2 = pL; - dwwp.v3 = dL; - dwwp.v4 = dP; - dwwp.cz5(); - f[c++] = dwwp.getVal(); - dwwp.v0 = n++; - dwwp.v4 = pP; - dwwp.cz5(); - f[c++] = dwwp.getVal(); - - // cluster - if (cluster.size() > 10) { - d2pw.v1 = label; - d2pw.v0 = n++; - d2pw.v2 = prntLS; - d2pw.v3 = chldLS; - d2pw.cz4(); - f[c++] = d2pw.getVal(); - d2pw.v0 = n++; - d2pw.v4 = pF; - d2pw.cz5(); - f[c++] = d2pw.getVal(); - d2pw.v0 = n++; - d2pw.v4 = dF; - d2pw.cz5(); - f[c++] = d2pw.getVal(); - // d2pw.v0=n++; d2pw.v5=pF; d2pw.cz6(); f[c++]=d2pw.getVal(); - - d2pp.v1 = label; - d2pp.v0 = n++; - d2pp.v2 = prntLS; - d2pp.v3 = chldLS; - d2pp.cz4(); - f[c++] = d2pp.getVal(); - d2pp.v0 = n++; - d2pp.v4 = pP; - d2pp.cz5(); - f[c++] = d2pp.getVal(); - d2pp.v0 = n++; - d2pp.v4 = dP; - d2pp.cz5(); - f[c++] = d2pp.getVal(); - d2pp.v0 = n++; - d2pp.v5 = pP; - d2pp.cz6(); - f[c++] = d2pp.getVal(); - } - - if (s_stack) { - - short[] prel = is.plabels[i]; - short[] phead = is.pheads[i]; - - // take those in for stacking - dl2.v1 = label; - dl2.v0 = n++; - dl2.v2 = prel[dpnt]; - dl2.v3 = pP; - dl2.v4 = dP; - dl2.v5 = prnt == phead[dpnt] ? 1 : 2; - dl2.cz6(); - f[c++] = dl2.getVal(); - dl2.v0 = n++; - dl2.v2 = pP; - dl2.v3 = dP; - dl2.v4 = prnt == phead[dpnt] ? 1 : 2; - dl2.cz5(); - f[c++] = dl2.getVal(); - } - - if (feats == null) - return c; - - short[] featsP = feats[prnt], featsD = feats[dpnt]; - dlf.v0 = n++; - dlf.v1 = label; - dlf.v2 = pP; - dlf.v3 = dP; - c = extractFeat(f, c, featsP, featsD); - - return c; - } - - public int second(Instances is, int i, int p, int d, int x, int label, Cluster cluster, long[] f) { - - // for(int k=0;k<f.length;k++) f[k]=0; - - dl1.clean(); - dwp.clean(); - dlf.clean(); - dwwp.clean(); - - short[] pos = is.pposs[i]; - int[] forms = is.forms[i], lemmas = is.plemmas[i]; - - int pP = pos[p], dP = pos[d]; - int pF = forms[p], dF = forms[d]; - int pL = lemmas[p], cL = lemmas[d]; - - int sP = x != -1 ? pos[x] : s_str, sF = x != -1 ? forms[x] : s_stwrd, sL = x != -1 ? lemmas[x] : s_stwrd; - - int n = _SIB; - if (pF > maxForm) - pF = -1; - if (pL > maxForm) - pL = -1; - - if (dF > maxForm) - dF = -1; - if (cL > maxForm) - cL = -1; - - if (sF > maxForm) - sF = -1; - if (sL > maxForm) - sL = -1; - - int c = 0; - - dl1.v1 = label; - dwwp.v1 = label; - dwp.v1 = label; - - dl1.v0 = n++; - dl1.v2 = pP; - dl1.v3 = dP; - dl1.v4 = sP; - dl1.cz5(); - f[c++] = dl1.getVal(); // f[c++]=dl1.csa(s_dist,dist); - dl1.v0 = n++; - dl1.v3 = sP; - dl1.cz4(); - f[c++] = dl1.getVal(); // f[c++]=dl1.csa(s_dist,dist); - dl1.v0 = n++; - dl1.v2 = dP; - dl1.cz4(); - f[c++] = dl1.getVal(); // f[c++]=dl1.csa(s_dist,dist); - - // sibling only could be tried - - dwwp.v0 = n++; - dwwp.v2 = pF; - dwwp.v3 = sF; - dwwp.cz4(); - f[c++] = dwwp.getVal(); // f[c++]=dwwp.csa(s_dist,dist); - dwwp.v0 = n++; - dwwp.v2 = dF; - dwwp.cz4(); - f[c++] = dwwp.getVal(); // f[c++]=dwwp.csa(s_dist,dist); - - // 154 - dwp.v0 = n++; - dwp.v2 = sF; - dwp.v3 = pP; - dwp.cz4(); - f[c++] = dwp.getVal(); // f[c++]=dwp.csa(s_dist,dist); - dwp.v0 = n++; - /* dwp.v1=label; */dwp.v3 = dP; - dwp.cz4(); - f[c++] = dwp.getVal(); // f[c++]=dwp.csa(s_dist,dist); - dwp.v0 = n++; - /* dwp.v1=label; */ dwp.v2 = pF; - dwp.v3 = sP; - dwp.cz4(); - f[c++] = dwp.getVal(); // f[c++]=dwp.csa(s_dist,dist); - dwp.v0 = n++; - /* dwp.v1=label; */ dwp.v2 = dF; - dwp.cz4(); - f[c++] = dwp.getVal();// f[c++]=dwp.csa(s_dist,dist); - - // 158 - // lemmas - - dwwp.v0 = n++; - dwwp.v2 = pL; - dwwp.v3 = sL; - dwwp.cz4(); - f[c++] = dwwp.getVal(); - dwwp.v0 = n++; - dwwp.v2 = cL; - dwwp.cz4(); - f[c++] = dwwp.getVal(); // f[c++]=dwwp.csa(s_dist,dist); - dwp.v0 = n++; - dwp.v2 = sL; - dwp.v3 = pP; - dwp.cz4(); - f[c++] = dwp.getVal();// f[c++]=dwp.csa(s_dist,dist); - dwp.v0 = n++; - dwp.v3 = dP; - dwp.cz4(); - f[c++] = dwp.getVal(); // f[c++]=dwp.csa(s_dist,dist); - - // 162 - dwp.v0 = n++; - dwp.v2 = pL; - dwp.v3 = sP; - dwp.cz4(); - f[c++] = dwp.getVal(); // f[c++]=dwp.csa(s_dist,dist); - dwp.v0 = n++; - dwp.v2 = cL; - dwp.cz4(); - f[c++] = dwp.getVal();// f[c++]=dwp.csa(s_dist,dist); - - // clusters - if (cluster.size() > 10) { - - } - - int pPm1 = p != 0 ? pos[p - 1] : s_str; - int chldPm1 = d - 1 >= 0 ? pos[d - 1] : s_str; - int prntPp1 = p != pos.length - 1 ? pos[p + 1] : s_end; - int chldPp1 = d != pos.length - 1 ? pos[d + 1] : s_end; - - // sibling part of speech minus and plus 1 - int sPm1 = x > 0 ? pos[x - 1] : s_str; - int sPp1 = x < pos.length - 1 ? pos[x + 1] : s_end; - - if (x + 1 == x || x + 1 == p || x + 1 == d) - sPp1 = -1; - if (p + 1 == x || p + 1 == p || p + 1 == d) - prntPp1 = -1; - if (d + 1 == x || d + 1 == p || d + 1 == d) - chldPp1 = -1; - - if (x - 1 == x || x - 1 == p || x - 1 == d) - sPm1 = -1; - if (d - 1 == x || d - 1 == p || d - 1 == d) - chldPm1 = -1; - if (p - 1 == x || p - 1 == p || p - 1 == d) - pPm1 = -1; - - dl1.v0 = n++; - dl1.v2 = sP; - dl1.v3 = sPp1; - dl1.v4 = pP; - dl1.cz5(); - f[c++] = dl1.getVal(); - // 165 - dl1.v0 = n++; - dl1.v2 = sP; - dl1.v3 = sPm1; - dl1.v4 = pP; - dl1.v5 = (x - 1 == p ? 3 : x - 1 == d ? 4 : 5); - dl1.cz6(); - f[c++] = dl1.getVal(); // dl1.getVal();// f.add(li.l2i(l)); - dl1.v0 = n++; - dl1.v2 = sP; - dl1.v3 = pP; - dl1.v4 = prntPp1; - dl1.v5 = (x == p + 1 ? 3 : 4); - dl1.cz6(); - f[c++] = dl1.getVal();// f.add(li.l2i(l)); - dl1.v0 = n++; - dl1.v2 = sP; - dl1.v3 = pP; - dl1.v4 = pPm1; - dl1.v5 = (x == p - 1 ? 3 : 4); - dl1.cz6(); - f[c++] = dl1.getVal();// f.add(li.l2i(l)); - dl1.v0 = n++; - dl1.v2 = sP; - dl1.v3 = sPp1; - dl1.v4 = pPm1; - dl1.v5 = pP; - dl1.v6 = (x == p - 1 ? 3 : x == p + 1 ? 4 : 5); - dl1.cz7(); - f[c++] = dl1.getVal(); - dl1.v0 = n++; - dl1.v2 = sPm1; - dl1.v3 = sP; - dl1.v4 = pPm1; - dl1.v5 = pP; - dl1.v6 = (x == p - 1 ? 3 : x - 1 == p ? 4 : 5); - dl1.cz7(); - f[c++] = dl1.getVal();// f.add(li.l2i(l)); - dl1.v0 = n++; - dl1.v2 = sP; - dl1.v3 = sPp1; - dl1.v4 = pP; - dl1.v5 = prntPp1; - dl1.v6 = (x + 1 == p ? 3 : x == p + 1 ? 4 : 5); - dl1.cz7(); - f[c++] = dl1.getVal();// f.add(li.l2i(l)); - dl1.v0 = n++; - dl1.v2 = sPm1; - dl1.v3 = sP; - dl1.v4 = pP; - dl1.v5 = prntPp1; - dl1.v6 = (x == p - 1 ? 3 : x == p + 1 ? 4 : 5); - dl1.cz7(); - f[c++] = dl1.getVal();// f.add(li.l2i(l)); - - dl1.v0 = n++; - dl1.v2 = sP; - dl1.v3 = sPp1; - dl1.v4 = dP; - dl1.v5 = (x + 1 == d ? 3 : x + 1 == p ? 4 : 5); - dl1.cz6(); - f[c++] = dl1.getVal(); - dl1.v0 = n++; - dl1.v2 = sP; - dl1.v3 = sPm1; - dl1.v4 = dP; - dl1.v5 = (x - 1 == d ? 3 : x - 1 == p ? 4 : 5); - dl1.cz6(); - f[c++] = dl1.getVal(); - - dl1.v0 = n++; - dl1.v2 = sP; - dl1.v3 = dP; - dl1.v4 = chldPp1; - dl1.v5 = (x == d + 1 ? 3 : d + 1 == p ? 4 : 5); - dl1.cz6(); - f[c++] = dl1.getVal(); - dl1.v0 = n++; - dl1.v2 = sP; - dl1.v3 = dP; - dl1.v4 = chldPm1; - dl1.v5 = (x == d - 1 ? 3 : d - 1 == p ? 4 : 5); - dl1.cz6(); - f[c++] = dl1.getVal(); - dl1.v0 = n++; - dl1.v2 = sP; - dl1.v3 = sPp1; - dl1.v4 = chldPm1; - dl1.v5 = dP; - dl1.v6 = (x == d - 1 ? 3 : x + 1 == d ? 4 : 5); - dl1.cz7(); - f[c++] = dl1.getVal();// f.add(li.l2i(l)); - dl1.v0 = n++; - dl1.v2 = sPm1; - dl1.v3 = sP; - dl1.v4 = chldPm1; - dl1.v5 = dP; - dl1.v6 = (x - 1 == d ? 3 : d - 1 == x ? 4 : 5); - dl1.cz7(); - f[c++] = dl1.getVal(); - dl1.v0 = n++; - dl1.v2 = sP; - dl1.v3 = sPp1; - dl1.v4 = dP; - dl1.v5 = chldPp1; - dl1.v6 = (x == d + 1 ? 3 : x + 1 == d ? 4 : 5); - dl1.cz7(); - f[c++] = dl1.getVal();// f.add(li.l2i(l)); - dl1.v0 = n++; - dl1.v2 = sPm1; - dl1.v3 = sP; - dl1.v4 = dP; - dl1.v5 = chldPp1; - dl1.v6 = (x - 1 == d ? 3 : d + 1 == x ? 4 : 5); - dl1.cz7(); - f[c++] = dl1.getVal(); - - // c=61; - /* - * if (cluster.size()>10) { AtomicInteger N = new AtomicInteger(n); c = - * addClusterFeatures(d, p, x, pos, forms, cluster, N, c, f,label); n = - * N.get(); } - */ - // take those in for stacking - - if (s_stack) { - short[] prel = is.plabels[i], phead = is.pheads[i]; - - int g = p == phead[d] ? 1 : 2; - if (x >= 0) - g += p == phead[x] ? 4 : 8; - - int gr = x == -1 ? s_relend : prel[x]; - - dl2.v1 = label; - dl2.v0 = n++; - dl2.v2 = prel[d]; - dl2.v3 = g; - dl2.v4 = sP; - dl2.v5 = dP; - dl2.cz6(); - f[c++] = dl2.getVal(); - dl2.v0 = n++; - dl2.v2 = prel[d]; - dl2.v3 = g; - dl2.v4 = sP; - dl2.v5 = pP; - dl2.cz6(); - f[c++] = dl2.getVal(); - dl2.v0 = n++; - dl2.v2 = prel[d]; - dl2.v3 = g; - dl2.v4 = sP; - dl2.v5 = pP; - dl2.v6 = dP; - dl2.cz7(); - f[c++] = dl2.getVal(); - - dl2.v0 = n++; - dl2.v2 = gr; - dl2.v3 = g; - dl2.v4 = sP; - dl2.v5 = dP; - dl2.cz6(); - f[c++] = dl2.getVal(); - dl2.v0 = n++; - dl2.v2 = gr; - dl2.v3 = g; - dl2.v4 = sP; - dl2.v5 = pP; - dl2.cz6(); - f[c++] = dl2.getVal(); - dl2.v0 = n++; - dl2.v2 = gr; - dl2.v3 = g; - dl2.v4 = sP; - dl2.v5 = pP; - dl2.v6 = dP; - dl2.cz7(); - f[c++] = dl2.getVal(); - } - - short[][] feats = is.feats[i]; - - if (feats == null) - return c; - - short[] featsP = feats[d]; - short[] featsSbl = x != -1 ? feats[x] : null; - dlf.v1 = label; - dlf.v0 = n++; - dlf.v2 = sP; - dlf.v3 = dP; - c = extractFeat(f, c, featsP, featsSbl); - - featsP = feats[p]; - - dlf.v0 = n++; - dlf.v1 = label; - dlf.v2 = sP; - dlf.v3 = pP; - c = extractFeat(f, c, featsP, featsSbl); - - return c; - } - - /** - * Separated this method to speed up parsing - * - * @param d - * @param p - * @param x - * @param pos - * @param forms - * @param cluster - * @param N - * @param c - * @param f - * @return - */ - int addClusterFeatures(Instances is, int i, int d, int p, int x, Cluster cluster, int c, long[] f, int label) { - - // int n= N.get(); - - short[] pos = is.pposs[i]; - int[] forms = is.forms[i]; - - int n = 190; - int pP = pos[p], dP = pos[d]; - int sP = x != -1 ? pos[x] : s_str; - - int pLSp1 = p != pos.length - 1 ? forms[p + 1] == -1 ? -1 : cluster.getLP(forms[p + 1]) : _cend; - int cLSp1 = d != pos.length - 1 ? forms[d + 1] == -1 ? -1 : cluster.getLP(forms[d + 1]) : _cend; - int sLSp1 = x < pos.length - 1 ? forms[x + 1] == -1 ? -1 : cluster.getLP(forms[x + 1]) : _cend; - - int pLSm1 = p != 0 ? forms[p - 1] == -1 ? -1 : cluster.getLP(forms[p - 1]) : _cstr; - int cLSm1 = d - 1 >= 0 ? forms[d - 1] == -1 ? -1 : cluster.getLP(forms[d - 1]) : _cstr; - int sLSm1 = x > 0 ? forms[x - 1] == -1 ? -1 : cluster.getLP(forms[x - 1]) : _cstr; - - // int c=61; - int pF = forms[p], dF = forms[d], sF = x != -1 ? forms[x] : s_stwrd; - int prntLS = pF == -1 ? -1 : cluster.getLP(pF), chldLS = dF == -1 ? -1 : cluster.getLP(dF); - - int sblLS = (x != -1) && (sF != -1) ? cluster.getLP(sF) : s_stwrd; - - d2lp.v1 = label; - d2lp.v0 = n++; - d2lp.v2 = prntLS; - d2lp.v3 = sblLS; - d2lp.cz4(); - f[c++] = d2lp.getVal(); - d2lp.v0 = n++; - d2lp.v2 = chldLS; - d2lp.v3 = sblLS; - d2lp.cz4(); - f[c++] = d2lp.getVal();// f[c++]=d2lp.csa(s_dist,dist); - - d3lp.v1 = label; - d3lp.v0 = n++; - d3lp.v2 = prntLS; - d3lp.v3 = chldLS; - d3lp.v4 = sblLS; - d3lp.cz5(); - f[c++] = d3lp.getVal(); - - d2lp.v0 = n++; - d2lp.v2 = prntLS; - d2lp.v3 = chldLS; - d2lp.v4 = sF; - d2lp.cz5(); - f[c++] = d2lp.getVal(); // f[c++]=d2lp.csa(s_dist,dist); - d2lp.v0 = n++; - d2lp.v2 = prntLS; - d2lp.v3 = sblLS; - d2lp.v4 = dF; - d2lp.cz5(); - f[c++] = d2lp.getVal(); // f[c++]=d2lp.csa(s_dist,dist); - d2lp.v0 = n++; - d2lp.v2 = chldLS; - d2lp.v3 = sblLS; - d2lp.v4 = pF; - d2lp.cz5(); - f[c++] = d2lp.getVal(); // f[c++]=d2lp.csa(s_dist,dist); - - d2pp.v1 = label; - d2pp.v0 = n++; - d2pp.v2 = prntLS; - d2pp.v3 = chldLS; - d2pp.v4 = sP; - d2pp.cz5(); - f[c++] = d2pp.getVal(); // f[c++]=d2pp.csa(s_dist,dist); - d2pp.v0 = n++; - d2pp.v2 = prntLS; - d2pp.v3 = sblLS; - d2pp.v4 = dP; - d2pp.cz5(); - f[c++] = d2pp.getVal(); // f[c++]=d2pp.csa(s_dist,dist); - d2pp.v0 = n++; - d2pp.v2 = chldLS; - d2pp.v3 = sblLS; - d2pp.v4 = pP; - d2pp.cz5(); - f[c++] = d2pp.getVal(); // f[c++]=d2pp.csa(s_dist,dist); - - if (x + 1 == x || x + 1 == p || x + 1 == d) - sLSp1 = -1; - if (p + 1 == x || p + 1 == p || p + 1 == d) - pLSp1 = -1; - if (d + 1 == x || d + 1 == p || d + 1 == d) - cLSp1 = -1; - - if (x - 1 == x || x - 1 == p || x - 1 == d) - sLSm1 = -1; - if (d - 1 == x || d - 1 == p || d - 1 == d) - cLSm1 = -1; - if (p - 1 == x || p - 1 == p || p - 1 == d) - pLSm1 = -1; - - dl1.v0 = n++; - dl1.v2 = sP; - dl1.v3 = sLSp1; - dl1.v4 = pP; - dl1.cz5(); - f[c++] = dl1.getVal(); - dl1.v0 = n++; - dl1.v2 = sP; - dl1.v3 = sLSm1; - dl1.v4 = pP; - dl1.cz5(); - f[c++] = dl1.getVal(); - dl1.v0 = n++; - dl1.v2 = sP; - dl1.v3 = pP; - dl1.v4 = pLSp1; - dl1.cz5(); - f[c++] = dl1.getVal(); - dl1.v0 = n++; - dl1.v2 = sP; - dl1.v3 = pP; - dl1.v4 = pLSm1; - dl1.cz5(); - f[c++] = dl1.getVal(); - dl1.v0 = n++; - dl1.v2 = sP; - dl1.v3 = sLSp1; - dl1.v4 = pLSm1; - dl1.v5 = pP; - dl1.cz6(); - f[c++] = dl1.getVal(); - dl1.v0 = n++; - dl1.v2 = sLSm1; - dl1.v3 = sP; - dl1.v4 = pLSm1; - dl1.v5 = pP; - dl1.cz6(); - f[c++] = dl1.getVal(); - dl1.v0 = n++; - dl1.v2 = sP; - dl1.v3 = sLSp1; - dl1.v4 = pP; - dl1.v5 = pLSp1; - dl1.cz6(); - f[c++] = dl1.getVal(); - dl1.v0 = n++; - dl1.v2 = sLSm1; - dl1.v3 = sP; - dl1.v4 = pP; - dl1.v5 = pLSp1; - dl1.cz6(); - f[c++] = dl1.getVal(); - dl1.v0 = n++; - dl1.v2 = sP; - dl1.v3 = sLSp1; - dl1.v4 = dP; - dl1.cz5(); - f[c++] = dl1.getVal(); - dl1.v0 = n++; - dl1.v2 = sP; - dl1.v3 = sLSm1; - dl1.v4 = dP; - dl1.cz5(); - f[c++] = dl1.getVal(); - dl1.v0 = n++; - dl1.v2 = sP; - dl1.v3 = dP; - dl1.v4 = cLSp1; - dl1.cz5(); - f[c++] = dl1.getVal(); - dl1.v0 = n++; - dl1.v2 = sP; - dl1.v3 = dP; - dl1.v4 = cLSm1; - dl1.cz5(); - f[c++] = dl1.getVal(); - dl1.v0 = n++; - dl1.v2 = sP; - dl1.v3 = sLSm1; - dl1.v4 = cLSm1; - dl1.v5 = dP; - dl1.cz6(); - f[c++] = dl1.getVal(); - dl1.v0 = n++; - dl1.v2 = sLSm1; - dl1.v3 = sP; - dl1.v4 = cLSm1; - dl1.v5 = dP; - dl1.cz6(); - f[c++] = dl1.getVal(); - dl1.v0 = n++; - dl1.v2 = sP; - dl1.v3 = sLSp1; - dl1.v4 = dP; - dl1.v5 = cLSp1; - dl1.cz6(); - f[c++] = dl1.getVal(); - dl1.v0 = n++; - dl1.v2 = sLSm1; - dl1.v3 = sP; - dl1.v4 = dP; - dl1.v5 = cLSp1; - dl1.cz6(); - f[c++] = dl1.getVal(); - - dl1.v0 = n++; - dl1.v2 = sP; - dl1.v3 = sLSp1; - dl1.v4 = pP; - dl1.cz5(); - f[c++] = dl1.getVal(); - dl1.v0 = n++; - dl1.v2 = sP; - dl1.v3 = sLSm1; - dl1.v4 = pP; - dl1.cz5(); - f[c++] = dl1.getVal(); - dl1.v0 = n++; - dl1.v2 = sP; - dl1.v3 = pP; - dl1.v4 = pLSp1; - dl1.cz5(); - f[c++] = dl1.getVal(); - dl1.v0 = n++; - dl1.v2 = sP; - dl1.v3 = pP; - dl1.v4 = pLSm1; - dl1.cz5(); - f[c++] = dl1.getVal(); - dl1.v0 = n++; - dl1.v2 = sP; - dl1.v3 = sLSp1; - dl1.v4 = pLSm1; - dl1.v5 = pP; - dl1.cz6(); - f[c++] = dl1.getVal(); - dl1.v0 = n++; - dl1.v2 = sLSm1; - dl1.v3 = sP; - dl1.v4 = pLSm1; - dl1.v5 = pP; - dl1.cz6(); - f[c++] = dl1.getVal(); - dl1.v0 = n++; - dl1.v2 = sP; - dl1.v3 = sLSp1; - dl1.v4 = pP; - dl1.v5 = pLSp1; - dl1.cz6(); - f[c++] = dl1.getVal(); - dl1.v0 = n++; - dl1.v2 = sLSm1; - dl1.v3 = sP; - dl1.v4 = pP; - dl1.v5 = pLSp1; - dl1.cz6(); - f[c++] = dl1.getVal(); - dl1.v0 = n++; - dl1.v2 = sP; - dl1.v3 = sLSp1; - dl1.v4 = dP; - dl1.cz5(); - f[c++] = dl1.getVal(); - dl1.v0 = n++; - dl1.v2 = sP; - dl1.v3 = sLSm1; - dl1.v4 = dP; - dl1.cz5(); - f[c++] = dl1.getVal(); - dl1.v0 = n++; - dl1.v2 = sP; - dl1.v3 = dP; - dl1.v4 = cLSp1; - dl1.cz5(); - f[c++] = dl1.getVal(); - dl1.v0 = n++; - dl1.v2 = sP; - dl1.v3 = dP; - dl1.v4 = cLSm1; - dl1.cz5(); - f[c++] = dl1.getVal(); - dl1.v0 = n++; - dl1.v2 = sP; - dl1.v3 = sLSm1; - dl1.v4 = cLSm1; - dl1.v5 = dP; - dl1.cz6(); - f[c++] = dl1.getVal(); - dl1.v0 = n++; - dl1.v2 = sLSm1; - dl1.v3 = sP; - dl1.v4 = cLSm1; - dl1.v5 = dP; - dl1.cz6(); - f[c++] = dl1.getVal(); - dl1.v0 = n++; - dl1.v2 = sP; - dl1.v3 = sLSp1; - dl1.v4 = dP; - dl1.v5 = cLSp1; - dl1.cz6(); - f[c++] = dl1.getVal(); - dl1.v0 = n++; - dl1.v2 = sLSm1; - dl1.v3 = sP; - dl1.v4 = dP; - dl1.v5 = cLSp1; - dl1.cz6(); - f[c++] = dl1.getVal(); - - return c; - } - - private int extractFeat(long[] f, int cnt, short[] featsP, short[] featsD) { - if (featsP != null && featsD != null) { - for (short i1 = 0; i1 < featsP.length; i1++) { - for (short i2 = 0; i2 < featsD.length; i2++) { - dlf.v4 = featsP[i1]; - dlf.v5 = featsD[i2]; - dlf.cz6(); - f[cnt++] = dlf.getVal(); - } - } - } else if (featsP == null && featsD != null) { - - for (short i2 = 0; i2 < featsD.length; i2++) { - dlf.v4 = nofeat; - dlf.v5 = featsD[i2]; - dlf.cz6(); - f[cnt++] = dlf.getVal(); - - } - } else if (featsP != null && featsD == null) { - - for (short i1 = 0; i1 < featsP.length; i1++) { - dlf.v4 = featsP[i1]; - dlf.v5 = nofeat; - dlf.cz6(); - f[cnt++] = dlf.getVal(); - - } - } - return cnt; - } - - public FV encodeCat(Instances is, int ic, short pposs[], int forms[], int[] lemmas, short[] heads, short[] types, - short feats[][], Cluster cluster, FV f) { - - long[] svs = new long[250]; - - for (int i = 1; i < heads.length; i++) { - - basic(pposs, heads[i], i, f); - - int w1 = heads[i] < i ? heads[i] : i; - int w2 = heads[i] < i ? i : heads[i]; - - int dir = heads[i] < i ? 0 : s_rel1; - int label = types[i] + dir; - - int c = firstm(is, ic, w1, w2, label, cluster, svs); - for (int k = 0; k < c; k++) - dl1.map(f, svs[k]); - - int ch, cmi, cmo; - if (heads[i] < i) { - ch = rightmostRight(heads, heads[i], i); - cmi = leftmostLeft(heads, i, heads[i]); - cmo = rightmostRight(heads, i, heads.length); - - } else { - ch = leftmostLeft(heads, heads[i], i); - cmi = rightmostRight(heads, i, heads[i]); - cmo = leftmostLeft(heads, i, 0); - } - - int lx = types[i] + s_rel1 * ((heads[i] < i ? 0 : 1) + 8); - c = second(is, ic, w1, w2, ch, lx, cluster, svs); - for (int k = 0; k < c; k++) - dl1.map(f, svs[k]); - c = addClusterFeatures(is, ic, w1, w2, ch, cluster, c, svs, lx); - for (int k = 0; k < c; k++) - dl1.map(f, svs[k]); - - lx = types[i] + s_rel1 * ((heads[i] < i ? 0 : 1) + ((cmi < i) ? 0 : 2)); - c = second(is, ic, w1, w2, cmi, lx, cluster, svs); - for (int k = 0; k < c; k++) - dl1.map(f, svs[k]); - - c = addClusterFeatures(is, ic, w1, w2, cmi, cluster, c, svs, lx); - for (int k = 0; k < c; k++) - dl1.map(f, svs[k]); - - lx = types[i] + s_rel1 * ((heads[i] < i ? 0 : 1) + ((cmo < i) ? 0 : 2)); - c = second(is, ic, w1, w2, cmo, lx, cluster, svs); - for (int k = 0; k < c; k++) - dl1.map(f, svs[k]); - - c = addClusterFeatures(is, ic, w1, w2, cmo, cluster, c, svs, lx); - for (int k = 0; k < c; k++) - dl1.map(f, svs[k]); - } - - return f; - } - - public void compare(Instances is, int ic, short pos[], short[] heads, short[] types, Cluster cluster, F2SF f, - DataFES x) { - - long[] svs = new long[250]; - - for (int i = 1; i < heads.length; i++) { - - f.clear(); - basic(pos, heads[i], i, f); - - if (x.pl[heads[i]][i] != f.getScore()) { - DB.println("basic diff " + x.pl[heads[i]][i] + " fg " + f.getScore()); - } - - int w1 = heads[i] < i ? heads[i] : i; - int w2 = heads[i] < i ? i : heads[i]; - - int dir = heads[i] < i ? 0 : s_rel1; - int label = types[i] + dir; - f.clear(); - int c = firstm(is, ic, w1, w2, label, cluster, svs); - for (int k = 0; k < c; k++) - dl1.map(f, svs[k]); - - if (x.lab[heads[i]][i][types[i]] != f.getScore()) { - DB.println("first diff " + x.lab[heads[i]][i][types[i]] + " fg " + f.getScore()); - } - - short[] labels = Edges.get(pos[heads[i]], pos[i]); - int lid = -1; - for (int k = 0; k < labels.length; k++) - if (types[i] == labels[k]) { - lid = k; - break; - } - - int ch, cmi, cmo; - if (heads[i] < i) { - ch = rightmostRight(heads, heads[i], i); - cmi = leftmostLeft(heads, i, heads[i]); - cmo = rightmostRight(heads, i, heads.length); - - } else { - ch = leftmostLeft(heads, heads[i], i); - cmi = rightmostRight(heads, i, heads[i]); - cmo = leftmostLeft(heads, i, 0); - } - - f.clear(); - - int lx = types[i] + s_rel1 * ((heads[i] < i ? 0 : 1) + 8); - c = second(is, ic, w1, w2, ch, lx, cluster, svs); - for (int k = 0; k < c; k++) - dl1.map(f, svs[k]); - - if (x.sib[heads[i]][i][ch == -1 ? heads[i] : ch][lid] != f.getScore()) { - DB.println("sib diff " + x.sib[heads[i]][i][ch == -1 ? i : ch][lid] + " fg " + f.getScore()); - } - - f.clear(); - - lx = types[i] + s_rel1 * ((heads[i] < i ? 0 : 1) + ((cmi < i) ? 0 : 2)); - c = second(is, ic, w1, w2, cmi, lx, cluster, svs); - for (int k = 0; k < c; k++) - dl1.map(f, svs[k]); - - if (x.gra[heads[i]][i][cmi == -1 ? i : cmi][lid] != f.getScore()) { - DB.println("gcm diff " + x.gra[heads[i]][i][cmi == -1 ? i : cmi][lid] + " fg " + f.getScore() + " cmi " - + cmi + " i " + i + " head " + heads[i] + " w1 " + w1 + " w2 " + w2 + " label " + lx + " " - + ((heads[i] < i ? 0 : 1) + ((cmi < i) ? 0 : 2))); - - System.out.println("w1 " + w1 + " w2 " + w2 + " cmi " + cmi + " label " + label + " "); - - for (long k : svs) - System.out.print(k + " "); - System.out.println(); - - } - f.clear(); - lx = types[i] + s_rel1 * ((heads[i] < i ? 0 : 1) + ((cmo < i) ? 0 : 2)); - c = second(is, ic, w1, w2, cmo, lx, cluster, svs); - for (int k = 0; k < c; k++) - dl1.map(f, svs[k]); - - if (x.gra[heads[i]][i][cmo == -1 ? i : cmo][lid] != f.getScore()) { - DB.println("gcm diff " + x.gra[heads[i]][i][cmo == -1 ? i : cmo][lid] + " fg " + f.getScore() + " cmo " - + cmo + " i " + i + " head " + heads[i] + " w1 " + w1 + " w2 " + w2 + " label " + lx + " " - + ((heads[i] < i ? 0 : 1) + ((cmi < i) ? 0 : 2))); - - System.out.println("w1 " + w1 + " w2 " + w2 + " cmi " + cmi + " label " + label + " "); - - for (long k : svs) - System.out.print(k + " "); - System.out.println(); - - } - } - - } - - public short[] searchLabel(Instances is, int ic, short pposs[], int forms[], int[] lemmas, short[] heads, - short[] types, short feats[][], Cluster cluster, IFV f) { - - long[] svs = new long[250]; - - short[] newLabels = new short[types.length]; - - for (int i = 1; i < heads.length; i++) { - - // int n =basic(pposs, forms, heads[i], i, cluster, f); - - int ch, cmi, cmo; - if (heads[i] < i) { - ch = rightmostRight(heads, heads[i], i); - cmi = leftmostLeft(heads, i, heads[i]); - cmo = rightmostRight(heads, i, heads.length); - - } else { - ch = leftmostLeft(heads, heads[i], i); - cmi = rightmostRight(heads, i, heads[i]); - cmo = leftmostLeft(heads, i, 0); - } - - short labels[] = Edges.get(pposs[is.heads[ic][i]], pposs[i]); - - float best = -1000; - short bestL = 0; - for (short label : labels) { - - f.clear(); - firstm(is, ic, heads[i], i, label, cluster, svs); - for (long sv : svs) - dl1.map(f, sv); - - second(is, ic, heads[i], i, ch, label, cluster, svs); - for (long sv : svs) - dl1.map(f, sv); - - second(is, ic, heads[i], i, cmi, label, cluster, svs); - for (long sv : svs) - dl1.map(f, sv); - - second(is, ic, heads[i], i, cmo, label, cluster, svs); - for (long sv : svs) - dl1.map(f, sv); - - if (best < f.getScore()) { - best = (float) f.getScore(); - bestL = label; - newLabels[i] = bestL; - } - - } - } - return newLabels; - - // return f; - } - - public static float encode3(short[] pos, short heads[], short[] types, DataFES d2) { - - float v = 0F; - for (int i = 1; i < heads.length; i++) { - - // int dir= (heads[i] < i)? 0:1; - - v += d2.pl[heads[i]][i]; - v += d2.lab[heads[i]][i][types[i]]; - - // boolean left = i<heads[i]; - short[] labels = Edges.get(pos[heads[i]], pos[i]); - int lid = -1; - for (int k = 0; k < labels.length; k++) - if (types[i] == labels[k]) { - lid = k; - break; - } - - int ch, cmi, cmo; - if (heads[i] < i) { - ch = rightmostRight(heads, heads[i], i); - cmi = leftmostLeft(heads, i, heads[i]); - cmo = rightmostRight(heads, i, heads.length); - - if (ch == -1) - ch = heads[i]; - if (cmi == -1) - cmi = heads[i]; - if (cmo == -1) - cmo = heads[i]; - - } else { - ch = leftmostLeft(heads, heads[i], i); - cmi = rightmostRight(heads, i, heads[i]); - cmo = leftmostLeft(heads, i, 0); - - if (ch == -1) - ch = i; - if (cmi == -1) - cmi = i; - if (cmo == -1) - cmo = i; - } - v += d2.sib[heads[i]][i][ch][lid]; - v += d2.gra[heads[i]][i][cmi][lid]; - v += d2.gra[heads[i]][i][cmo][lid]; - } - return v; - } - - public static float encode3(short[] pos, short heads[], short[] types, DataFES d2, float[] scores) { - - float v = 0F; - for (int i = 1; i < heads.length; i++) { - - scores[i] = d2.pl[heads[i]][i]; - scores[i] += d2.lab[heads[i]][i][types[i]]; - - short[] labels = Edges.get(pos[heads[i]], pos[i]); - int lid = -1; - for (int k = 0; k < labels.length; k++) - if (types[i] == labels[k]) { - lid = k; - break; - } - - int ch, cmi, cmo; - if (heads[i] < i) { - ch = rightmostRight(heads, heads[i], i); - cmi = leftmostLeft(heads, i, heads[i]); - cmo = rightmostRight(heads, i, heads.length); - - if (ch == -1) - ch = heads[i]; - if (cmi == -1) - cmi = heads[i]; - if (cmo == -1) - cmo = heads[i]; - - } else { - ch = leftmostLeft(heads, heads[i], i); - cmi = rightmostRight(heads, i, heads[i]); - cmo = leftmostLeft(heads, i, 0); - - if (ch == -1) - ch = i; - if (cmi == -1) - cmi = i; - if (cmo == -1) - cmo = i; - } - scores[i] += d2.sib[heads[i]][i][ch][lid]; - scores[i] += d2.gra[heads[i]][i][cmi][lid]; - scores[i] += d2.gra[heads[i]][i][cmo][lid]; - } - return v; - } - - public static int rightmostRight(short[] heads, int head, int max) { - int rightmost = -1; - for (int i = head + 1; i < max; i++) - if (heads[i] == head) - rightmost = i; - - return rightmost; - } - - public static int leftmostLeft(short[] heads, int head, int min) { - int leftmost = -1; - for (int i = head - 1; i > min; i--) - if (heads[i] == head) - leftmost = i; - return leftmost; - } - - public static final String REL = "REL", END = "END", STR = "STR", LA = "LA", RA = "RA"; - - private static int ra, la; - private static int s_str; - private static int s_end, _cend, _cstr, s_stwrd, s_relend; - - protected static final String TYPE = "TYPE", DIR = "D"; - public static final String POS = "POS"; - protected static final String DIST = "DIST", MID = "MID"; - - private static final String _0 = "0", _4 = "4", _3 = "3", _2 = "2", _1 = "1", _5 = "5", _10 = "10"; - - private static final String WORD = "WORD", STWRD = "STWRD", STPOS = "STPOS"; - - private static int nofeat; - - public static int maxForm; - - /** - * Initialize the features. - * - * @param maxFeatures - */ - static public void initFeatures() { - - MFO mf = new MFO(); - mf.register(POS, MID); - s_str = mf.register(POS, STR); - s_end = mf.register(POS, END); - - s_relend = mf.register(REL, END); - - _cstr = mf.register(Cluster.SPATH, STR); - _cend = mf.register(Cluster.SPATH, END); - - mf.register(TYPE, POS); - - s_stwrd = mf.register(WORD, STWRD); - mf.register(POS, STPOS); - - la = mf.register(DIR, LA); - ra = mf.register(DIR, RA); - - // mf.register(TYPE, CHAR); - - mf.register(TYPE, PipeGen.FEAT); - nofeat = mf.register(PipeGen.FEAT, "NOFEAT"); - - for (int k = 0; k < 150; k++) - mf.register(TYPE, "F" + k); - - mf.register(DIST, _0); - mf.register(DIST, _1); - mf.register(DIST, _2); - mf.register(DIST, _3); - mf.register(DIST, _4); - mf.register(DIST, _5); - mf.register(DIST, _10); - - } - -} diff --git a/dependencyParser/mate-tools/src/is2/parser/MFO.java b/dependencyParser/mate-tools/src/is2/parser/MFO.java deleted file mode 100755 index 5a2de73..0000000 --- a/dependencyParser/mate-tools/src/is2/parser/MFO.java +++ /dev/null @@ -1,267 +0,0 @@ -package is2.parser; - -import java.io.DataInputStream; -import java.io.DataOutputStream; -import java.io.IOException; -import java.util.HashMap; -import java.util.Map.Entry; -import is2.data.IEncoderPlus; -import is2.util.DB; - -/** - * Map Features, do not map long to integer - * - * @author Bernd Bohnet, 20.09.2009 - */ - -final public class MFO implements IEncoderPlus { - - /** The features and its values */ - static private final HashMap<String, HashMap<String, Integer>> m_featureSets = new HashMap<String, HashMap<String, Integer>>(); - - /** The feature class and the number of values */ - static private final HashMap<String, Integer> m_featureCounters = new HashMap<String, Integer>(); - - /** The number of bits needed to encode a feature */ - static final HashMap<String, Integer> m_featureBits = new HashMap<String, Integer>(); - - /** Integer counter for long2int */ - static private int count = 0; - - /** Stop growing */ - public boolean stop = false; - - final public static String NONE = "<None>"; - - public MFO() { - } - - public int size() { - return count; - } - - /** - * Register an attribute class, if it not exists and add a possible value - * - * @param type - * @param type2 - */ - @Override - final public int register(String a, String v) { - - HashMap<String, Integer> fs = getFeatureSet().get(a); - if (fs == null) { - fs = new HashMap<String, Integer>(); - getFeatureSet().put(a, fs); - fs.put(NONE, 0); - getFeatureCounter().put(a, 1); - } - Integer c = getFeatureCounter().get(a); - - Integer i = fs.get(v); - if (i == null) { - fs.put(v, c); - c++; - getFeatureCounter().put(a, c); - return c - 1; - } else - return i; - } - - /** - * Calculates the number of bits needed to encode a feature - */ - public void calculateBits() { - - for (Entry<String, Integer> e : getFeatureCounter().entrySet()) { - int bits = (int) Math.ceil((Math.log(e.getValue() + 1) / Math.log(2))); - m_featureBits.put(e.getKey(), bits); - } - - // System.out.println("total number of needed bits "+total); - } - - @Override - public String toString() { - - StringBuffer content = new StringBuffer(); - for (Entry<String, Integer> e : getFeatureCounter().entrySet()) { - content.append(e.getKey() + " " + e.getValue()); - content.append(':'); - // HashMap<String,Integer> vs = getFeatureSet().get(e.getKey()); - content.append(getFeatureBits(e.getKey())); - - /* - * if (vs.size()<120) for(Entry<String,Integer> e2 : vs.entrySet()) - * { content.append(e2.getKey()+" ("+e2.getValue()+") "); } - */ - content.append('\n'); - - } - return content.toString(); - } - - static final public short getFeatureBits(String a) { - if (m_featureBits.get(a) == null) - return 0; - return (short) m_featureBits.get(a).intValue(); - } - - /** - * Get the integer place holder of the string value v of the type a - * - * @param t - * the type - * @param v - * the value - * @return the integer place holder of v - */ - @Override - final public int getValue(String t, String v) { - - if (m_featureSets.get(t) == null) - return -1; - Integer vi = m_featureSets.get(t).get(v); - if (vi == null) - return -1; // stop && - return vi.intValue(); - } - - /** - * Static version of getValue - * - * @see getValue - */ - static final public int getValueS(String a, String v) { - - if (m_featureSets.get(a) == null) - return -1; - Integer vi = m_featureSets.get(a).get(v); - if (vi == null) - return -1; // stop && - return vi.intValue(); - } - - public int hasValue(String a, String v) { - - Integer vi = m_featureSets.get(a).get(v); - if (vi == null) - return -1; - return vi.intValue(); - } - - public static String printBits(int k) { - StringBuffer s = new StringBuffer(); - for (int i = 0; i < 31; i++) { - s.append((k & 0x00000001) == 1 ? '1' : '0'); - k = k >> 1; - - } - s.reverse(); - return s.toString(); - } - - /** - * Maps a long to a integer value. This is very useful to save memory for - * sparse data long values - * - * @param l - * @return the integer - */ - static public int misses = 0; - static public int good = 0; - - /** - * Write the data - * - * @param dos - * @throws IOException - */ - static public void writeData(DataOutputStream dos) throws IOException { - dos.writeInt(getFeatureSet().size()); - // DB.println("write"+getFeatureSet().size()); - for (Entry<String, HashMap<String, Integer>> e : getFeatureSet().entrySet()) { - dos.writeUTF(e.getKey()); - dos.writeInt(e.getValue().size()); - - for (Entry<String, Integer> e2 : e.getValue().entrySet()) { - - if (e2.getKey() == null) - DB.println("key " + e2.getKey() + " value " + e2.getValue() + " e -key " + e.getKey()); - dos.writeUTF(e2.getKey()); - dos.writeInt(e2.getValue()); - - } - - } - } - - public void read(DataInputStream din) throws IOException { - - int size = din.readInt(); - for (int i = 0; i < size; i++) { - String k = din.readUTF(); - int size2 = din.readInt(); - - HashMap<String, Integer> h = new HashMap<String, Integer>(); - getFeatureSet().put(k, h); - for (int j = 0; j < size2; j++) { - h.put(din.readUTF(), din.readInt()); - } - getFeatureCounter().put(k, size2); - } - - count = size; - // stop(); - calculateBits(); - } - - /** - * Clear the data - */ - static public void clearData() { - getFeatureSet().clear(); - m_featureBits.clear(); - getFeatureSet().clear(); - } - - @Override - public HashMap<String, Integer> getFeatureCounter() { - return m_featureCounters; - } - - static public HashMap<String, HashMap<String, Integer>> getFeatureSet() { - return m_featureSets; - } - - static public String[] reverse(HashMap<String, Integer> v) { - String[] set = new String[v.size()]; - for (Entry<String, Integer> e : v.entrySet()) { - set[e.getValue()] = e.getKey(); - } - return set; - } - - private static <K, V> String mapToString(HashMap<K, V> m) { - int counter = 0; - StringBuilder s = new StringBuilder(); - for(K k: m.keySet()) { - s.append(", " + k + ": " + m.get(k)); - ++counter; - if(counter == Parser.maxPrint) break; - } - if(s.length() < 3) return "{}"; - else if(counter == Parser.maxPrint) return "{" + s.substring(2) + ",...} (exceeds maximum print length)"; - else return "{" + s.substring(2) + "}"; - } - - @Override - public void print() { - for(String s: m_featureSets.keySet()) - System.out.println("m_featureSets[" + s + "] = " + mapToString(m_featureSets.get(s))); - System.out.println("m_featureCounters = " + mapToString(m_featureCounters)); - System.out.println("m_featureBits = " + mapToString(m_featureBits)); - System.out.println("count = " + count); - System.out.println("stop = " + stop); - } -} diff --git a/dependencyParser/mate-tools/src/is2/parser/Open.java b/dependencyParser/mate-tools/src/is2/parser/Open.java deleted file mode 100755 index 2f68e07..0000000 --- a/dependencyParser/mate-tools/src/is2/parser/Open.java +++ /dev/null @@ -1,40 +0,0 @@ -package is2.parser; - -import is2.data.Parse; - -final public class Open { - - public float p; - short s, e, label; - byte dir; - - Closed left; - Closed right; - - public Open(short s, short t, short dir, short label, Closed left, Closed right, float p) { - this.s = s; - this.e = t; - this.label = label; - this.dir = (byte) dir; - this.left = left; - this.right = right; - this.p = p; - } - - void create(Parse parse) { - if (dir == 0) { - parse.heads[s] = e; - if (label != -1) - parse.labels[s] = label; - } else { - parse.heads[e] = s; - if (label != -1) - parse.labels[e] = label; - } - if (left != null) - left.create(parse); - if (right != null) - right.create(parse); - } - -} diff --git a/dependencyParser/mate-tools/src/is2/parser/Options.java b/dependencyParser/mate-tools/src/is2/parser/Options.java deleted file mode 100755 index bd550ec..0000000 --- a/dependencyParser/mate-tools/src/is2/parser/Options.java +++ /dev/null @@ -1,70 +0,0 @@ -package is2.parser; - -import is2.util.OptionsSuper; - -public final class Options extends OptionsSuper { - - public Options(String[] args) { - - for (int i = 0; i < args.length; i++) { - - if (args[i].equals("--help")) - explain(); - - if (args[i].equals("-decode")) { - decodeProjective = args[i + 1].equals("proj"); - i++; - } else if (args[i].equals("-decodeTH")) { - decodeTH = Double.parseDouble(args[i + 1]); - i++; - } else if (args[i].equals("-nonormalize")) { - normalize = false; - } else if (args[i].equals("-features")) { - features = args[i + 1]; - i++; - } else if (args[i].equals("-hsize")) { - hsize = Integer.parseInt(args[i + 1]); - i++; - } else if (args[i].equals("-len")) { - maxLen = Integer.parseInt(args[i + 1]); - i++; - } else if (args[i].equals("-cores")) { - cores = Integer.parseInt(args[i + 1]); - i++; - } else if (args[i].equals("-no2nd")) { - no2nd = true; - } else if (args[i].equals("-few2nd")) { - few2nd = true; - } else - super.addOption(args, i); - - } - - } - - private void explain() { - System.out.println("Usage: "); - System.out.println("java -class mate.jar is2.parser.Parser [Options]"); - System.out.println(); - System.out.println("Example: "); - System.out.println( - " java -class mate.jar is2.parser.Parser -model eps3.model -train corpora/conll08st/train/train.closed -test corpora/conll08st/devel/devel.closed -out b3.test -eval corpora/conll08st/devel/devel.closed -count 2000 -i 6"); - System.out.println(""); - System.out.println("Options:"); - System.out.println(""); - System.out.println(" -train <file> the corpus a model is trained on; default " + this.trainfile); - System.out.println(" -test <file> the input corpus for testing; default " + this.testfile); - System.out.println(" -out <file> the output corpus (result) of a test run; default " + this.outfile); - System.out.println(" -model <file> the parsing model for traing the model is stored in the files"); - System.out.println( - " and for parsing the model is load from this file; default " + this.modelName); - System.out.println( - " -i <number> the number of training iterations; good numbers are 10 for smaller corpora and 6 for bigger; default " - + this.numIters); - System.out.println(" -count <number> the n first sentences of the corpus are take for the training default " - + this.count); - System.out.println(" -format <number> conll format of the year 8 or 9; default " + this.formatTask); - - System.exit(0); - } -} diff --git a/dependencyParser/mate-tools/src/is2/parser/ParallelDecoder.java b/dependencyParser/mate-tools/src/is2/parser/ParallelDecoder.java deleted file mode 100755 index ca508fd..0000000 --- a/dependencyParser/mate-tools/src/is2/parser/ParallelDecoder.java +++ /dev/null @@ -1,194 +0,0 @@ -package is2.parser; - -import java.util.ArrayList; -import java.util.concurrent.Callable; - -import is2.data.DataFES; - -/** - * @author Bernd Bohnet, 30.08.2009 - * - * This class implements a parallel feature extractor. - */ -final public class ParallelDecoder implements Callable<Object> { - // some constants - private static final float INIT_BEST = (-1.0F / 0.0F); - private static final boolean[] DIR = { false, true }; - - // the data space of the weights for a dependency tree - final private DataFES x; - - private short[] pos; - - private Open O[][][][]; - private Closed C[][][][]; - - private int length; - - boolean done = false; - public boolean waiting = false; - - /** - * Initialize the parallel decoder. - * - * @param pos - * part-of-speech - * @param d - * data - * @param edges - * part-of-speech edge mapping - * @param o - * open spans - * @param c - * closed spans - * @param length - * number of words - */ - public ParallelDecoder(short[] pos, DataFES d, Open o[][][][], Closed c[][][][], int length) { - - this.pos = pos; - this.x = d; - - this.O = o; - this.C = c; - this.length = length; - } - - private static class DSet { - short w1, w2; - } - - @Override - public Object call() { - - try { - - while (true) { - - DSet set = get(); - // if (done && set==null) break; - - if (set == null) - return null; - - short s = set.w1, t = set.w2; - - for (short dir = 0; dir < 2; dir++) { - - short[] labs = (dir == 1) ? Edges.get(pos[s], pos[t]) : Edges.get(pos[t], pos[s]); - - O[s][t][dir] = new Open[labs.length]; - - for (int l = 0; l < labs.length; l++) { - - double tRP = INIT_BEST; - - Closed tL = null, tR = null; - - for (int r = s; r < t; r++) { - - if (s == 0 && r != 0) - continue; - - double tLPr = INIT_BEST, tRPr = INIT_BEST; - Closed tLCld = null, tRCld = null; - - if (r == s) - tLPr = dir == 1 ? x.sib[s][t][s][l] : x.gra[t][s][s][l]; - else - for (int i = s + 1; i <= r; i++) - if (((dir == 1 ? x.sib[s][t][i][l] : x.gra[t][s][i][l]) + C[s][r][1][i].p) > tLPr) { - tLPr = ((dir == 1 ? x.sib[s][t][i][l] : x.gra[t][s][i][l]) + C[s][r][1][i].p); - tLCld = C[s][r][1][i]; - } - - if (r == t - 1) - tRPr = dir == 1 ? x.gra[s][t][s][l] : x.sib[t][s][s][l]; - else - for (int i = r + 1; i < t; i++) - if (((dir == 1 ? x.gra[s][t][i][l] : x.sib[t][s][i][l]) - + C[r + 1][t][0][i].p) > tRPr) { - tRPr = ((dir == 1 ? x.gra[s][t][i][l] : x.sib[t][s][i][l]) - + C[r + 1][t][0][i].p); - tRCld = C[r + 1][t][0][i]; - } - - if (tLPr + tRPr > tRP) { - tRP = tLPr + tRPr; - tL = tLCld; - tR = tRCld; - } - } - O[s][t][dir][l] = new Open(s, t, dir, labs[l], tL, tR, - (float) (tRP + ((dir == 1) ? x.pl[s][t] : x.pl[t][s]) - + ((dir == 1) ? x.lab[s][t][labs[l]] : x.lab[t][s][labs[l]]))); - } - } - C[s][t][1] = new Closed[length]; - C[s][t][0] = new Closed[length]; - - for (int m = s; m <= t; m++) { - for (boolean d : DIR) { - if ((d && m != s) || !d && (m != t && s != 0)) { - - // create closed structure - - double top = INIT_BEST; - - Open tU = null; - Closed tL = null; - int numLabels = O[(d ? s : m)][(d ? m : t)][d ? 1 : 0].length; - - // for (int l = numLabels-1; l >=0; l--) { - for (int l = 0; l < numLabels; l++) { - - Open hi = O[(d ? s : m)][(d ? m : t)][d ? 1 : 0][l]; - for (int amb = m + (d ? 1 : -1); amb != (d ? t : s) - + (d ? 1 : -1); amb += (d ? 1 : -1)) { - - if ((hi.p + C[d ? m : s][d ? t : m][d ? 1 : 0][amb].p - + x.gra[d ? s : t][m][amb][l]) > top) { - top = (hi.p + C[d ? m : s][d ? t : m][d ? 1 : 0][amb].p - + x.gra[d ? s : t][m][amb][l]); - tU = hi; - tL = C[d ? m : s][d ? t : m][d ? 1 : 0][amb]; - } - - } - - if ((m == (d ? t : s)) && (hi.p + x.gra[d ? s : t][d ? t : s][m][l]) > top) { - top = (hi.p + x.gra[d ? s : t][d ? t : s][m][l]); - tU = hi; - tL = null; - } - } - C[s][t][d ? 1 : 0][m] = new Closed(s, t, m, d ? 1 : 0, tU, tL, (float) top); - - } - } - } - } - } catch (Exception e) { - e.printStackTrace(); - System.exit(0); - } - return null; - } - - public static ArrayList<DSet> sets = new ArrayList<DSet>(); - - static synchronized private DSet get() { - synchronized (sets) { - if (sets.size() == 0) - return null; - return sets.remove(sets.size() - 1); - } - } - - public static void add(short w1, short w2) { - DSet ds = new DSet(); - ds.w1 = w1; - ds.w2 = w2; - sets.add(ds); - } -} diff --git a/dependencyParser/mate-tools/src/is2/parser/ParallelExtract.java b/dependencyParser/mate-tools/src/is2/parser/ParallelExtract.java deleted file mode 100755 index ca85711..0000000 --- a/dependencyParser/mate-tools/src/is2/parser/ParallelExtract.java +++ /dev/null @@ -1,248 +0,0 @@ -package is2.parser; - -import java.util.ArrayList; -import java.util.concurrent.Callable; - -import is2.data.Cluster; -import is2.data.DataFES; -import is2.data.F2SF; -import is2.data.Instances; -import is2.data.Long2IntInterface; - -/** - * @author Bernd Bohnet, 30.08.2009 - * - * This class implements a parallel feature extractor. - */ -final public class ParallelExtract implements Callable<Object> { - // the data space of the weights for a dependency tree - final DataFES d; - - // the data extractor does the actual work - final Extractor extractor; - - private Instances is; - private int i; - - private F2SF para; - - private Cluster cluster; - - public ParallelExtract(Extractor e, Instances is, int i, DataFES d, F2SF para, Cluster cluster) { - - this.is = is; - extractor = e; - this.d = d; - this.i = i; - this.para = para; - this.cluster = cluster; - } - - public static class DSet { - int w1, w2; - } - - @Override - public Object call() { - - try { - - F2SF f = para; - - short[] pos = is.pposs[i]; - int length = pos.length; - - long[] gvs = new long[50]; - long[] svs = new long[220]; - - while (true) { - - DSet set = get(); - if (set == null) - break; - - int w1 = set.w1; - int w2 = set.w2; - - f.clear(); - extractor.basic(pos, w1, w2, f); - d.pl[w1][w2] = f.getScoreF(); - - f.clear(); - - extractor.basic(pos, w2, w1, f); - d.pl[w2][w1] = f.getScoreF(); - - short[] labels = Edges.get(pos[w1], pos[w2]); - float[] lab = d.lab[w1][w2]; - - final Long2IntInterface li = extractor.li; - - int c = extractor.firstm(is, i, w1, w2, 0, cluster, svs); - - for (int l = 0; l < lab.length; l++) - lab[l] = -100; - - for (short label2 : labels) { - short label = label2; - - f.clear(); - int lv = extractor.d0.computeLabeValue(label, Extractor.s_type); - for (int k = 0; k < c; k++) - if (svs[k] > 0) - f.add(li.l2i(svs[k] + lv)); - - lab[label] = f.getScoreF(); - } - - labels = Edges.get(pos[w2], pos[w1]); - lab = d.lab[w2][w1]; - - for (int l = 0; l < lab.length; l++) - lab[l] = -100; - - for (short label2 : labels) { - int label = label2; - - f.clear(); - int lv = extractor.d0.computeLabeValue(label + Extractor.s_rel1, Extractor.s_type); - for (int k = 0; k < c; k++) - if (svs[k] > 0) - f.add(li.l2i(svs[k] + lv)); - - lab[label] = f.getScoreF(); - } - - int s = w1 < w2 ? w1 : w2; - int e = w1 < w2 ? w2 : w1; - - for (int m = 0; m < length; m++) { - - int g = (m == s || e == m) ? -1 : m; - - int cn = extractor.second(is, i, w1, w2, g, 0, cluster, svs); - int cc = extractor.addClusterFeatures(is, i, w1, w2, g, cluster, 0, gvs, 0); - // for(int k=0;k<c;k++) dl1.map(f,svs[k]); - - if (m >= w1) { - labels = Edges.get(pos[w1], pos[w2]); - float[] lab2 = new float[labels.length]; - for (int l = 0; l < labels.length; l++) { - - short label = labels[l]; - - int lx = label + Extractor.s_rel1 * (g < w2 ? 0 : 2); - - f.clear(); - int lv = extractor.d0.computeLabeValue(lx, Extractor.s_type); - for (int k = 0; k < cn; k++) - if (svs[k] > 0) - f.add(li.l2i(svs[k] + lv)); - for (int k = 0; k < cc; k++) - if (gvs[k] > 0) - f.add(li.l2i(gvs[k] + lv)); - - lab2[l] = f.getScoreF(); - } - d.gra[w1][w2][m] = lab2; - } - - if (m <= w2) { - labels = Edges.get(pos[w2], pos[w1]); - float lab2[]; - d.gra[w2][w1][m] = lab2 = new float[labels.length]; - for (int l = 0; l < labels.length; l++) { - - int label = labels[l]; - int lx = label + Extractor.s_rel1 * (1 + (g < w1 ? 0 : 2)); - - f.clear(); - int lv = extractor.d0.computeLabeValue(lx, Extractor.s_type); - for (int k = 0; k < cn; k++) - if (svs[k] > 0) - f.add(li.l2i(svs[k] + lv)); - for (int k = 0; k < cc; k++) - if (gvs[k] > 0) - f.add(li.l2i(gvs[k] + lv)); - - lab2[l] = f.getScoreF(); - - } - } - - g = (m == s || e == m) ? -1 : m; - - // int cn = extractor.second(is,i,w1,w2,g,0, cluster, - // svs,Extractor._SIB); - if (m >= w1 && m <= w2) { - labels = Edges.get(pos[w1], pos[w2]); - float lab2[] = new float[labels.length]; - d.sib[w1][w2][m] = lab2; - - for (int l = 0; l < labels.length; l++) { - - short label = labels[l]; - - int lx = label + Extractor.s_rel1 * (8); - f.clear(); - int lv = extractor.d0.computeLabeValue(lx, Extractor.s_type); - for (int k = 0; k < cn; k++) - if (svs[k] > 0) - f.add(li.l2i(svs[k] + lv)); - for (int k = 0; k < cc; k++) - if (gvs[k] > 0) - f.add(li.l2i(gvs[k] + lv)); - - lab2[l] = f.score;// f.getScoreF(); - } - } - if (m >= w1 && m <= w2) { - labels = Edges.get(pos[w2], pos[w1]); - float[] lab2 = new float[labels.length]; - d.sib[w2][w1][m] = lab2; - for (int l = 0; l < labels.length; l++) { - - int label = labels[l]; - - int lx = label + Extractor.s_rel1 * (9); - - f.clear(); - int lv = extractor.d0.computeLabeValue(lx, Extractor.s_type); - for (int k = 0; k < cn; k++) - if (svs[k] > 0) - f.add(li.l2i(svs[k] + lv)); - for (int k = 0; k < cc; k++) - if (gvs[k] > 0) - f.add(li.l2i(gvs[k] + lv)); - - lab2[l] = f.score;// f.getScoreF(); - } - } - } - } - - } catch (Exception e) { - e.printStackTrace(); - } - return null; - } - - static ArrayList<DSet> sets = new ArrayList<DSet>(); - - private DSet get() { - - synchronized (sets) { - if (sets.size() == 0) - return null; - return sets.remove(sets.size() - 1); - } - } - - static public void add(int w1, int w2) { - DSet ds = new DSet(); - ds.w1 = w1; - ds.w2 = w2; - sets.add(ds); - } - -} diff --git a/dependencyParser/mate-tools/src/is2/parser/ParallelRearrange.java b/dependencyParser/mate-tools/src/is2/parser/ParallelRearrange.java deleted file mode 100755 index 83dcdaa..0000000 --- a/dependencyParser/mate-tools/src/is2/parser/ParallelRearrange.java +++ /dev/null @@ -1,146 +0,0 @@ -package is2.parser; - -import java.util.ArrayList; -import java.util.concurrent.Callable; - -import is2.data.DataFES; - -/** - * @author Dr. Bernd Bohnet, 30.08.2009 - * - * This class implements a parallel edge rearrangement for - * non-projective parsing; The linear method was first suggest by Rayn - * McDonald et. al. 2005. - */ -final public class ParallelRearrange implements Callable<Object> { - - // new parent child combination to explore - final static class PA { - final float p; - final short ch, pa; - public float max; - public short wh; - public short nPar; - public short nType; - - public PA(float p2, short ch2, short pa2) { - p = p2; - ch = ch2; - pa = pa2; - } - } - - // list of parent child combinations - static ArrayList<PA> parents = new ArrayList<PA>(); - static ArrayList<PA> order = new ArrayList<PA>(); - // best new parent child combination, found so far - public float max; - - // some data from the dependency tree - // private EdgesC edges; - private short[] pos; - private DataFES x; - private boolean[][] isChild; - public short[] heads, types; - - // child, new parent, new label - public short wh, nPar, nType; - - /** - * Initialize the parallel rearrange thread - * - * @param isChild2 - * is a child - * @param edgesC - * the part-of-speech edge mapping - * @param pos - * the part-of-speech - * @param x - * the data - * @param s - * the heads - * @param ts - * the types - */ - public ParallelRearrange(boolean[][] isChild2, short[] pos, DataFES x, short[] s, short[] ts) { - - heads = new short[s.length]; - System.arraycopy(s, 0, heads, 0, s.length); - - types = new short[ts.length]; - System.arraycopy(ts, 0, types, 0, ts.length); - - isChild = isChild2; - // edges = edgesC; - this.pos = pos; - this.x = x; - } - - @Override - public Object call() { - - // check the list of new possible parents and children for a better - // combination - while (true) { - PA px = getPA(); - if (px == null) - break; - - float max = 0; - short pa = px.pa, ch = px.ch; - - if (ch == pa || pa == heads[ch] || isChild[ch][pa]) - continue; - - short oldP = heads[ch], oldT = types[ch]; - - heads[ch] = pa; - - short[] labels = Edges.get(pos[pa], pos[ch]); - - for (short label : labels) { - - types[ch] = label; - - float p_new = Extractor.encode3(pos, heads, types, x); - - if (max < p_new - px.p) { - max = p_new - px.p; - wh = ch; - nPar = pa; - nType = label; - px.max = max; - px.wh = ch; - px.nPar = pa; - px.nType = label; - } - } - heads[ch] = oldP; - types[ch] = oldT; - } - return null; - } - - /** - * Add a child-parent combination which are latter explored for - * rearrangement - * - * @param p2 - * @param ch2 - * @param pa - */ - static public void add(float p2, short ch2, short pa) { - PA px = new PA(p2, ch2, pa); - parents.add(px); - order.add(px); - } - - static private PA getPA() { - synchronized (parents) { - if (parents.size() == 0) - return null; - return parents.remove(parents.size() - 1); - } - } - -} diff --git a/dependencyParser/mate-tools/src/is2/parser/Parameters.java b/dependencyParser/mate-tools/src/is2/parser/Parameters.java deleted file mode 100755 index baba7b6..0000000 --- a/dependencyParser/mate-tools/src/is2/parser/Parameters.java +++ /dev/null @@ -1,37 +0,0 @@ -/** - * - */ -package is2.parser; - -import java.io.DataInputStream; -import java.io.DataOutputStream; -import java.io.IOException; - -import is2.data.FV; -import is2.data.IFV; -import is2.data.Instances; -import is2.data.Parse; - -/** - * @author Bernd Bohnet, 31.08.2009 - * - * - */ -public abstract class Parameters { - - public abstract void average(double avVal); - - public abstract void update(FV act, FV pred, Instances isd, int instc, Parse d, double upd, double e); - - public abstract void write(DataOutputStream dos) throws IOException; - - public abstract void read(DataInputStream dis) throws IOException; - - public abstract int size(); - - /** - * @return - */ - public abstract IFV getFV(); - -} diff --git a/dependencyParser/mate-tools/src/is2/parser/ParametersFloat.java b/dependencyParser/mate-tools/src/is2/parser/ParametersFloat.java deleted file mode 100755 index faf795d..0000000 --- a/dependencyParser/mate-tools/src/is2/parser/ParametersFloat.java +++ /dev/null @@ -1,138 +0,0 @@ -package is2.parser; - -import java.io.DataInputStream; -import java.io.DataOutputStream; -import java.io.IOException; - -import is2.data.F2SF; -import is2.data.FV; -import is2.data.Instances; -import is2.data.Parse; -import is2.util.DB; - -final public class ParametersFloat extends Parameters { - - public float[] parameters; - public float[] total; - - public ParametersFloat(int size) { - parameters = new float[size]; - total = new float[size]; - for (int i = 0; i < parameters.length; i++) { - parameters[i] = 0F; - total[i] = 0F; - } - } - - /** - * @param parameters2 - */ - public ParametersFloat(float[] p) { - parameters = p; - } - - @Override - public void average(double avVal) { - for (int j = 0; j < total.length; j++) { - parameters[j] = total[j] / ((float) avVal); - } - total = null; - } - - public ParametersFloat average2(double avVal) { - float[] px = new float[this.parameters.length]; - for (int j = 0; j < total.length; j++) { - px[j] = total[j] / ((float) avVal); - } - ParametersFloat pf = new ParametersFloat(px); - return pf; - } - - @Override - public void update(FV act, FV pred, Instances isd, int instc, Parse d, double upd, double e) { - - e++; - - float lam_dist = getScore(act) - getScore(pred); - - float b = (float) e - lam_dist; - - FV dist = act.getDistVector(pred); - - dist.update(parameters, total, hildreth(dist, b), upd, false); - } - - protected double hildreth(FV a, double b) { - - double A = a.dotProduct(a); - if (A <= 0.0000000000000000001) - return 0.0; - return b / A; - } - - public float getScore(FV fv) { - if (fv == null) - return 0.0F; - return fv.getScore(parameters, false); - - } - - @Override - final public void write(DataOutputStream dos) throws IOException { - - dos.writeInt(parameters.length); - for (float d : parameters) - dos.writeFloat(d); - - } - - @Override - public void read(DataInputStream dis) throws IOException { - - parameters = new float[dis.readInt()]; - int notZero = 0; - for (int i = 0; i < parameters.length; i++) { - parameters[i] = dis.readFloat(); - if (parameters[i] != 0.0F) - notZero++; - } - - DB.println("read parameters " + parameters.length + " not zero " + notZero); - - } - - public int countNZ() { - - int notZero = 0; - for (float parameter : parameters) { - if (parameter != 0.0F) - notZero++; - } - return notZero; - - // DB.println("read parameters "+parameters.length+" not zero - // "+notZero); - - } - - /* - * (non-Javadoc) - * - * @see is2.sp09k99995.Parameters#getFV() - */ - @Override - public F2SF getFV() { - return new F2SF(parameters); - } - - /* - * (non-Javadoc) - * - * @see is2.sp09k99999.Parameters#size() - */ - @Override - public int size() { - return parameters.length; - } - -} diff --git a/dependencyParser/mate-tools/src/is2/parser/Parser.java b/dependencyParser/mate-tools/src/is2/parser/Parser.java deleted file mode 100755 index b361d69..0000000 --- a/dependencyParser/mate-tools/src/is2/parser/Parser.java +++ /dev/null @@ -1,789 +0,0 @@ -package is2.parser; - -import java.io.BufferedInputStream; -import java.io.BufferedOutputStream; -import java.io.DataInputStream; -import java.io.DataOutputStream; -import java.io.FileInputStream; -import java.io.FileNotFoundException; -import java.io.FileOutputStream; -import java.io.IOException; -import java.text.SimpleDateFormat; -import java.util.Date; -import java.util.Map.Entry; -import java.util.zip.ZipEntry; -import java.util.zip.ZipInputStream; -import java.util.zip.ZipOutputStream; - -import is2.data.Cluster; -import is2.data.DataFES; -import is2.data.F2SF; -import is2.data.FV; -import is2.data.Instances; -import is2.data.Long2Int; -import is2.data.Long2IntInterface; -import is2.data.Parse; -import is2.data.PipeGen; -import is2.data.SentenceData09; -import is2.io.CONLLReader09; -import is2.io.CONLLWriter09; -import is2.tools.Retrainable; -import is2.tools.Tool; -import is2.util.DB; -import is2.util.OptionsSuper; -import is2.util.ParserEvaluator; - -public class Parser implements Tool, Retrainable { - - // output evaluation info - private static final boolean MAX_INFO = true; - - public static int THREADS = 4; - public static int maxPrint = 1024; - - public Long2IntInterface l2i; - public ParametersFloat params; - public Pipe pipe; - public OptionsSuper options; - - // keep some of the parsing information for later evaluation - public Instances is; - DataFES d2; - public Parse d = null; - - /** - * Initialize the parser - * - * @param options - */ - public Parser(OptionsSuper options) { - - this.options = options; - pipe = new Pipe(options); - - params = new ParametersFloat(0); - - // load the model - try { - readModel(options, pipe, params); - } catch (Exception e) { - e.printStackTrace(); - } - - } - - /** - * @param modelFileName - * The file name of the parsing model - */ - public Parser(String modelFileName) { - this(new Options(new String[] { "-model", modelFileName })); - } - - /** - * - */ - public Parser() { - // TODO Auto-generated constructor stub - } - - public static void main(String[] args) throws Exception { - long start = System.currentTimeMillis(); - OptionsSuper options = new Options(args); - - Runtime runtime = Runtime.getRuntime(); - THREADS = runtime.availableProcessors(); - if (options.cores < THREADS && options.cores > 0) - THREADS = options.cores; - DB.println("Found " + runtime.availableProcessors() + " cores use " + THREADS); - - if (options.train) { - - Parser p = new Parser(); - p.options = options; - - p.l2i = new Long2Int(options.hsize); - - p.pipe = new Pipe(options); - Instances is = new Instances(); - - Extractor.initFeatures(); - p.pipe.extractor = new Extractor[THREADS]; - DB.println("hsize " + options.hsize); - - DB.println("Use " + (options.featureCreation == OptionsSuper.MULTIPLICATIVE ? "multiplication" : "shift") - + "-based feature creation function"); - for (int t = 0; t < THREADS; t++) - p.pipe.extractor[t] = new Extractor(p.l2i, options.stack, options.featureCreation); - - DB.println("Stacking " + options.stack); - - p.pipe.createInstances(options.trainfile, is); - - p.params = new ParametersFloat(p.l2i.size()); - - p.train(options, p.pipe, p.params, is, p.pipe.cl); - - p.writeModell(options, p.params, null, p.pipe.cl); - - } - - if (options.test) { - // Parser p = new Parser(); - Parser p = new Parser(options); - - // p. pipe = new Pipe(options); - // p. params = new ParametersFloat(0); // total should be zero and - // the parameters are later read - - // load the model - - // p.readModel(options, p.pipe, p.params); - - DB.println("label only? " + options.label); - - p.outAll(options, p.pipe, p.params, !MAX_INFO, options.label); - } - - System.out.println(); - - if (options.eval) { - System.out.println("\nEVALUATION PERFORMANCE:"); - ParserEvaluator.evaluate(options.goldfile, options.outfile); - } - - long end = System.currentTimeMillis(); - System.out.println("used time " + ((float) ((end - start) / 100) / 10)); - - Decoder.executerService.shutdown(); - Pipe.executerService.shutdown(); - System.out.println("end."); - } - - /** - * Read the models and mapping - * - * @param options - * @param pipe - * @param params - * @throws IOException - */ - public void readModel(OptionsSuper options, Pipe pipe, Parameters params) throws IOException { - - DB.println("Reading data started"); - - // prepare zipped reader - ZipInputStream zis = new ZipInputStream(new BufferedInputStream(new FileInputStream(options.modelName))); - zis.getNextEntry(); - DataInputStream dis = new DataInputStream(new BufferedInputStream(zis)); - - pipe.mf.read(dis); - - pipe.cl = new Cluster(dis); - - params.read(dis); - this.l2i = new Long2Int(params.size()); - DB.println("parsing -- li size " + l2i.size()); - - pipe.extractor = new Extractor[THREADS]; - - boolean stack = dis.readBoolean(); - - options.featureCreation = dis.readInt(); - - for (int t = 0; t < THREADS; t++) - pipe.extractor[t] = new Extractor(l2i, stack, options.featureCreation); - DB.println("Stacking " + stack); - - Extractor.initFeatures(); - Extractor.initStat(options.featureCreation); - - for (int t = 0; t < THREADS; t++) - pipe.extractor[t].init(); - - Edges.read(dis); - - options.decodeProjective = dis.readBoolean(); - - Extractor.maxForm = dis.readInt(); - - boolean foundInfo = false; - try { - String info = null; - int icnt = dis.readInt(); - for (int i = 0; i < icnt; i++) { - info = dis.readUTF(); - System.out.println(info); - } - } catch (Exception e) { - if (!foundInfo) - System.out.println("no info about training"); - } - - dis.close(); - - DB.println("Reading data finnished"); - - Decoder.NON_PROJECTIVITY_THRESHOLD = (float) options.decodeTH; - - Extractor.initStat(options.featureCreation); - - } - - /** - * Do the training - * - * @param instanceLengths - * @param options - * @param pipe - * @param params - * @param is - * @param cluster - * @throws IOException - * @throws InterruptedException - * @throws ClassNotFoundException - */ - public void train(OptionsSuper options, Pipe pipe, ParametersFloat params, Instances is, Cluster cluster) - throws IOException, InterruptedException, ClassNotFoundException { - - DB.println("\nTraining Information "); - DB.println("-------------------- "); - - Decoder.NON_PROJECTIVITY_THRESHOLD = (float) options.decodeTH; - - if (options.decodeProjective) - System.out.println("Decoding: " + (options.decodeProjective ? "projective" : "non-projective")); - else - System.out.println("" + Decoder.getInfo()); - int numInstances = is.size(); - - int maxLenInstances = 0; - for (int i = 0; i < numInstances; i++) - if (maxLenInstances < is.length(i)) - maxLenInstances = is.length(i); - - DataFES data = new DataFES(maxLenInstances, pipe.mf.getFeatureCounter().get(PipeGen.REL).shortValue()); - - int iter = 0; - int del = 0; - float error = 0; - float f1 = 0; - - FV pred = new FV(); - FV act = new FV(); - - double upd = (double) (numInstances * options.numIters) + 1; - - for (; iter < options.numIters; iter++) { - - System.out.print("Iteration " + iter + ": "); - - long start = System.currentTimeMillis(); - - long last = System.currentTimeMillis(); - error = 0; - f1 = 0; - for (int n = 0; n < numInstances; n++) { - - upd--; - - if (is.labels[n].length > options.maxLen) - continue; - - String info = " td " + ((Decoder.timeDecotder) / 1000000F) + " tr " - + ((Decoder.timeRearrange) / 1000000F) + " te " + ((Pipe.timeExtract) / 1000000F); - - if ((n + 1) % 500 == 0) - del = PipeGen.outValueErr(n + 1, error, f1 / n, del, last, upd, info); - - short pos[] = is.pposs[n]; - - data = pipe.fillVector(params.getFV(), is, n, data, cluster); - - Parse d = Decoder.decode(pos, data, options.decodeProjective, Decoder.TRAINING); - - double e = pipe.errors(is, n, d); - - if (d.f1 > 0) - f1 += d.f1; - - if (e <= 0) - continue; - - pred.clear(); - pipe.extractor[0].encodeCat(is, n, pos, is.forms[n], is.plemmas[n], d.heads, d.labels, is.feats[n], - pipe.cl, pred); - - error += e; - - params.getFV(); - - act.clear(); - pipe.extractor[0].encodeCat(is, n, pos, is.forms[n], is.plemmas[n], is.heads[n], is.labels[n], - is.feats[n], pipe.cl, act); - - params.update(act, pred, is, n, d, upd, e); - } - - String info = " td " + ((Decoder.timeDecotder) / 1000000F) + " tr " + ((Decoder.timeRearrange) / 1000000F) - + " te " + ((Pipe.timeExtract) / 1000000F) + " nz " + params.countNZ(); - PipeGen.outValueErr(numInstances, error, f1 / numInstances, del, last, upd, info); - del = 0; - long end = System.currentTimeMillis(); - System.out.println(" time:" + (end - start)); - - ParametersFloat pf = params.average2((iter + 1) * is.size()); - try { - - if (options.testfile != null && options.goldfile != null) { - out(options, pipe, pf, !MAX_INFO, false); - ParserEvaluator.evaluate(options.goldfile, options.outfile); - // writeModell(options, pf, ""+(iter+1),pipe.cl); - } - - } catch (Exception e) { - e.printStackTrace(); - } - - if (error == 0) { - DB.println("stopped because learned all lessons"); - break; - } - - Decoder.timeDecotder = 0; - Decoder.timeRearrange = 0; - Pipe.timeExtract = 0; - - } - if (options.average) - params.average(iter * is.size()); - } - - /** - * Do the parsing job - * - * @param options - * @param pipe - * @param params - * @throws IOException - */ - private void out(OptionsSuper options, Pipe pipe, ParametersFloat params, boolean maxInfo, boolean labelOnly) - throws Exception { - - long start = System.currentTimeMillis(); - - CONLLReader09 depReader = new CONLLReader09(options.testfile, options.formatTask); - CONLLWriter09 depWriter = new CONLLWriter09(options.outfile, options.formatTask); - - int cnt = 0; - int del = 0; - long last = System.currentTimeMillis(); - - if (maxInfo) - System.out.println("\nParsing Information "); - if (maxInfo) - System.out.println("------------------- "); - - if (maxInfo && !options.decodeProjective) - System.out.println("" + Decoder.getInfo()); - - System.out.print("Processing Sentence: "); - - while (true) { - - // Instances is = new Instances(); - // is.init(1, new MFO(),options.formatTask); - - // SentenceData09 instance = pipe.nextInstance(is, depReader); - - SentenceData09 instance = depReader.getNext(); - if (instance == null) - break; - cnt++; - - SentenceData09 i09 = this.parse(instance, params, labelOnly, options); - - depWriter.write(i09); - del = PipeGen.outValue(cnt, del, last); - - } - // pipe.close(); - depWriter.finishWriting(); - long end = System.currentTimeMillis(); - // DB.println("errors "+error); - if (maxInfo) - System.out.println("Used time " + (end - start)); - if (maxInfo) - System.out.println("forms count " + Instances.m_count + " unkown " + Instances.m_unkown); - - } - - private void outAll(OptionsSuper options, Pipe pipe, ParametersFloat params, boolean maxInfo, boolean labelOnly) - throws Exception { - - long start = System.currentTimeMillis(); - - CONLLReader09 depReader = new CONLLReader09(options.testfile, options.formatTask); - CONLLWriter09 depWriter = new CONLLWriter09(options.outfile, options.formatTask); - - int cnt = 0; - int del = 0; - long last = System.currentTimeMillis(); - - if (maxInfo) - System.out.println("\nParsing Information "); - if (maxInfo) - System.out.println("------------------- "); - - if (maxInfo && !options.decodeProjective) - System.out.println("" + Decoder.getInfo()); - - System.out.print("Processing Sentence: "); - - while (true) { - - // Instances is = new Instances(); - // is.init(1, new MFO(),options.formatTask); - - // SentenceData09 instance = pipe.nextInstance(is, depReader); - - SentenceData09 instance = depReader.getNext(); - if (instance == null) - break; - cnt++; - - SentenceData09[] i09 = this.parseAll(instance, params, labelOnly, options); - - for (SentenceData09 sd : i09) - depWriter.write(sd); - del = PipeGen.outValue(cnt, del, last); - - } - // pipe.close(); - depWriter.finishWriting(); - long end = System.currentTimeMillis(); - // DB.println("errors "+error); - if (maxInfo) - System.out.println("Used time " + (end - start)); - if (maxInfo) - System.out.println("forms count " + Instances.m_count + " unkown " + Instances.m_unkown); - - } - - /** - * Parse a single sentence - * - * @param instance - * @param params - * @param labelOnly - * @param options - * @return - */ - public SentenceData09 parse(SentenceData09 instance, ParametersFloat params, boolean labelOnly, - OptionsSuper options) { - - String[] types = new String[pipe.mf.getFeatureCounter().get(PipeGen.REL)]; - for (Entry<String, Integer> e : MFO.getFeatureSet().get(PipeGen.REL).entrySet()) - types[e.getValue()] = e.getKey(); - - is = new Instances(); - is.init(1, new MFO(), options.formatTask); - new CONLLReader09().insert(is, instance); - - // use for the training ppos - - SentenceData09 i09 = new SentenceData09(instance); - i09.createSemantic(instance); - - if (labelOnly) { - F2SF f2s = params.getFV(); - - // repair pheads - - is.pheads[0] = is.heads[0]; - - for (int l = 0; l < is.pheads[0].length; l++) { - if (is.pheads[0][l] < 0) - is.pheads[0][l] = 0; - } - - short[] labels = pipe.extractor[0].searchLabel(is, 0, is.pposs[0], is.forms[0], is.plemmas[0], is.pheads[0], - is.plabels[0], is.feats[0], pipe.cl, f2s); - - for (int j = 0; j < instance.forms.length - 1; j++) { - i09.plabels[j] = types[labels[j + 1]]; - i09.pheads[j] = is.pheads[0][j + 1]; - } - return i09; - } - - if (options.maxLength > instance.length() && options.minLength <= instance.length()) { - try { - // System.out.println("prs "+instance.forms[0]); - // System.out.println("prs "+instance.toString()); - d2 = pipe.fillVector(params.getFV(), is, 0, null, pipe.cl);// cnt-1 - d = Decoder.decode(is.pposs[0], d2, options.decodeProjective, !Decoder.TRAINING); // cnt-1 - - } catch (Exception e) { - e.printStackTrace(); - } - - for (int j = 0; j < instance.forms.length - 1; j++) { - i09.plabels[j] = types[d.labels[j + 1]]; - i09.pheads[j] = d.heads[j + 1]; - } - } - return i09; - - } - - public SentenceData09[] parseAll(SentenceData09 instance, ParametersFloat params, boolean labelOnly, - OptionsSuper options) { - - String[] types = new String[pipe.mf.getFeatureCounter().get(PipeGen.REL)]; - for (Entry<String, Integer> e : MFO.getFeatureSet().get(PipeGen.REL).entrySet()) - types[e.getValue()] = e.getKey(); - - is = new Instances(); - is.init(1, new MFO(), options.formatTask); - new CONLLReader09().insert(is, instance); - - // use for the training ppos - - SentenceData09[] i09;// = new SentenceData09(instance); - // i09.createSemantic(instance); - - if (labelOnly) { - F2SF f2s = params.getFV(); - - // repair pheads - - is.pheads[0] = is.heads[0]; - - for (int l = 0; l < is.pheads[0].length; l++) { - if (is.pheads[0][l] < 0) - is.pheads[0][l] = 0; - } - - short[] labels = pipe.extractor[0].searchLabel(is, 0, is.pposs[0], is.forms[0], is.plemmas[0], is.pheads[0], - is.plabels[0], is.feats[0], pipe.cl, f2s); - - i09 = new SentenceData09[1]; - i09[0] = new SentenceData09(instance); - i09[0].createSemantic(instance); - - for (int j = 0; j < instance.forms.length - 1; j++) { - i09[0].plabels[j] = types[labels[j + 1]]; - i09[0].pheads[j] = is.pheads[0][j + 1]; - } - return i09; - } - - if (options.maxLength > instance.length() && options.minLength <= instance.length()) { - Parse[] ds = null; - - try { - // System.out.println("prs "+instance.forms[0]); - // System.out.println("prs "+instance.toString()); - d2 = pipe.fillVector(params.getFV(), is, 0, null, pipe.cl);// cnt-1 - ds = Decoder.decodeAll(is.pposs[0], d2, options.decodeProjective, !Decoder.TRAINING); // cnt-1 - - } catch (Exception e) { - e.printStackTrace(); - } - - i09 = new SentenceData09[ds.length]; - for (int i = 0; i < ds.length; ++i) { - i09[i] = new SentenceData09(instance); - i09[i].createSemantic(instance); - for (int j = 0; j < instance.forms.length - 1; j++) { - i09[i].plabels[j] = types[ds[i].labels[j + 1]]; - i09[i].pheads[j] = ds[i].heads[j + 1]; - } - } - - return i09; - } else { - i09 = new SentenceData09[1]; - i09[0] = new SentenceData09(instance); - i09[0].createSemantic(instance); - return i09; - } - - } - - is2.io.CONLLReader09 reader = new is2.io.CONLLReader09(true); - - /* - * (non-Javadoc) - * - * @see is2.tools.Tool#apply(is2.data.SentenceData09) - */ - @Override - public SentenceData09 apply(SentenceData09 snt09) { - - SentenceData09 it = new SentenceData09(); - it.createWithRoot(snt09); - - SentenceData09 out = null; - try { - - // for(int k=0;k<it.length();k++) { - // it.forms[k] = reader.normalize(it.forms[k]); - // it.plemmas[k] = reader.normalize(it.plemmas[k]); - // } - - out = parse(it, this.params, false, options); - - } catch (Exception e) { - e.printStackTrace(); - } - - Decoder.executerService.shutdown(); - Pipe.executerService.shutdown(); - - return out; - } - - /** - * Get the edge scores of the last parse. - * - * @return the scores - */ - public float[] getInfo() { - - float[] scores = new float[is.length(0)]; - Extractor.encode3(is.pposs[0], d.heads, d.labels, d2, scores); - - return scores; - } - - /** - * Write the parsing model - * - * @param options - * @param params - * @param extension - * @throws FileNotFoundException - * @throws IOException - */ - private void writeModell(OptionsSuper options, ParametersFloat params, String extension, Cluster cs) - throws FileNotFoundException, IOException { - - String name = extension == null ? options.modelName : options.modelName + extension; - // System.out.println("Writting model: "+name); - ZipOutputStream zos = new ZipOutputStream(new BufferedOutputStream(new FileOutputStream(name))); - zos.putNextEntry(new ZipEntry("data")); - DataOutputStream dos = new DataOutputStream(new BufferedOutputStream(zos)); - - MFO.writeData(dos); - cs.write(dos); - - params.write(dos); - - dos.writeBoolean(options.stack); - dos.writeInt(options.featureCreation); - - Edges.write(dos); - - dos.writeBoolean(options.decodeProjective); - - dos.writeInt(Extractor.maxForm); - - dos.writeInt(5); // Info count - dos.writeUTF("Used parser " + Parser.class.toString()); - dos.writeUTF("Creation date " + (new SimpleDateFormat("yyyy.MM.dd HH:mm:ss")).format(new Date())); - dos.writeUTF("Training data " + options.trainfile); - dos.writeUTF("Iterations " + options.numIters + " Used sentences " + options.count); - dos.writeUTF("Cluster " + options.clusterFile); - - dos.flush(); - dos.close(); - } - - @Override - public boolean retrain(SentenceData09 sentence, float upd, int iterations) { - - params.total = params.parameters; - - boolean done = false; - - for (int k = 0; k < iterations; k++) { - try { - // create the data structure - DataFES data = new DataFES(sentence.length(), - pipe.mf.getFeatureCounter().get(PipeGen.REL).shortValue()); - - Instances is = new Instances(); - is.m_encoder = pipe.mf; - - is.init(1, pipe.mf, options.formatTask); - new CONLLReader09().insert(is, sentence); - - // String list[] = - // ((MFO)is.m_encoder).reverse(((MFO)is.m_encoder).getFeatureSet().get(Pipe.POS)); - // for(String s :list) { - // System.out.println(s+" "); - // } - - // for(int i=0;i<is.length(0);i++) { - - // System.out.printf("%d\t %d\t %d - // \n",i,is.forms[0][i],is.pposs[0][i] ); - // System.out.printf("%s\t form:%s - // pos:%s\n",i,sentence.forms[i],sentence.ppos[i]); - - // } - - SentenceData09 i09 = new SentenceData09(sentence); - i09.createSemantic(sentence); - - // create the weights - data = pipe.fillVector(params.getFV(), is, 0, data, pipe.cl); - - short[] pos = is.pposs[0]; - - // parse the sentence - Parse d = Decoder.decode(pos, data, options.decodeProjective, Decoder.TRAINING); - - // training successful? - double e = pipe.errors(is, 0, d); - // System.out.println("errors "+e); - if (e == 0) { - - done = true; - break; - } - - // update the weight vector - FV pred = new FV(); - pipe.extractor[0].encodeCat(is, 0, pos, is.forms[0], is.plemmas[0], d.heads, d.labels, is.feats[0], - pipe.cl, pred); - - params.getFV(); - - FV act = new FV(); - pipe.extractor[0].encodeCat(is, 0, pos, is.forms[0], is.plemmas[0], is.heads[0], is.labels[0], - is.feats[0], pipe.cl, act); - - params.update(act, pred, is, 0, d, upd, e); - - if (upd > 0) - upd--; - - } catch (Exception e) { - e.printStackTrace(); - } - } - Decoder.executerService.shutdown(); - Pipe.executerService.shutdown(); - - return done; - } - - @Override - public boolean retrain(SentenceData09 sentence, float upd, int iterations, boolean print) { - // TODO Auto-generated method stub - return retrain(sentence, upd, iterations); - } -} \ No newline at end of file diff --git a/dependencyParser/mate-tools/src/is2/parser/Pipe.java b/dependencyParser/mate-tools/src/is2/parser/Pipe.java deleted file mode 100755 index f7f3782..0000000 --- a/dependencyParser/mate-tools/src/is2/parser/Pipe.java +++ /dev/null @@ -1,224 +0,0 @@ -package is2.parser; - -import java.io.IOException; -import java.util.ArrayList; -import java.util.concurrent.ExecutorService; - -import is2.data.Cluster; -import is2.data.DataFES; -import is2.data.F2SF; -import is2.data.Instances; -import is2.data.Parse; -import is2.data.PipeGen; -import is2.data.SentenceData09; -import is2.io.CONLLReader09; -import is2.util.OptionsSuper; - -final public class Pipe extends PipeGen { - - public Extractor[] extractor; - final public MFO mf = new MFO(); - - public Cluster cl; - - private OptionsSuper options; - public static long timeExtract; - - public Pipe(OptionsSuper o) { - options = o; - } - - public void createInstances(String file, Instances is) throws Exception { - - CONLLReader09 depReader = new CONLLReader09(file); - - mf.register(REL, "<root-type>"); - - // register at least one predicate since the parsing data might not - // contain predicates as in - // the Japaness corpus but the development sets contains some - - System.out.print("Registering feature parts of sentence: "); - int ic = 0; - int del = 0; - while (true) { - SentenceData09 instance = depReader.getNext(); - if (instance == null) - break; - ic++; - - if (ic % 1000 == 0) { - del = outValue(ic, del); - } - - String[] labs1 = instance.labels; - for (String element : labs1) - mf.register(REL, element); - - String[] w = instance.forms; - for (String element : w) - mf.register(WORD, depReader.normalize(element)); - - w = instance.plemmas; - for (String element : w) - mf.register(WORD, depReader.normalize(element)); - - w = instance.ppos; - for (String element : w) - mf.register(POS, element); - - w = instance.gpos; - for (String element : w) - mf.register(POS, element); - - if (instance.feats != null) { - String fs[][] = instance.feats; - for (String[] element : fs) { - w = element; - if (w == null) - continue; - for (String element2 : w) - mf.register(FEAT, element2); - } - } - - if ((ic - 1) > options.count) - break; - } - del = outValue(ic, del); - - System.out.println(); - Extractor.initFeatures(); - - Extractor.maxForm = mf.getFeatureCounter().get(WORD); - - if (options.clusterFile == null) - cl = new Cluster(); - else - cl = new Cluster(options.clusterFile, mf, 6); - - mf.calculateBits(); - Extractor.initStat(options.featureCreation); - - System.out.println("" + mf.toString()); - - for (Extractor e : extractor) - e.init(); - - depReader.startReading(file); - - int num1 = 0; - - is.init(ic, new MFO()); - - Edges.init(mf.getFeatureCounter().get(POS)); - - System.out.print("Creating edge filters and read corpus: "); - del = 0; - - while (true) { - if (num1 % 100 == 0) - del = outValue(num1, del); - - SentenceData09 instance1 = depReader.getNext(is); - - if (instance1 == null) - break; - - int last = is.size() - 1; - short[] pos = is.pposs[last]; - - for (int k = 0; k < is.length(last); k++) { - if (is.heads[last][k] < 0) - continue; - Edges.put(pos[is.heads[last][k]], pos[k], is.labels[last][k]); - // Edges.put(pos[k],pos[is.heads[last][k]], is.labels[last][k]); - } - - if (!options.allFeatures && num1 > options.count) - break; - - num1++; - - } - del = outValue(num1, del); - System.out.println(); - Edges.findDefault(); - } - - /** - * Creates an instance for outputParses - * - * @param is - * @return - * @throws IOException - */ - protected final SentenceData09 nextInstance(Instances is, CONLLReader09 depReader) throws Exception { - - SentenceData09 instance = depReader.getNext(is); - if (instance == null || instance.forms == null) - return null; - - return instance; - } - - public static ExecutorService executerService = java.util.concurrent.Executors.newFixedThreadPool(Parser.THREADS); - - public DataFES fillVector(F2SF params, Instances is, int inst, DataFES d, Cluster cluster) - throws InterruptedException { - - long ts = System.nanoTime(); - - if (executerService.isShutdown()) - executerService = java.util.concurrent.Executors.newCachedThreadPool(); - - final int length = is.length(inst); - if (d == null || d.len < length) - d = new DataFES(length, mf.getFeatureCounter().get(PipeGen.REL).shortValue()); - - ArrayList<ParallelExtract> pe = new ArrayList<ParallelExtract>(); - for (int i = 0; i < Parser.THREADS; i++) - pe.add(new ParallelExtract(extractor[i], is, inst, d, (F2SF) params.clone(), cluster)); - - for (int w1 = 0; w1 < length; w1++) { - for (int w2 = w1 + 1; w2 < length; w2++) { - - if (w1 == w2) - continue; - - ParallelExtract.add(w1, w2); - - } - } - // for(int i=0;i<efp.length;i++) efp[i].start(); - // for(int i=0;i<efp.length;i++) efp[i].join(); - executerService.invokeAll(pe); - - timeExtract += (System.nanoTime() - ts); - - return d; - } - - public double errors(Instances is, int ic, Parse p) { - short[] act = is.heads[ic]; - double correct = 0; - - // do not count root - for (int i = 1; i < act.length; i++) { - - // if (is.ppos[ic] ==null ) System.out.println("mf - // null"+is.ppos[ic][i]); - if (p.heads[i] == act[i]) { - correct += 0.5; - if (p.labels[i] == is.labels[ic][i]) - correct += 0.5; - } - } - - double x = ((double) act.length - 1 - correct); - - p.f1 = correct / (act.length - 1); - - return x; - } -} diff --git a/dependencyParser/mate-tools/src/is2/parser/package.html b/dependencyParser/mate-tools/src/is2/parser/package.html deleted file mode 100755 index a4f40a2..0000000 --- a/dependencyParser/mate-tools/src/is2/parser/package.html +++ /dev/null @@ -1,11 +0,0 @@ -Package info -<ul> - <li> separate cluster feature to keep speed since two many features in a function reduce speed drastically. </li> - <li> try second order stacking features </li> - <li> parser stacking features </li> - <li> lots of cluster features </li> - <li> Iteration over edges and not extraction of all edges each time </li> - <li> integrated new structurer writer </li> -</ul> - Change in FS, I observed lots of duplicated grand-children features -<br> \ No newline at end of file diff --git a/dependencyParser/mate-tools/src/is2/parserR2/Decoder.java b/dependencyParser/mate-tools/src/is2/parserR2/Decoder.java deleted file mode 100755 index 2ba175f..0000000 --- a/dependencyParser/mate-tools/src/is2/parserR2/Decoder.java +++ /dev/null @@ -1,405 +0,0 @@ -package is2.parserR2; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.HashSet; -import java.util.List; -import java.util.concurrent.ExecutorService; - -import decoder.ParallelDecoder; -import decoder.ParallelRearrangeNBest; -import decoder.ParallelRearrangeNBest2; -import extractors.Extractor; -import is2.data.Closed; -import is2.data.DataF; -import is2.data.Instances; -import is2.data.Open; -import is2.data.Parse; -import is2.data.ParseNBest; - -/** - * @author Bernd Bohnet, 01.09.2009 - * - * This methods do the actual work and they build the dependency trees. - */ -final public class Decoder { - - public static final boolean TRAINING = true; - public static long timeDecotder; - public static long timeRearrange; - - public static final boolean LAS = true; - - /** - * Threshold for rearrange edges non-projective - */ - public static float NON_PROJECTIVITY_THRESHOLD = 0.3F; - - public static ExecutorService executerService = java.util.concurrent.Executors.newFixedThreadPool(Parser.THREADS); - - // do not initialize - private Decoder() { - }; - - /** - * Build a dependency tree based on the data - * - * @param pos - * part-of-speech tags - * @param x - * the data - * @param projective - * projective or non-projective - * @param edges - * the edges - * @return a parse tree - * @throws InterruptedException - */ - public static List<ParseNBest> decode(short[] pos, DataF x, boolean projective, Extractor extractor) - throws InterruptedException { - - long ts = System.nanoTime(); - - if (executerService.isShutdown()) - executerService = java.util.concurrent.Executors.newCachedThreadPool(); - final int n = pos.length; - - final Open O[][][][] = new Open[n][n][2][]; - final Closed C[][][][] = new Closed[n][n][2][]; - - ArrayList<ParallelDecoder> pe = new ArrayList<ParallelDecoder>(); - - for (int i = 0; i < Parser.THREADS; i++) - pe.add(new ParallelDecoder(pos, x, O, C, n)); - - for (short k = 1; k < n; k++) { - - // provide the threads the data - for (short s = 0; s < n; s++) { - short t = (short) (s + k); - if (t >= n) - break; - - ParallelDecoder.add(s, t); - } - - executerService.invokeAll(pe); - } - - double bestSpanScore = (-1.0F / 0.0F); - Closed bestSpan = null; - for (int m = 1; m < n; m++) - if (C[0][n - 1][1][m].p > bestSpanScore) { - bestSpanScore = C[0][n - 1][1][m].p; - bestSpan = C[0][n - 1][1][m]; - } - - // build the dependency tree from the chart - ParseNBest out = new ParseNBest(pos.length); - - bestSpan.create(out); - - out.heads[0] = -1; - out.labels[0] = 0; - bestProj = out; - - timeDecotder += (System.nanoTime() - ts); - // DB.println(""+out); - - ts = System.nanoTime(); - List<ParseNBest> parses; - - if (!projective) { - - // if (training) - // rearrange(pos, out.heads, out.types,x,training); - // else { - // DB.println("bestSpan score "+(float)bestSpan.p+" comp score - // "+Extractor.encode3(pos, out.heads, out.types, x)); - // System.out.println(); - // Parse best = new Parse(out.heads,out.types,Extractor.encode3(pos, - // out.heads, out.types, x)); - parses = rearrangeNBest(pos, out.heads, out.labels, x, extractor); - // DB.println("1best "+parses.get(0).f1); - // DB.println(""+parses.get(0).toString()); - - // for(ParseNBest p :parses) if (p.heads==null) - // p.signature2parse(p.signature()); - - /// if (parses.get(0).f1>(best.f1+NON_PROJECTIVITY_THRESHOLD)) out = - /// parses.get(0); - // else out =best; - - // } - } else { - parses = new ArrayList<ParseNBest>(); - parses.add(out); - } - timeRearrange += (System.nanoTime() - ts); - - return parses; - } - - static Parse bestProj = null; - - /** - * This is the parallel non-projective edge re-arranger - * - * @param pos - * part-of-speech tags - * @param heads - * parent child relation - * @param labs - * edge labels - * @param x - * the data - * @param edges - * the existing edges defined by part-of-speech tags - * @throws InterruptedException - */ - public static List<ParseNBest> rearrangeNBestP(short[] pos, short[] heads, short[] labs, DataF x, - Extractor extractor) throws InterruptedException { - - ArrayList<ParallelRearrangeNBest2> pe = new ArrayList<ParallelRearrangeNBest2>(); - - int round = 0; - ArrayList<ParseNBest> parses = new ArrayList<ParseNBest>(); - ParseNBest px = new ParseNBest(); - px.signature(heads, labs); - // Object extractor; - px.f1 = extractor.encode3(pos, heads, labs, x); - parses.add(px); - - float lastNBest = Float.NEGATIVE_INFINITY; - - HashSet<Parse> done = new HashSet<Parse>(); - gnu.trove.THashSet<CharSequence> contained = new gnu.trove.THashSet<CharSequence>(); - - while (true) { - - pe.clear(); - - // used the first three parses - int ic = 0, considered = 0; - while (true) { - - if (parses.size() <= ic || considered > 11) - break; - - ParseNBest parse = parses.get(ic); - - ic++; - // parse already extended - if (done.contains(parse)) - continue; - considered++; - - parse.signature2parse(parse.signature()); - - done.add(parse); - - boolean[][] isChild = new boolean[heads.length][heads.length]; - - for (int i = 1, l1 = 1; i < heads.length; i++, l1 = i) - while ((l1 = heads[l1]) != -1) - isChild[l1][i] = true; - - // check the list of new possible parents and children for a - // better combination - for (short ch = 1; ch < heads.length; ch++) { - for (short pa = 0; pa < heads.length; pa++) { - if (ch == pa || pa == heads[ch] || isChild[ch][pa]) - continue; - ParallelRearrangeNBest2.add(parse.clone(), ch, pa); - } - } - - } - - for (int t = 0; t < Parser.THREADS; t++) - pe.add(new ParallelRearrangeNBest2(pos, x, lastNBest, extractor, NON_PROJECTIVITY_THRESHOLD)); - - executerService.invokeAll(pe); - - // avoid to add parses several times - for (ParallelRearrangeNBest2 rp : pe) { - for (int k = rp.parses.size() - 1; k >= 0; k--) { - if (lastNBest > rp.parses.get(k).f1) - continue; - CharSequence sig = rp.parses.get(k).signature(); - if (!contained.contains(sig)) { - parses.add(rp.parses.get(k)); - contained.add(sig); - } - } - } - - Collections.sort(parses); - - if (round >= 2) - break; - round++; - - // do not use to much memory - if (parses.size() > Parser.NBest) { - // if (parses.get(Parser.NBest).f1>lastNBest) lastNBest = - // (float)parses.get(Parser.NBest).f1; - parses.subList(Parser.NBest, parses.size() - 1).clear(); - } - } - return parses; - } - - /** - * This is the parallel non-projective edge re-arranger - * - * @param pos - * part-of-speech tags - * @param heads - * parent child relation - * @param labs - * edge labels - * @param x - * the data - * @param edges - * the existing edges defined by part-of-speech tags - * @throws InterruptedException - */ - public static List<ParseNBest> rearrangeNBest(short[] pos, short[] heads, short[] labs, DataF x, - Extractor extractor) throws InterruptedException { - - ArrayList<ParallelRearrangeNBest> pe = new ArrayList<ParallelRearrangeNBest>(); - - int round = 0; - ArrayList<ParseNBest> parses = new ArrayList<ParseNBest>(); - ParseNBest px = new ParseNBest(); - px.signature(heads, labs); - // Object extractor; - px.f1 = extractor.encode3(pos, heads, labs, x); - parses.add(px); - - float lastNBest = Float.NEGATIVE_INFINITY; - - HashSet<Parse> done = new HashSet<Parse>(); - gnu.trove.THashSet<CharSequence> contained = new gnu.trove.THashSet<CharSequence>(); - while (true) { - - pe.clear(); - - // used the first three parses - int i = 0; - while (true) { - - if (parses.size() <= i || pe.size() > 12) - break; - - ParseNBest parse = parses.get(i); - - i++; - - // parse already extended - if (done.contains(parse)) - continue; - - // DB.println("err "+parse.heads); - - parse.signature2parse(parse.signature()); - - done.add(parse); - pe.add(new ParallelRearrangeNBest(pos, x, parse, lastNBest, extractor, (float) parse.f1, - NON_PROJECTIVITY_THRESHOLD)); - } - - executerService.invokeAll(pe); - - // avoid to add parses several times - for (ParallelRearrangeNBest rp : pe) { - for (int k = rp.parses.size() - 1; k >= 0; k--) { - if (lastNBest > rp.parses.get(k).f1) - continue; - CharSequence sig = rp.parses.get(k).signature(); - if (!contained.contains(sig)) { - parses.add(rp.parses.get(k)); - contained.add(sig); - } - } - } - - Collections.sort(parses); - - if (round >= 2) - break; - round++; - - // do not use to much memory - if (parses.size() > Parser.NBest) { - if (parses.get(Parser.NBest).f1 > lastNBest) - lastNBest = (float) parses.get(Parser.NBest).f1; - parses.subList(Parser.NBest, parses.size() - 1).clear(); - } - } - return parses; - } - - public static String getInfo() { - - return "Decoder non-projectivity threshold: " + NON_PROJECTIVITY_THRESHOLD; - } - - /** - * @param parses - * @param is - * @param i - * @return - */ - public static int getGoldRank(List<ParseNBest> parses, Instances is, int i, boolean las) { - - for (int p = 0; p < parses.size(); p++) { - - if (parses.get(p).heads == null) - parses.get(p).signature2parse(parses.get(p).signature()); - - boolean eq = true; - for (int w = 1; w < is.length(0); w++) { - if (is.heads[i][w] != parses.get(p).heads[w] || (is.labels[i][w] != parses.get(p).labels[w] && las)) { - eq = false; - break; - } - } - if (eq) - return p; - } - return -1; - } - - public static int getSmallestError(List<ParseNBest> parses, Instances is, int i, boolean las) { - - int smallest = -1; - for (int p = 0; p < parses.size(); p++) { - - int err = 0; - for (int w = 1; w < is.length(0); w++) { - if (is.heads[i][w] != parses.get(p).heads[w] || (is.labels[i][w] != parses.get(p).labels[w] && las)) { - err++; - } - } - if (smallest == -1 || smallest > err) - smallest = err; - if (smallest == 0) - return 0; - } - return smallest; - } - - public static int getError(ParseNBest parse, Instances is, int i, boolean las) { - - int err = 0; - for (int w = 1; w < is.length(i); w++) { - if (is.heads[i][w] != parse.heads[w] || (is.labels[i][w] != parse.labels[w] && las)) { - err++; - } - } - return err; - } - -} diff --git a/dependencyParser/mate-tools/src/is2/parserR2/Options.java b/dependencyParser/mate-tools/src/is2/parserR2/Options.java deleted file mode 100755 index eb396b4..0000000 --- a/dependencyParser/mate-tools/src/is2/parserR2/Options.java +++ /dev/null @@ -1,92 +0,0 @@ -package is2.parserR2; - -import is2.util.OptionsSuper; - -public final class Options extends OptionsSuper { - - int start = 0, end = 0; - String prefix_model = "m"; - String prefix_test = "t"; - - public Options(String[] args) { - - for (int i = 0; i < args.length; i++) { - - if (args[i].equals("--help")) - explain(); - - if (args[i].equals("-decode")) { - decodeProjective = args[i + 1].equals("proj"); - i++; - } else if (args[i].equals("-decodeTH")) { - decodeTH = Double.parseDouble(args[i + 1]); - i++; - } else if (args[i].equals("-nonormalize")) { - normalize = false; - } else if (args[i].equals("-features")) { - features = args[i + 1]; - i++; - } else if (args[i].equals("-hsize")) { - hsize = Integer.parseInt(args[i + 1]); - i++; - } else if (args[i].equals("-len")) { - maxLen = Integer.parseInt(args[i + 1]); - i++; - } else if (args[i].equals("-cores")) { - cores = Integer.parseInt(args[i + 1]); - i++; - } else if (args[i].equals("-best")) { - best = Integer.parseInt(args[i + 1]); - i++; - } else if (args[i].equals("-start")) { - start = Integer.parseInt(args[i + 1]); - i++; - } else if (args[i].equals("-end")) { - end = Integer.parseInt(args[i + 1]); - i++; - } else if (args[i].equals("-prefix-model")) { - prefix_model = args[i + 1]; - i++; - } else if (args[i].equals("-prefix-test")) { - prefix_test = args[i + 1]; - i++; - } else if (args[i].equals("-mapping")) { - this.useMapping = args[i + 1]; - i++; - } else if (args[i].equals("-no2nd")) { - no2nd = true; - } else if (args[i].equals("-few2nd")) { - few2nd = true; - } else - super.addOption(args, i); - - } - - } - - private void explain() { - System.out.println("Usage: "); - System.out.println("java -class mate.jar is2.parser.Parser [Options]"); - System.out.println(); - System.out.println("Example: "); - System.out.println( - " java -class mate.jar is2.parser.Parser -model eps3.model -train corpora/conll08st/train/train.closed -test corpora/conll08st/devel/devel.closed -out b3.test -eval corpora/conll08st/devel/devel.closed -count 2000 -i 6"); - System.out.println(""); - System.out.println("Options:"); - System.out.println(""); - System.out.println(" -train <file> the corpus a model is trained on; default " + this.trainfile); - System.out.println(" -test <file> the input corpus for testing; default " + this.testfile); - System.out.println(" -out <file> the output corpus (result) of a test run; default " + this.outfile); - System.out.println(" -model <file> the parsing model for traing the model is stored in the files"); - System.out.println( - " and for parsing the model is load from this file; default " + this.modelName); - System.out.println( - " -i <number> the number of training iterations; good numbers are 10 for smaller corpora and 6 for bigger; default " - + this.numIters); - System.out.println(" -count <number> the n first sentences of the corpus are take for the training default " - + this.count); - System.out.println(" -format <number> conll format of the year 8 or 9; default " + this.formatTask); - - System.exit(0); - } -} diff --git a/dependencyParser/mate-tools/src/is2/parserR2/Parameters.java b/dependencyParser/mate-tools/src/is2/parserR2/Parameters.java deleted file mode 100755 index de7b591..0000000 --- a/dependencyParser/mate-tools/src/is2/parserR2/Parameters.java +++ /dev/null @@ -1,37 +0,0 @@ -/** - * - */ -package is2.parserR2; - -import java.io.DataInputStream; -import java.io.DataOutputStream; -import java.io.IOException; - -import is2.data.FV; -import is2.data.IFV; -import is2.data.Instances; -import is2.data.Parse; - -/** - * @author Bernd Bohnet, 31.08.2009 - * - * - */ -public abstract class Parameters { - - public abstract void average(double avVal); - - public abstract void update(FV act, FV pred, Instances isd, int instc, Parse d, double upd, double e); - - public abstract void write(DataOutputStream dos) throws IOException; - - public abstract void read(DataInputStream dis) throws IOException; - - public abstract int size(); - - /** - * @return - */ - public abstract IFV getFV(); - -} diff --git a/dependencyParser/mate-tools/src/is2/parserR2/ParametersFloat.java b/dependencyParser/mate-tools/src/is2/parserR2/ParametersFloat.java deleted file mode 100755 index 2ba0aaa..0000000 --- a/dependencyParser/mate-tools/src/is2/parserR2/ParametersFloat.java +++ /dev/null @@ -1,178 +0,0 @@ -package is2.parserR2; - -import java.io.DataInputStream; -import java.io.DataOutputStream; -import java.io.IOException; - -import is2.data.F2SF; -import is2.data.FV; -import is2.data.FVR; -import is2.data.Instances; -import is2.data.Parse; -import is2.util.DB; - -final public class ParametersFloat extends Parameters { - - public float[] parameters; - private float[] total; - - public ParametersFloat(int size) { - parameters = new float[size]; - total = new float[size]; - for (int i = 0; i < parameters.length; i++) { - parameters[i] = 0F; - total[i] = 0F; - } - } - - /** - * @param parameters2 - */ - public ParametersFloat(float[] p) { - parameters = p; - } - - @Override - public void average(double avVal) { - for (int j = 0; j < total.length; j++) { - parameters[j] = total[j] / ((float) avVal); - } - total = null; - } - - public ParametersFloat average2(double avVal) { - float[] px = new float[this.parameters.length]; - for (int j = 0; j < total.length; j++) { - px[j] = total[j] / ((float) avVal); - } - ParametersFloat pf = new ParametersFloat(px); - return pf; - } - - public void update(FV act, FV pred, Instances isd, int instc, Parse dx, double upd, double e, float d, float f) { - - e++; - - float lam_dist = d - f; - - float b = (float) e - lam_dist; - - FV dist = act.getDistVector(pred); - - dist.update(parameters, total, hildreth(dist, b), upd, false); - } - - @Override - public void update(FV act, FV pred, Instances isd, int instc, Parse dx, double upd, double e) { - - e++; - - float lam_dist = getScore(act) - getScore(pred); - - float b = (float) e - lam_dist; - - FV dist = act.getDistVector(pred); - - dist.update(parameters, total, hildreth(dist, b), upd, false); - } - - public void update(FVR act, FVR pred, Instances isd, int instc, Parse dx, double upd, double e, float lam_dist) { - - e++; - - float b = (float) e - lam_dist; - - FVR dist = act.getDistVector(pred); - - dist.update(parameters, total, hildreth(dist, b), upd, false); - } - - protected double hildreth(FV a, double b) { - - double A = a.dotProduct(a); - if (A <= 0.0000000000000000001) - return 0.0; - return b / A; - } - - protected double hildreth(FVR a, double b) { - - double A = a.dotProduct(a); - if (A <= 0.0000000000000000001) - return 0.0; - return b / A; - } - - public float getScore(FV fv) { - if (fv == null) - return 0.0F; - return fv.getScore(parameters, false); - - } - - public float getScore(FVR fv) { // xx - if (fv == null) - return 0.0F; - return fv.getScore(parameters, false); - - } - - @Override - final public void write(DataOutputStream dos) throws IOException { - - dos.writeInt(parameters.length); - for (float d : parameters) - dos.writeFloat(d); - - } - - @Override - public void read(DataInputStream dis) throws IOException { - - parameters = new float[dis.readInt()]; - int notZero = 0; - for (int i = 0; i < parameters.length; i++) { - parameters[i] = dis.readFloat(); - if (parameters[i] != 0.0F) - notZero++; - } - - DB.println("read parameters " + parameters.length + " not zero " + notZero); - - } - - public int countNZ() { - - int notZero = 0; - for (float parameter : parameters) { - if (parameter != 0.0F) - notZero++; - } - return notZero; - - // DB.println("read parameters "+parameters.length+" not zero - // "+notZero); - - } - - /* - * (non-Javadoc) - * - * @see is2.sp09k99995.Parameters#getFV() - */ - @Override - public F2SF getFV() { - return new F2SF(parameters); - } - - /* - * (non-Javadoc) - * - * @see is2.sp09k99999.Parameters#size() - */ - @Override - public int size() { - return parameters.length; - } - -} diff --git a/dependencyParser/mate-tools/src/is2/parserR2/Parser.java b/dependencyParser/mate-tools/src/is2/parserR2/Parser.java deleted file mode 100755 index 54d6f2e..0000000 --- a/dependencyParser/mate-tools/src/is2/parserR2/Parser.java +++ /dev/null @@ -1,647 +0,0 @@ -package is2.parserR2; - -import java.io.BufferedInputStream; -import java.io.BufferedOutputStream; -import java.io.DataInputStream; -import java.io.DataOutputStream; -import java.io.FileInputStream; -import java.io.FileNotFoundException; -import java.io.FileOutputStream; -import java.io.IOException; -import java.text.SimpleDateFormat; -import java.util.Date; -import java.util.HashMap; -import java.util.List; -import java.util.Map.Entry; -import java.util.zip.ZipEntry; -import java.util.zip.ZipInputStream; -import java.util.zip.ZipOutputStream; - -//import extractors.ExtractorClusterStackedR2; -import extractors.Extractor; -import extractors.ExtractorFactory; -import is2.data.Cluster; -import is2.data.DataF; -import is2.data.Edges; -import is2.data.FV; -import is2.data.Instances; -import is2.data.Long2Int; -import is2.data.Long2IntInterface; -import is2.data.MFB; -import is2.data.Parse; -import is2.data.ParseNBest; -import is2.data.PipeGen; -import is2.data.SentenceData09; -import is2.io.CONLLReader09; -import is2.io.CONLLWriter09; -import is2.tools.Tool; -import is2.util.DB; -import is2.util.OptionsSuper; -import is2.util.ParserEvaluator; - -public class Parser implements Tool { - - // output evaluation info - private static final boolean MAX_INFO = true; - - public static int THREADS = 4; - - Long2IntInterface l2i; - ParametersFloat params; - Pipe pipe; - OptionsSuper options; - - HashMap<Integer, Integer> rank = new HashMap<Integer, Integer>(); - int amongxbest = 0, amongxbest_ula = 0, nbest = 0, bestProj = 0, smallestErrorSum = 0, countAllNodes = 0; - static int NBest = 1000; - - ExtractorFactory extractorFactory = new ExtractorFactory(ExtractorFactory.StackedClusteredR2); - - /** - * Initialize the parser - * - * @param options - */ - public Parser(OptionsSuper options) { - - this.options = options; - pipe = new Pipe(options); - - params = new ParametersFloat(0); - - // load the model - try { - readModel(options, pipe, params); - } catch (Exception e) { - e.printStackTrace(); - } - - } - - /** - * @param modelFileName - * The file name of the parsing model - */ - public Parser(String modelFileName) { - this(new Options(new String[] { "-model", modelFileName })); - } - - /** - * - */ - public Parser() { - // TODO Auto-generated constructor stub - } - - public static void main(String[] args) throws Exception { - - long start = System.currentTimeMillis(); - OptionsSuper options = new Options(args); - - NBest = options.best; - - DB.println("n-best" + NBest); - - Runtime runtime = Runtime.getRuntime(); - THREADS = runtime.availableProcessors(); - if (options.cores < THREADS && options.cores > 0) - THREADS = options.cores; - - DB.println("Found " + runtime.availableProcessors() + " cores use " + THREADS); - - if (options.train) { - - Parser p = new Parser(); - p.options = options; - - p.l2i = new Long2Int(options.hsize); - - p.pipe = new Pipe(options); - Instances is = new Instances(); - - p.pipe.extractor = new Extractor[THREADS]; - - for (int t = 0; t < THREADS; t++) - p.pipe.extractor[t] = p.extractorFactory.getExtractor(p.l2i); - - p.params = new ParametersFloat(p.l2i.size()); - - if (options.useMapping != null) { - String model = options.modelName; - - options.modelName = options.useMapping; - DB.println("Using mapping of model " + options.modelName); - ZipInputStream zis = new ZipInputStream( - new BufferedInputStream(new FileInputStream(options.modelName))); - zis.getNextEntry(); - DataInputStream dis = new DataInputStream(new BufferedInputStream(zis)); - p.pipe.mf.read(dis); - - DB.println("read\n" + p.pipe.mf.toString()); - - ParametersFloat params = new ParametersFloat(0); - params.read(dis); - - Edges.read(dis); - - dis.close(); - DB.println("end read model"); - options.modelName = model; - } - - p.pipe.createInstances(options.trainfile, is); - - p.train(options, p.pipe, p.params, is, p.pipe.cl); - - p.writeModell(options, p.params, null, p.pipe.cl); - - } - - if (options.test) { - - Parser p = new Parser(); - p.options = options; - - p.pipe = new Pipe(options); - p.params = new ParametersFloat(0); // total should be zero and the - // parameters are later read - - // load the model - - p.readModel(options, p.pipe, p.params); - - DB.println("test on " + options.testfile); - - System.out.println("" + p.pipe.mf.toString()); - - p.outputParses(options, p.pipe, p.params, !MAX_INFO); - - } - - System.out.println(); - - if (options.eval) { - System.out.println("\nEVALUATION PERFORMANCE:"); - ParserEvaluator.evaluate(options.goldfile, options.outfile); - } - - long end = System.currentTimeMillis(); - System.out.println("used time " + ((float) ((end - start) / 100) / 10)); - - Decoder.executerService.shutdown(); - Pipe.executerService.shutdown(); - System.out.println("end."); - - } - - /** - * Read the models and mapping - * - * @param options - * @param pipe - * @param params - * @throws IOException - */ - public void readModel(OptionsSuper options, Pipe pipe, Parameters params) throws IOException { - - DB.println("Reading data started"); - - // prepare zipped reader - ZipInputStream zis = new ZipInputStream(new BufferedInputStream(new FileInputStream(options.modelName))); - zis.getNextEntry(); - DataInputStream dis = new DataInputStream(new BufferedInputStream(zis)); - - pipe.mf.read(dis); - - pipe.cl = new Cluster(dis); - - params.read(dis); - this.l2i = new Long2Int(params.size()); - DB.println("parsing -- li size " + l2i.size()); - - pipe.extractor = new Extractor[THREADS]; - - for (int t = 0; t < THREADS; t++) - pipe.extractor[t] = this.extractorFactory.getExtractor(l2i); - - Edges.read(dis); - - options.decodeProjective = dis.readBoolean(); - - int maxForm = dis.readInt(); - - for (int t = 0; t < THREADS; t++) { - pipe.extractor[t].setMaxForm(maxForm); - pipe.extractor[t].initStat(); - pipe.extractor[t].init(); - } - - boolean foundInfo = false; - try { - String info = null; - int icnt = dis.readInt(); - for (int i = 0; i < icnt; i++) { - info = dis.readUTF(); - System.out.println(info); - } - } catch (Exception e) { - if (!foundInfo) - System.out.println("no info about training"); - } - - dis.close(); - - DB.println("Reading data finnished"); - - Decoder.NON_PROJECTIVITY_THRESHOLD = (float) options.decodeTH; - for (int t = 0; t < THREADS; t++) { - pipe.extractor[t].initStat(); - pipe.extractor[t].init(); - } - - } - - /** - * Do the training - * - * @param instanceLengths - * @param options - * @param pipe - * @param params - * @param is - * @param cluster - * @throws IOException - * @throws InterruptedException - * @throws ClassNotFoundException - */ - public void train(OptionsSuper options, Pipe pipe, ParametersFloat params, Instances is, Cluster cluster) - throws IOException, InterruptedException, ClassNotFoundException { - - DB.println("\nTraining Information "); - DB.println("-------------------- "); - - Decoder.NON_PROJECTIVITY_THRESHOLD = (float) options.decodeTH; - - if (options.decodeProjective) - System.out.println("Decoding: " + (options.decodeProjective ? "projective" : "non-projective")); - else - System.out.println("" + Decoder.getInfo()); - int numInstances = is.size(); - - int maxLenInstances = 0; - for (int i = 0; i < numInstances; i++) - if (maxLenInstances < is.length(i)) - maxLenInstances = is.length(i); - - DataF data = new DataF(maxLenInstances, pipe.mf.getFeatureCounter().get(PipeGen.REL).shortValue()); - - int iter = 0; - int del = 0; - float error = 0; - float f1 = 0; - - FV pred = new FV(); - FV act = new FV(); - - double upd = (double) (numInstances * options.numIters) + 1; - - for (; iter < options.numIters; iter++) { - - System.out.print("Iteration " + iter + ": "); - - long start = System.currentTimeMillis(); - - long last = System.currentTimeMillis(); - error = 0; - f1 = 0; - for (int n = 0; n < numInstances; n++) { - - upd--; - - if (is.labels[n].length > options.maxLen) - continue; - - String info = " td " + ((Decoder.timeDecotder) / 1000000F) + " tr " - + ((Decoder.timeRearrange) / 1000000F) + " te " + ((Pipe.timeExtract) / 1000000F); - - if ((n + 1) % 500 == 0) - del = PipeGen.outValueErr(n + 1, Math.round(error * 1000) / 1000, f1 / n, del, last, upd, info); - - short pos[] = is.pposs[n]; - - data = pipe.fillVector(params.getFV(), is, n, data, cluster, THREADS, l2i); - - List<ParseNBest> parses = Decoder.decode(pos, data, options.decodeProjective, pipe.extractor[0]); - Parse d = parses.get(0); - double e = pipe.errors(is, n, d); - - if (d.f1 > 0) - f1 += (d.labels.length - 1 - e) / (d.labels.length - 1); - - if (e <= 0) - continue; - - // get predicted feature vector - pred.clear(); - pipe.extractor[0].encodeCat(is, n, pos, is.forms[n], is.plemmas[n], d.heads, d.labels, is.feats[n], - pipe.cl, pred); - - error += e; - - act.clear(); - pipe.extractor[0].encodeCat(is, n, pos, is.forms[n], is.plemmas[n], is.heads[n], is.labels[n], - is.feats[n], pipe.cl, act); - - params.update(act, pred, is, n, d, upd, e); - } - - String info = " td " + ((Decoder.timeDecotder) / 1000000F) + " tr " + ((Decoder.timeRearrange) / 1000000F) - + " te " + ((Pipe.timeExtract) / 1000000F) + " nz " + params.countNZ(); - PipeGen.outValueErr(numInstances, Math.round(error * 1000) / 1000, f1 / numInstances, del, last, upd, info); - del = 0; - long end = System.currentTimeMillis(); - System.out.println(" time:" + (end - start)); - - ParametersFloat pf = params.average2((iter + 1) * is.size()); - try { - - if (options.testfile != null) { - outputParses(options, pipe, pf, !MAX_INFO); - ParserEvaluator.evaluate(options.goldfile, options.outfile); - // writeModell(options, pf, ""+(iter+1),pipe.cl); - } - - } catch (Exception e) { - e.printStackTrace(); - } - - Decoder.timeDecotder = 0; - Decoder.timeRearrange = 0; - Pipe.timeExtract = 0; - - } - params.average(iter * is.size()); - } - - /** - * Do the parsing - * - * @param options - * @param pipe - * @param params - * @throws IOException - */ - private void outputParses(OptionsSuper options, Pipe pipe, ParametersFloat params, boolean maxInfo) - throws Exception { - - long start = System.currentTimeMillis(); - - CONLLReader09 depReader = new CONLLReader09(options.testfile, options.formatTask); - CONLLWriter09 depWriter = new CONLLWriter09(options.outfile, options.formatTask); - - // ExtractorClusterStacked.initFeatures(); - - int cnt = 0; - int del = 0; - long last = System.currentTimeMillis(); - - if (maxInfo) - System.out.println("\nParsing Information "); - if (maxInfo) - System.out.println("------------------- "); - - if (maxInfo && !options.decodeProjective) - System.out.println("" + Decoder.getInfo()); - - // if (!maxInfo) System.out.println(); - - String[] types = new String[pipe.mf.getFeatureCounter().get(PipeGen.REL)]; - for (Entry<String, Integer> e : MFB.getFeatureSet().get(PipeGen.REL).entrySet()) - types[e.getValue()] = e.getKey(); - - System.out.print("Processing Sentence: "); - - while (true) { - - Instances is = new Instances(); - is.init(1, new MFB(), options.formatTask); - - SentenceData09 instance = pipe.nextInstance(is, depReader); - if (instance == null) - break; - cnt++; - - SentenceData09 i09 = this.parse(instance, params); - - // } - depWriter.write(i09); - del = PipeGen.outValue(cnt, del, last); - // DB.println("xbest "+amongxbest+" cnt "+cnt+" - // "+((float)((float)amongxbest/cnt))+" nbest "+((float)nbest/cnt)+ - // " 1best "+((float)(rank.get(0)==null?0:rank.get(0))/cnt)+" - // best-proj "+((float)bestProj/cnt)); - - } - - // pipe.close(); - - depWriter.finishWriting(); - long end = System.currentTimeMillis(); - DB.println("rank\n" + rank + "\n"); - DB.println("x-best-las " + amongxbest + " x-best-ula " + amongxbest_ula + " cnt " + cnt + " x-best-las " - + ((float) amongxbest / cnt) + " x-best-ula " + ((float) amongxbest_ula / cnt) + " nbest " - + ((float) nbest / cnt) + " 1best " + ((float) (rank.get(0) == null ? 0 : rank.get(0)) / cnt) - + " best-proj " + ((float) bestProj / cnt) + " Sum LAS " - + ((float) this.smallestErrorSum / countAllNodes)); - - // DB.println("errors "+error); - - rank.clear(); - amongxbest = 0; - amongxbest_ula = 0; - cnt = 0; - nbest = 0; - bestProj = 0; - if (maxInfo) - System.out.println("Used time " + (end - start)); - if (maxInfo) - System.out.println("forms count " + Instances.m_count + " unkown " + Instances.m_unkown); - - } - - public SentenceData09 parse(SentenceData09 instance, ParametersFloat params) { - - String[] types = new String[pipe.mf.getFeatureCounter().get(PipeGen.REL)]; - for (Entry<String, Integer> e : MFB.getFeatureSet().get(PipeGen.REL).entrySet()) - types[e.getValue()] = e.getKey(); - - Instances is = new Instances(); - is.init(1, new MFB(), options.formatTask); - new CONLLReader09().insert(is, instance); - - String[] forms = instance.forms; - - // use for the training ppos - DataF d2; - try { - d2 = pipe.fillVector(params.getFV(), is, 0, null, pipe.cl, THREADS, l2i);// cnt-1 - } catch (Exception e) { - e.printStackTrace(); - return null; - } - short[] pos = is.pposs[0]; - - List<ParseNBest> parses = null; - Parse d = null; - try { - parses = Decoder.decode(pos, d2, options.decodeProjective, pipe.extractor[0]); // cnt-1 - d = parses.get(0); - } catch (Exception e) { - e.printStackTrace(); - } - - if (parses.size() > NBest) - parses = parses.subList(0, NBest); - - int g_las = Decoder.getGoldRank(parses, is, 0, Decoder.LAS); - int g_ula = Decoder.getGoldRank(parses, is, 0, !Decoder.LAS); - - int smallest = Decoder.getSmallestError(parses, is, 0, !Decoder.LAS); - smallestErrorSum += is.length(0) - smallest; - countAllNodes += is.length(0); - - if (g_las >= 0) - amongxbest++; - if (g_ula >= 0) - amongxbest_ula++; - - nbest += parses.size(); - - Integer r = rank.get(g_las); - if (r == null) - rank.put(g_las, 1); - else - rank.put(g_las, r + 1); - - this.pipe.errors(is, 0, d); - - float errBestProj = (float) this.pipe.errors(is, 0, Decoder.bestProj); - - if (errBestProj == 0) - bestProj++; - - SentenceData09 i09 = new SentenceData09(instance); - - i09.createSemantic(instance); - - for (int j = 0; j < forms.length - 1; j++) { - i09.plabels[j] = types[d.labels[j + 1]]; - i09.pheads[j] = d.heads[j + 1]; - } - return i09; - - } - - public List<ParseNBest> parseNBest(SentenceData09 instance) { - - Instances is = new Instances(); - is.init(1, new MFB(), options.formatTask); - new CONLLReader09().insert(is, instance); - - // use for the training ppos - DataF d2; - try { - d2 = pipe.fillVector(params.getFV(), is, 0, null, pipe.cl, THREADS, l2i);// cnt-1 - } catch (Exception e) { - e.printStackTrace(); - return null; - } - short[] pos = is.pposs[0]; - - List<ParseNBest> parses = null; - try { - parses = Decoder.decode(pos, d2, options.decodeProjective, pipe.extractor[0]); // cnt-1 - } catch (Exception e) { - e.printStackTrace(); - } - - if (parses.size() > NBest) - parses = parses.subList(0, NBest); - - return parses; - - } - - /* - * (non-Javadoc) - * - * @see is2.tools.Tool#apply(is2.data.SentenceData09) - */ - - @Override - public SentenceData09 apply(SentenceData09 snt09) { - - SentenceData09 it = new SentenceData09(); - it.createWithRoot(snt09); - - SentenceData09 out = null; - try { - - // for(int k=0;k<it.length();k++) { - // it.forms[k] = reader.normalize(it.forms[k]); - // it.plemmas[k] = reader.normalize(it.plemmas[k]); - // } - - out = parse(it, this.params); - - } catch (Exception e) { - e.printStackTrace(); - } - - Decoder.executerService.shutdown(); - Pipe.executerService.shutdown(); - - return out; - } - - /** - * Write the parsing model - * - * @param options - * @param params - * @param extension - * @throws FileNotFoundException - * @throws IOException - */ - private void writeModell(OptionsSuper options, ParametersFloat params, String extension, Cluster cs) - throws FileNotFoundException, IOException { - - String name = extension == null ? options.modelName : options.modelName + extension; - // System.out.println("Writting model: "+name); - ZipOutputStream zos = new ZipOutputStream(new BufferedOutputStream(new FileOutputStream(name))); - zos.putNextEntry(new ZipEntry("data")); - DataOutputStream dos = new DataOutputStream(new BufferedOutputStream(zos)); - - MFB.writeData(dos); - cs.write(dos); - - params.write(dos); - - Edges.write(dos); - - dos.writeBoolean(options.decodeProjective); - - dos.writeInt(pipe.extractor[0].getMaxForm()); - - dos.writeInt(5); // Info count - dos.writeUTF("Used parser " + Parser.class.toString()); - dos.writeUTF("Creation date " + (new SimpleDateFormat("yyyy.MM.dd HH:mm:ss")).format(new Date())); - dos.writeUTF("Training data " + options.trainfile); - dos.writeUTF("Iterations " + options.numIters + " Used sentences " + options.count); - dos.writeUTF("Cluster " + options.clusterFile); - - dos.flush(); - dos.close(); - } - -} diff --git a/dependencyParser/mate-tools/src/is2/parserR2/Pipe.java b/dependencyParser/mate-tools/src/is2/parserR2/Pipe.java deleted file mode 100755 index 81ce59a..0000000 --- a/dependencyParser/mate-tools/src/is2/parserR2/Pipe.java +++ /dev/null @@ -1,261 +0,0 @@ -package is2.parserR2; - -import java.io.IOException; -import java.util.ArrayList; -import java.util.concurrent.ExecutorService; - -import extractors.Extractor; -import extractors.ParallelExtract; -import is2.data.Cluster; -import is2.data.DataF; -import is2.data.Edges; -import is2.data.F2SF; -import is2.data.Instances; -import is2.data.Long2IntInterface; -import is2.data.MFB; -import is2.data.Parse; -import is2.data.PipeGen; -import is2.data.SentenceData09; -import is2.io.CONLLReader09; -import is2.util.OptionsSuper; - -final public class Pipe extends PipeGen { - - public Extractor[] extractor; - final public MFB mf = new MFB(); - - Cluster cl; - - private OptionsSuper options; - public static long timeExtract; - - public Pipe(OptionsSuper o) { - options = o; - } - - public void createInstances(String file, Instances is) - // throws Exception - - { - - CONLLReader09 depReader = new CONLLReader09(file); - - mf.register(REL, "<root-type>"); - - // register at least one predicate since the parsing data might not - // contain predicates as in - // the Japaness corpus but the development sets contains some - - System.out.print("Registering feature parts of sentence: "); - int ic = 0; - int del = 0; - while (true) { - SentenceData09 instance = depReader.getNext(); - if (instance == null) - break; - ic++; - - if (ic % 1000 == 0) { - del = outValue(ic, del); - } - - String[] labs1 = instance.labels; - for (String element : labs1) - mf.register(REL, element); - - String[] w = instance.forms; - for (String element : w) - mf.register(WORD, depReader.normalize(element)); - - w = instance.plemmas; - for (String element : w) - mf.register(WORD, depReader.normalize(element)); - - w = instance.ppos; - for (String element : w) - mf.register(POS, element); - - w = instance.gpos; - for (String element : w) - mf.register(POS, element); - - if (instance.feats != null) { - String fs[][] = instance.feats; - for (String[] element : fs) { - w = element; - if (w == null) - continue; - for (String element2 : w) - mf.register(FEAT, element2); - } - } - - if ((ic - 1) > options.count) - break; - } - del = outValue(ic, del); - - for (Extractor e : extractor) { - e.setMaxForm(mf.getFeatureCounter().get(WORD)); - } - - if (options.clusterFile == null) - cl = new Cluster(); - else - cl = new Cluster(options.clusterFile, mf, 6); - - mf.calculateBits(); - - System.out.println("" + mf.toString()); - - for (Extractor e : extractor) { - e.initStat(); - e.init(); - } - - depReader.startReading(file); - - int num1 = 0; - - Edges.init(mf.getFeatureCounter().get(POS)); - - System.out.print("Creating edge filters and read corpus: "); - del = 0; - - is.init(ic, new MFB()); - - while (true) { - if (num1 % 100 == 0) - del = outValue(num1, del); - - SentenceData09 instance1 = depReader.getNext(is); - - if (instance1 == null) - break; - - int last = is.size() - 1; - short[] pos = is.pposs[last]; - - for (int k = 0; k < is.length(last); k++) { - if (is.heads[last][k] < 0) - continue; - Edges.put(pos[is.heads[last][k]], pos[k], k < is.heads[last][k], is.labels[last][k]); - } - - if (!options.allFeatures && num1 > options.count) - break; - - num1++; - - } - del = outValue(num1, del); - System.out.println(); - Edges.findDefault(); - } - - public void getInstances(String file, Instances is) { - CONLLReader09 depReader = new CONLLReader09(file); - - int ic = options.count + 2; - - is.init(ic, new MFB()); - - int num1 = 0, del = 0; - while (true) { - if (num1 % 100 == 0) - del = outValue(num1, del); - - SentenceData09 instance1 = depReader.getNext(is); - - if (instance1 == null) - break; - - if (!options.allFeatures && num1 > options.count) - break; - - num1++; - - } - del = outValue(num1, del); - System.out.println(); - - } - - /** - * Creates an instance for outputParses - * - * @param is - * @return - * @throws IOException - */ - protected final SentenceData09 nextInstance(Instances is, CONLLReader09 depReader) throws Exception { - - SentenceData09 instance = depReader.getNext(is); - if (instance == null || instance.forms == null) - return null; - - return instance; - } - - public static ExecutorService executerService = java.util.concurrent.Executors.newFixedThreadPool(Parser.THREADS); - - public DataF fillVector(F2SF params, Instances is, int inst, DataF d, Cluster cluster, int threads, - Long2IntInterface li) throws InterruptedException { - - long ts = System.nanoTime(); - - if (executerService.isShutdown()) - executerService = java.util.concurrent.Executors.newCachedThreadPool(); - - final int length = is.length(inst); - if (d == null || d.len < length) - d = new DataF(length, mf.getFeatureCounter().get(PipeGen.REL).shortValue()); - - ArrayList<ParallelExtract> pe = new ArrayList<ParallelExtract>(); - - for (int i = 0; i < threads; i++) { - - // DB.println(""+((ExtractorClusterStackedR2)extractor[i]).s_dist); - pe.add(new ParallelExtract(extractor[i], is, inst, d, (F2SF) params.clone(), cluster, li)); - } - - for (int w1 = 0; w1 < length; w1++) { - for (int w2 = 0; w2 < length; w2++) { - if (w1 == w2) - continue; - ParallelExtract.add(w1, w2); - } - } - executerService.invokeAll(pe); - - timeExtract += (System.nanoTime() - ts); - - return d; - } - - /** - * the loss function - */ - public double errors(Instances is, int ic, Parse p) { - - if (p.heads == null) - p.signature2parse(p.signature()); - short[] act = is.heads[ic]; - double correct = 0; - - // do not count root - for (int i = 1; i < act.length; i++) { - if (p.heads[i] == act[i]) { - correct += 0.5; - if (p.labels[i] == is.labels[ic][i]) - correct += 0.5; - } - } - - double x = ((double) act.length - 1 - correct); - - // p.f1 = (double)correct / (double)(act.length-1); - - return x; - } -} diff --git a/dependencyParser/mate-tools/src/is2/parserR2/PipeReranker.java b/dependencyParser/mate-tools/src/is2/parserR2/PipeReranker.java deleted file mode 100644 index 622fe1c..0000000 --- a/dependencyParser/mate-tools/src/is2/parserR2/PipeReranker.java +++ /dev/null @@ -1,123 +0,0 @@ -package is2.parserR2; - -import java.util.concurrent.ExecutorService; - -import extractors.ExtractorReranker; -import is2.data.Cluster; -import is2.data.Edges; -import is2.data.Instances; -import is2.data.MFB; -import is2.data.PipeGen; -import is2.data.SentenceData09; -import is2.io.CONLLReader09; -import is2.util.OptionsSuper; - -final public class PipeReranker extends PipeGen { - - public ExtractorReranker extractor; - final public MFB mf = new MFB(); - - Cluster cl; - - private OptionsSuper options; - public static long timeExtract; - - public PipeReranker(OptionsSuper o) { - options = o; - } - - public void createInstances(String file, Instances is) - // throws Exception - - { - - CONLLReader09 depReader = new CONLLReader09(file); - - mf.register(REL, "<root-type>"); - - // register at least one predicate since the parsing data might not - // contain predicates as in - // the Japaness corpus but the development sets contains some - - System.out.print("Registering feature parts of sentence: "); - int ic = 0; - int del = 0; - while (true) { - SentenceData09 instance = depReader.getNext(); - if (instance == null) - break; - ic++; - - if (ic % 1000 == 0) { - del = outValue(ic, del); - } - - String[] labs1 = instance.labels; - for (String element : labs1) - mf.register(REL, element); - - String[] w = instance.forms; - for (String element : w) - mf.register(WORD, depReader.normalize(element)); - - w = instance.plemmas; - for (String element : w) - mf.register(WORD, depReader.normalize(element)); - - w = instance.ppos; - for (String element : w) - mf.register(POS, element); - - w = instance.gpos; - for (String element : w) - mf.register(POS, element); - - if (instance.feats != null) { - String fs[][] = instance.feats; - for (String[] element : fs) { - w = element; - if (w == null) - continue; - for (String element2 : w) - mf.register(FEAT, element2); - } - } - - if ((ic - 1) > options.count) - break; - } - del = outValue(ic, del); - - System.out.println(); - ExtractorReranker.initFeatures(); - - ExtractorReranker.maxForm = mf.getFeatureCounter().get(WORD); - - if (options.clusterFile == null) - cl = new Cluster(); - else - cl = new Cluster(options.clusterFile, mf, 6); - - mf.calculateBits(); - ExtractorReranker.initStat(); - - System.out.println("" + mf.toString()); - - extractor.init(); - depReader.startReading(file); - - int num1 = 0; - - is.init(ic, new MFB()); - - Edges.init(mf.getFeatureCounter().get(POS)); - - del = 0; - - del = outValue(num1, del); - System.out.println(); - } - - public static ExecutorService executerService = java.util.concurrent.Executors.newFixedThreadPool(Parser.THREADS); - -} diff --git a/dependencyParser/mate-tools/src/is2/parserR2/Reranker.java b/dependencyParser/mate-tools/src/is2/parserR2/Reranker.java deleted file mode 100644 index 61650a0..0000000 --- a/dependencyParser/mate-tools/src/is2/parserR2/Reranker.java +++ /dev/null @@ -1,991 +0,0 @@ -package is2.parserR2; - -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.FileNotFoundException; -import java.io.FileOutputStream; -import java.io.IOException; -import java.text.SimpleDateFormat; -import java.util.ArrayList; -import java.util.Date; -import java.util.HashMap; -import java.util.List; -import java.util.Map.Entry; -import java.util.zip.ZipEntry; -import java.util.zip.ZipInputStream; -import java.util.zip.ZipOutputStream; - -import extractors.Extractor; -import extractors.ExtractorClusterStacked; -import extractors.ExtractorReranker; -import is2.data.Cluster; -import is2.data.DataF; -import is2.data.Edges; -import is2.data.F2SF; -import is2.data.FVR; -import is2.data.Instances; -import is2.data.Long2Int; -import is2.data.Long2IntInterface; -import is2.data.MFB; -import is2.data.Parse; -import is2.data.ParseNBest; -import is2.data.PipeGen; -import is2.data.SentenceData09; -import is2.io.CONLLReader09; -import is2.io.CONLLWriter09; -import is2.tools.Tool; -import is2.util.DB; -import is2.util.OptionsSuper; -import is2.util.ParserEvaluator; - -public class Reranker implements Tool { - - public static int THREADS = 4; - - Long2IntInterface l2i; - - // the parser models - ParametersFloat paramsParsers[]; - - // the re-ranker model - ParametersFloat parametersReranker; - PipeReranker pipeReranker; - Pipe pipe; - Options options; - - HashMap<Integer, Integer> rank = new HashMap<Integer, Integer>(); - int amongxbest = 0, amongxbest_ula = 0, nbest = 0, bestProj = 0, smallestErrorSum = 0, countAllNodes = 0; - static int NBest = 1000; - - /** - * Initialize the parser - * - * @param options - */ - public Reranker(Options options) { - - this.options = options; - - } - - /** - * @param modelFileName - * The file name of the parsing model - */ - public Reranker(String modelFileName) { - this(new Options(new String[] { "-model", modelFileName })); - } - - public Reranker() { - // TODO Auto-generated constructor stub - } - - public static void main(String[] args) throws Exception { - - long start = System.currentTimeMillis(); - Options options = new Options(args); - - NBest = options.best; - - DB.println("n-best " + NBest); - - Runtime runtime = Runtime.getRuntime(); - THREADS = runtime.availableProcessors(); - - if (options.cores < THREADS && options.cores > 0) - THREADS = options.cores; - - DB.println("Found " + runtime.availableProcessors() + " cores use " + THREADS); - - if (options.train) { - - Reranker p = new Reranker(); - p.options = options; - - p.l2i = new Long2Int(options.hsize); - p.pipeReranker = new PipeReranker(options); - p.pipeReranker.extractor = new ExtractorReranker(p.l2i); - - // initialize the parser - p.pipe = new Pipe(options); - - // read parsing models - p.paramsParsers = new ParametersFloat[options.end + 1]; - for (int m = 0; m <= options.end; m++) { - String name = options.prefix_model + m; - p.paramsParsers[m] = new ParametersFloat(0); - p.readModel(name, p.pipe, p.paramsParsers[m]); - } - - // set up the reranker - p.parametersReranker = new ParametersFloat(p.l2i.size()); - - Instances[] iss = new Instances[options.end + 1]; - - for (int m = 0; m <= options.end; m++) { - String name = options.prefix_test + m; - iss[m] = new Instances(); - DB.println("create instances of part " + name); - p.pipe.getInstances(name, iss[m]); - } - - ExtractorReranker.initFeatures(); - p.pipeReranker.extractor.init(); - - ExtractorReranker.initStat(); - - p.train(options, iss); - - p.writeModell(options, p.parametersReranker, null, p.pipe.cl); - } - - if (options.test) { - - Reranker p = new Reranker(); - p.options = options; - - // set up the reranker - p.l2i = new Long2Int(options.hsize); - p.pipeReranker = new PipeReranker(options); - p.pipeReranker.extractor = new ExtractorReranker(p.l2i); - p.parametersReranker = new ParametersFloat(p.l2i.size()); - - // initialize the parser - p.pipe = new Pipe(options); - - // read parsing models - p.paramsParsers = new ParametersFloat[options.end + 1]; - - String nbestName = "n-best+" - + options.testfile.substring(options.testfile.length() - 12, options.testfile.length() - 1); - File fnbest = new File(nbestName); - int read = fnbest.exists() ? 2 : 1; - - if (read != 2) - for (int m = 0; m <= options.end; m++) { - String name = options.prefix_model + m; - p.paramsParsers[m] = new ParametersFloat(0); - p.readModel(name, p.pipe, p.paramsParsers[m]); - } - - p.readModel(options.modelName, p.pipeReranker, p.parametersReranker); - - ExtractorReranker.initFeatures(); - ExtractorReranker.initStat(); - p.pipeReranker.extractor.init(); - - p.rerankedParses(options, p.pipe, p.parametersReranker, false, nbestName); - - } - - System.out.println(); - - if (options.eval) { - System.out.println("\nEVALUATION PERFORMANCE:"); - ParserEvaluator.evaluate(options.goldfile, options.outfile); - } - - long end = System.currentTimeMillis(); - System.out.println("used time " + ((float) ((end - start) / 100) / 10)); - - Decoder.executerService.shutdown(); - Pipe.executerService.shutdown(); - System.out.println("end."); - - } - - /** - * Read the models and mapping - * - * @param options - * @param pipe - * @param prm - * @throws IOException - */ - public void readModel(String modelName, Pipe pipe, Parameters prm) throws IOException { - - DB.println("Reading data started: " + modelName); - - // prepare zipped reader - ZipInputStream zis = new ZipInputStream(new BufferedInputStream(new FileInputStream(modelName))); - zis.getNextEntry(); - DataInputStream dis = new DataInputStream(new BufferedInputStream(zis)); - - pipe.mf.read(dis); - - pipe.cl = new Cluster(dis); - - prm.read(dis); - - Long2Int l2i = new Long2Int(prm.size()); - DB.println("li size " + l2i.size()); - - pipe.extractor = new ExtractorClusterStacked[THREADS]; - - for (int t = 0; t < THREADS; t++) - pipe.extractor[t] = new ExtractorClusterStacked(l2i); - - ExtractorClusterStacked.initFeatures(); - - for (int t = 0; t < THREADS; t++) { - pipe.extractor[t].initStat(); - pipe.extractor[t].init(); - } - - Edges.read(dis); - - options.decodeProjective = dis.readBoolean(); - - ExtractorClusterStacked.maxForm = dis.readInt(); - - boolean foundInfo = false; - try { - String info = null; - int icnt = dis.readInt(); - for (int i = 0; i < icnt; i++) { - info = dis.readUTF(); - System.out.println(info); - } - } catch (Exception e) { - if (!foundInfo) - System.out.println("no info about training"); - } - - dis.close(); - - DB.println("Reading data finnished"); - - Decoder.NON_PROJECTIVITY_THRESHOLD = (float) options.decodeTH; - - // ExtractorClusterStacked.initStat(); - - } - - /** - * Read the models and mapping - * - * @param options - * @param pipe - * @param params - * @throws IOException - */ - public void readModel(String modelName, PipeReranker pipe, Parameters params) throws IOException { - - DB.println("Reading data started: " + modelName); - - // prepare zipped reader - ZipInputStream zis = new ZipInputStream(new BufferedInputStream(new FileInputStream(modelName))); - zis.getNextEntry(); - DataInputStream dis = new DataInputStream(new BufferedInputStream(zis)); - - pipe.mf.read(dis); - - // DB.println("reranker model "+pipe.mf.toString()); - - pipe.cl = new Cluster(dis); - - params.read(dis); - this.l2i = new Long2Int(params.size()); - DB.println("li size " + l2i.size()); - - pipe.extractor = new ExtractorReranker(l2i); - - ExtractorReranker.initFeatures(); - ExtractorReranker.initStat(); - - pipe.extractor.init(); - - Edges.read(dis); - - options.decodeProjective = dis.readBoolean(); - - ExtractorClusterStacked.maxForm = dis.readInt(); - - boolean foundInfo = false; - try { - String info = null; - int icnt = dis.readInt(); - for (int i = 0; i < icnt; i++) { - info = dis.readUTF(); - System.out.println(info); - } - } catch (Exception e) { - if (!foundInfo) - System.out.println("no info about training"); - } - - dis.close(); - - DB.println("Reading data finnished"); - - Decoder.NON_PROJECTIVITY_THRESHOLD = (float) options.decodeTH; - - // ExtractorClusterStacked.initStat(); - - } - - /** - * Do the training - * - * @param instanceLengths - * @param options - * @param pipe - * @param parametersReranker - * @param is - * @param cluster - * @throws IOException - * @throws InterruptedException - * @throws ClassNotFoundException - */ - public void train(OptionsSuper options, Instances[] iss) - throws IOException, InterruptedException, ClassNotFoundException { - - int read = 0; // 0 compute -- 1 compute and write -- 2 read parses - - DB.println("Training Information "); - DB.println("-------------------- "); - - ExtractorReranker.initStat(); - pipeReranker.extractor.init(); - - for (Extractor e : this.pipe.extractor) { - e.init(); - } - - int numInstances = 0; - int maxLenInstances = 0; - // int maxLenSentence=1; - for (Instances is : iss) { - numInstances += is.size(); - for (int i = 0; i < is.size(); i++) - if (maxLenInstances < is.length(i)) - maxLenInstances = is.length(i); - } - - DataF data = new DataF(maxLenInstances, pipe.mf.getFeatureCounter().get(PipeGen.REL).shortValue()); - - int iter = 0; - int del = 0; - float error = 0; - float f1 = 0; - - double upd = (double) (options.count * options.numIters) + options.numIters * 10; - - // float[][] = new float[this.NBest][3]; - FVR act = new FVR(); - - FVR pred = new FVR(); - - FVR f = new FVR(); - long[] vs = new long[ExtractorReranker._FC * maxLenInstances]; - - for (; iter < options.numIters; iter++) { - - System.out.print("Iteration " + iter + ": "); - error = 0; - f1 = 0; - - float las = 0, cnt = 0, averageScore = 0; - - float firstBestTotalError = 0, totalError = 0; - - long start = System.currentTimeMillis(); - - long last = System.currentTimeMillis(); - - long rerankTime = 0; - - String nbest = "n-best"; - File fnbest = new File(nbest); - read = fnbest.exists() ? 2 : 1; - - DataInputStream dis = null; - DataOutputStream dos = null; - - if (read == 1) { - - DB.println("computing and writting nbest list to file: " + nbest); - - ZipOutputStream zos = new ZipOutputStream(new BufferedOutputStream(new FileOutputStream(nbest))); - zos.putNextEntry(new ZipEntry("data")); - dos = new DataOutputStream(new BufferedOutputStream(zos)); - } - - // start reading again - if (read == 2) { - - // DB.println("reading nbest list from file: "+nbest); - - ZipInputStream zis = new ZipInputStream(new BufferedInputStream(new FileInputStream(nbest))); - zis.getNextEntry(); - dis = new DataInputStream(new BufferedInputStream(zis)); - } - - HashMap<Integer, Integer> remapped = new HashMap<Integer, Integer>(); - - int round = 0, instance = 0, length = 0, count = 0, changes = 0; - for (Instances is : iss) { - - F2SF fparser = this.paramsParsers[instance].getFV(); - round++; - - // go over the sentences in the instance - for (int n = 0; n < is.size(); n++) { - count += 1; - length += is.length(n); - upd--; - - if (is.labels[n].length > options.maxLen) - continue; - - List<ParseNBest> parses = null; - - short pos[] = is.pposs[n]; - - // read or write nbest list - if (read == 0 || read == 1 && iter == 0) { - data = pipe.fillVector(fparser, is, n, data, pipe.cl, THREADS, l2i); - parses = Decoder.decode(pos, data, options.decodeProjective, pipe.extractor[0]); - - if (parses.size() > NBest) - parses = parses.subList(0, NBest); - - if (read == 1) { - // write the forest - dos.writeInt(parses.size()); - for (int k = 0; k < parses.size(); k++) { - dos.writeUTF(parses.get(k).signature()); - dos.writeFloat((float) parses.get(k).f1); - } - } - } else if (read == 2) { - parses = new ArrayList<ParseNBest>(); - int parseCount = dis.readInt(); - for (int k = 0; k < parseCount; k++) { - ParseNBest p = new ParseNBest(dis.readUTF(), dis.readFloat()); - if (parses.size() < NBest) - parses.add(p); - } - } - - int best = 0; - float bestScore = -100; - int goldBest = 0; - double goldError = Float.MAX_VALUE; - - long startReranking = System.currentTimeMillis(); - - // score the n-best parses - for (int k = 0; k < parses.size(); k++) { - - ParseNBest p = parses.get(k); - - pipeReranker.extractor.extractFeatures(is, n, p, parses.indexOf(p), vs, pipe.cl); - - int rank = 1 * ExtractorReranker.s_type; - - f.clear(); - - for (long element : vs) { - if (element == Integer.MIN_VALUE) - break; - if (element > 0) - f.add(pipeReranker.extractor.li.l2i(element + rank)); - } - - f.add(pipeReranker.extractor.li.l2i(1 + rank), (float) p.f1); - float score = (parametersReranker.getScore(f)); - if (score > bestScore) { // rankScore[k][2]> - bestScore = score; - best = k; - - } - } - - // get the best parse in the n-best list - for (int k = 0; k < parses.size(); k++) { - - if (parses.get(k).heads.length != is.length(n)) { - DB.println("error " + n + " " + parses.get(k).heads.length + " " + is.length(n)); - continue; - } - double errg = pipe.errors(is, n, parses.get(k)); - if (goldError > errg) { - goldError = errg; - goldBest = k; - } - } - - ParseNBest firstBest = parses.get(0); - ParseNBest predParse = parses.get(best); - ParseNBest goldBestParse = parses.get(goldBest); - - double e = pipe.errors(is, n, predParse); - - Integer ctb = remapped.get(best); - if (ctb == null) - remapped.put(best, 1); - else - remapped.put(best, ctb + 1); - - String info = " 1best-error " + ((length - firstBestTotalError) / length) + " reranked " - + ((length - totalError) / length) + " chd " + changes + " " + " ps las " + (las / cnt) - + " avs " + (averageScore / count) + " "; - - if ((n + 1) % 500 == 0) - del = PipeGen.outValueErr(count, Math.round(error * 1000) / 1000, f1 / count, del, last, upd, - info); - - firstBestTotalError += Decoder.getError(firstBest, is, n, Decoder.LAS); - - totalError += Decoder.getError(predParse, is, n, Decoder.LAS); - - rerankTime += System.currentTimeMillis() - startReranking; - - if (best != 0) { - changes++; - } - - las += is.length(n) - Decoder.getError(goldBestParse, is, n, Decoder.LAS); - cnt += is.length(n); - - averageScore += predParse.f1; - - if (options.count < count) - break; - - if (Decoder.getError(goldBestParse, is, n, Decoder.LAS) >= Decoder.getError(predParse, is, n, - Decoder.LAS)) - continue; - - // get predicted feature vector - pipeReranker.extractor.extractFeatures(is, n, predParse, parses.indexOf(predParse), vs, pipe.cl); - - pred.clear(); - int rank = 1 * ExtractorReranker.s_type; - - for (long element : vs) { - if (element == Integer.MIN_VALUE) - break; - if (element > 0) - pred.add(pipeReranker.extractor.li.l2i(element + rank)); - } - pred.add(pipeReranker.extractor.li.l2i(1 + rank), (float) predParse.f1); - error += 1; - - pipeReranker.extractor.extractFeatures(is, n, goldBestParse, parses.indexOf(goldBestParse), vs, - pipe.cl); - - act.clear(); - rank = 1 * ExtractorReranker.s_type; - for (long element : vs) { - if (element == Integer.MIN_VALUE) - break; - if (element > 0) - act.add(pipeReranker.extractor.li.l2i(element + rank)); - } - - act.add(pipeReranker.extractor.li.l2i(1 + rank), (float) goldBestParse.f1); - float lam_dist = parametersReranker.getScore(act) - (parametersReranker.getScore(pred)); - - parametersReranker.update(act, pred, is, n, null, upd, e, lam_dist); - - } - instance++; - - } - - String info = " td " + ((Decoder.timeDecotder) / 1000000F) + " tr " + ((Decoder.timeRearrange) / 1000000F) - + " te " + ((Pipe.timeExtract) / 1000000F) + " nz " + parametersReranker.countNZ() + " 1best-error " - + ((length - firstBestTotalError) / length) + " reranked-best " + ((length - totalError) / length) - + " rds " + round + " " + " rerank-t " + (rerankTime / count) + " chd " + changes + " " - + " ps las " + (las / cnt) + " avs " + (averageScore / count) + " "; - - // DB.println("remapped "+remapped); - - PipeGen.outValueErr(count, Math.round(error * 1000) / 1000, f1 / count, del, last, upd, info); - del = 0; - long end = System.currentTimeMillis(); - System.out.println(" time:" + (end - start)); - Decoder.timeDecotder = 0; - Decoder.timeRearrange = 0; - Pipe.timeExtract = 0; - - if (dos != null) - dos.close(); - if (dis != null) - dis.close(); - - } - DB.println("sb " + parametersReranker.parameters[this.pipeReranker.extractor.li - .l2i(4090378920L + 1 * ExtractorReranker.s_type)]);// 4090378266 - parametersReranker.average(iter * numInstances); - - } - - /** - * Do the parsing - * - * @param options - * @param pipe - * @param params - * @throws IOException - */ - private void rerankedParses(OptionsSuper options, Pipe pipe, ParametersFloat params, boolean maxInfo, - String nbestName) throws Exception { - - long start = System.currentTimeMillis(); - - ExtractorClusterStacked.initFeatures(); - - DataInputStream dis = null; - DataOutputStream dos = null; - - float olas = 0, olcnt = 0; - - File fnbest = new File(nbestName); - int read = fnbest.exists() ? 2 : 1; - if (read == 1) { - - DB.println("computing and writting nbest list to file: " + nbestName); - - ZipOutputStream zos = new ZipOutputStream(new BufferedOutputStream(new FileOutputStream(nbestName))); - zos.putNextEntry(new ZipEntry("data")); - dos = new DataOutputStream(new BufferedOutputStream(zos)); - } - - if (read == 2) { - - // DB.println("reading nbest list from file: "+nbestName); - - ZipInputStream zis = new ZipInputStream(new BufferedInputStream(new FileInputStream(nbestName))); - zis.getNextEntry(); - dis = new DataInputStream(new BufferedInputStream(zis)); - } - - for (ParametersFloat paramsParser : this.paramsParsers) { - - CONLLReader09 depReader = new CONLLReader09(options.testfile, options.formatTask); - CONLLWriter09 depWriter = new CONLLWriter09(options.outfile, options.formatTask); - - float las = 0, lcnt = 0, averageScore = 0; - int cnt = 0; - int del = 0; - - long last = System.currentTimeMillis(); - - String[] types = new String[pipe.mf.getFeatureCounter().get(PipeGen.REL)]; - for (Entry<String, Integer> e : MFB.getFeatureSet().get(PipeGen.REL).entrySet()) - types[e.getValue()] = e.getKey(); - - System.out.print("Processing Sentence: "); - - FVR f = new FVR(); - - while (true) { - - Instances is = new Instances(); - is.init(1, new MFB(), options.formatTask); - - SentenceData09 instance = pipe.nextInstance(is, depReader); - if (instance == null) - break; - cnt++; - - String[] forms = instance.forms; - - List<ParseNBest> parses = null; - - // read or write nbest list - if (read == 0 || read == 1) { - parses = this.parseNBest(instance, paramsParser); - // data = pipe.fillVector(fparser, is, n, data, - // pipe.cl,THREADS); - // parses = Decoder.decode(pos, data, - // options.decodeProjective); - - if (parses.size() > NBest) - parses = parses.subList(0, NBest); - - if (read == 1) { - // write the forest - dos.writeInt(parses.size()); - for (int k = 0; k < parses.size(); k++) { - dos.writeUTF(parses.get(k).signature()); - dos.writeFloat((float) parses.get(k).f1); - } - } - } else if (read == 2) { - parses = new ArrayList<ParseNBest>(); - int parseCount = dis.readInt(); - for (int k = 0; k < parseCount; k++) { - ParseNBest p = new ParseNBest(dis.readUTF(), dis.readFloat()); - if (parses.size() < NBest) - parses.add(p); - } - } - - nbest += parses.size(); - - // List<ParseNBest> parses = this.parseNBest(instance, - // this.paramsParsers[m]); - - long vs[] = new long[ExtractorReranker._FC * is.length(0)]; - - float bestScore = 0; - int best = 0; - - for (int k = 0; k < parses.size(); k++) { - - ParseNBest p = parses.get(k); - - pipeReranker.extractor.extractFeatures(is, 0, p, k, vs, pipeReranker.cl); - - int rank = 1 * ExtractorReranker.s_type; - f.clear(); - for (long element : vs) { - if (element == Integer.MIN_VALUE) - break; - if (element > 0) - f.add(pipeReranker.extractor.li.l2i(element + rank)); - } - f.add(pipeReranker.extractor.li.l2i(1 + rank), (float) p.f1); - - float score = (parametersReranker.getScore(f)); - if (score > bestScore) { // rankScore[k][2]> - bestScore = score; - best = k; - - } - } - // change to best - ParseNBest d = parses.get(best); - - las += (is.length(0) - 1) - Decoder.getError(d, is, 0, Decoder.LAS); - lcnt += is.length(0) - 1; - - averageScore += d.f1; - - SentenceData09 i09 = new SentenceData09(instance); - - i09.createSemantic(instance); - - for (int j = 0; j < forms.length - 1; j++) { - i09.plabels[j] = types[d.labels[j + 1]]; - i09.pheads[j] = d.heads[j + 1]; - } - - depWriter.write(i09); - String info = "" + (averageScore / cnt) + " "; - - if (cnt % 10 == 0) - del = PipeGen.outValueErr(cnt, lcnt - las, las / lcnt, del, last, 0, info);// outValue(cnt, - // del,last, - // info); - - } - - // pipe.close(); - - depWriter.finishWriting(); - long end = System.currentTimeMillis(); - DB.println("rank\n" + rank + "\n"); - DB.println("x-best-las " + amongxbest + " x-best-ula " + amongxbest_ula + " cnt " + cnt + " x-best-las " - + ((float) amongxbest / cnt) + " x-best-ula " + ((float) amongxbest_ula / cnt) + " nbest " - + ((float) nbest / cnt) + " 1best " + ((float) (rank.get(0) == null ? 0 : rank.get(0)) / cnt) - + " best-proj " + ((float) bestProj / cnt) + " Sum LAS " - + ((float) this.smallestErrorSum / countAllNodes) + " " + "" + (las / lcnt)); - - // DB.println("errors "+error); - olas += las; - olcnt += lcnt; - rank.clear(); - amongxbest = 0; - amongxbest_ula = 0; - cnt = 0; - nbest = 0; - bestProj = 0; - if (maxInfo) - System.out.println("Used time " + (end - start)); - if (maxInfo) - System.out.println("forms count " + Instances.m_count + " unkown " + Instances.m_unkown); - } - - if (dos != null) { - dos.flush(); - dos.close(); - } - if (dis != null) - dis.close(); - - DB.println("\n overall las " + (olas / olcnt)); - } - - public SentenceData09 parse(SentenceData09 instance, ParametersFloat params) { - - String[] types = new String[pipe.mf.getFeatureCounter().get(PipeGen.REL)]; - for (Entry<String, Integer> e : MFB.getFeatureSet().get(PipeGen.REL).entrySet()) - types[e.getValue()] = e.getKey(); - - Instances is = new Instances(); - is.init(1, new MFB(), options.formatTask); - new CONLLReader09().insert(is, instance); - - String[] forms = instance.forms; - - // use for the training ppos - DataF d2; - try { - d2 = pipe.fillVector(params.getFV(), is, 0, null, pipe.cl, THREADS, l2i);// cnt-1 - } catch (Exception e) { - e.printStackTrace(); - return null; - } - short[] pos = is.pposs[0]; - - List<ParseNBest> parses = null; - Parse d = null; - try { - parses = Decoder.decode(pos, d2, options.decodeProjective, pipe.extractor[0]); // cnt-1 - d = parses.get(0); - } catch (Exception e) { - e.printStackTrace(); - } - - if (parses.size() > NBest) - parses = parses.subList(0, NBest); - - int g_las = Decoder.getGoldRank(parses, is, 0, Decoder.LAS); - int g_ula = Decoder.getGoldRank(parses, is, 0, !Decoder.LAS); - - int smallest = Decoder.getSmallestError(parses, is, 0, !Decoder.LAS); - smallestErrorSum += is.length(0) - smallest; - countAllNodes += is.length(0); - - if (g_las >= 0) - amongxbest++; - if (g_ula >= 0) - amongxbest_ula++; - - nbest += parses.size(); - - Integer r = rank.get(g_las); - if (r == null) - rank.put(g_las, 1); - else - rank.put(g_las, r + 1); - - this.pipe.errors(is, 0, d); - - float errBestProj = (float) this.pipe.errors(is, 0, Decoder.bestProj); - - if (errBestProj == 0) - bestProj++; - - SentenceData09 i09 = new SentenceData09(instance); - - i09.createSemantic(instance); - - for (int j = 0; j < forms.length - 1; j++) { - i09.plabels[j] = types[d.labels[j + 1]]; - i09.pheads[j] = d.heads[j + 1]; - } - return i09; - - } - - public List<ParseNBest> parseNBest(SentenceData09 instance, ParametersFloat params) { - - Instances is = new Instances(); - is.init(1, new MFB(), options.formatTask); - new CONLLReader09().insert(is, instance); - - // use for the training ppos - DataF d2; - try { - d2 = pipe.fillVector(params.getFV(), is, 0, null, pipe.cl, THREADS, l2i);// cnt-1 - } catch (Exception e) { - e.printStackTrace(); - return null; - } - short[] pos = is.pposs[0]; - - List<ParseNBest> parses = null; - try { - parses = Decoder.decode(pos, d2, options.decodeProjective, pipe.extractor[0]); // cnt-1 - } catch (Exception e) { - e.printStackTrace(); - } - - if (parses.size() > NBest) - parses = parses.subList(0, NBest); - - return parses; - - } - - /* - * (non-Javadoc) - * - * @see is2.tools.Tool#apply(is2.data.SentenceData09) - */ - @Override - public SentenceData09 apply(SentenceData09 snt09) { - - try { - parse(snt09, this.parametersReranker); - } catch (Exception e) { - e.printStackTrace(); - } - - Decoder.executerService.shutdown(); - Pipe.executerService.shutdown(); - - return snt09; - } - - /** - * Write the parsing model - * - * @param options - * @param params - * @param extension - * @throws FileNotFoundException - * @throws IOException - */ - private void writeModell(OptionsSuper options, ParametersFloat params, String extension, Cluster cs) - throws FileNotFoundException, IOException { - - String name = extension == null ? options.modelName : options.modelName + extension; - DB.println("Writting model: " + name); - ZipOutputStream zos = new ZipOutputStream(new BufferedOutputStream(new FileOutputStream(name))); - zos.putNextEntry(new ZipEntry("data")); - DataOutputStream dos = new DataOutputStream(new BufferedOutputStream(zos)); - - MFB.writeData(dos); - cs.write(dos); - - params.write(dos); - - Edges.write(dos); - - dos.writeBoolean(options.decodeProjective); - - dos.writeInt(ExtractorClusterStacked.maxForm); - - dos.writeInt(5); // Info count - dos.writeUTF("Used parser " + Reranker.class.toString()); - dos.writeUTF("Creation date " + (new SimpleDateFormat("yyyy.MM.dd HH:mm:ss")).format(new Date())); - dos.writeUTF("Training data " + options.trainfile); - dos.writeUTF("Iterations " + options.numIters + " Used sentences " + options.count); - dos.writeUTF("Cluster " + options.clusterFile); - - dos.flush(); - dos.close(); - } - -} diff --git a/dependencyParser/mate-tools/src/is2/parserR2/package.html b/dependencyParser/mate-tools/src/is2/parserR2/package.html deleted file mode 100755 index 6b06482..0000000 --- a/dependencyParser/mate-tools/src/is2/parserR2/package.html +++ /dev/null @@ -1,3 +0,0 @@ -Package info - - n-best parser -<br> \ No newline at end of file diff --git a/dependencyParser/mate-tools/src/is2/tag/ExtractorT2.java b/dependencyParser/mate-tools/src/is2/tag/ExtractorT2.java deleted file mode 100644 index 688dc21..0000000 --- a/dependencyParser/mate-tools/src/is2/tag/ExtractorT2.java +++ /dev/null @@ -1,766 +0,0 @@ -package is2.tag; - -import java.io.DataInputStream; -import java.io.DataOutputStream; -import java.io.IOException; -import java.util.ArrayList; -import java.util.Collections; -import java.util.HashMap; -import java.util.HashSet; -import java.util.Map.Entry; - -import is2.data.Cluster; -import is2.data.F2SF; -import is2.data.Instances; -import is2.data.InstancesTagger; -import is2.data.Long2IntInterface; -import is2.data.ParametersFloat; -import is2.data.PipeGen; -import is2.data.SentenceData09; -import is2.io.CONLLReader09; -import is2.tools.IPipe; -import is2.util.OptionsSuper; - -final public class ExtractorT2 extends PipeGen implements IPipe { - - final static int _MAX = 71; - - private static final String STWRD = "STWRD", STPOS = "STPOS"; - - private static short s_pos, s_word, s_char; - protected static short s_type; - private static int _strp; - static int _CEND; - - public String[] types; - - final public MFO mf; - - final MFO.Data4 d1 = new MFO.Data4(), d2 = new MFO.Data4(), d3 = new MFO.Data4(), dw = new MFO.Data4(), - dwp = new MFO.Data4(); - - Cluster cl; - - private OptionsSuper options; - - public ExtractorT2(OptionsSuper options, MFO mf) throws IOException { - this.mf = mf; - this.options = options; - } - - public HashMap<Integer, int[]> _pps = new HashMap<Integer, int[]>(); - - private Lexicon lx; - - public int corpusWrds = 0; - - /* - * (non-Javadoc) - * - * @see is2.tag5.IPipe#createInstances(java.lang.String, java.io.File, - * is2.data.InstancesTagger) - */ - @Override - public Instances createInstances(String file) { - return createInstances(file, -1, -1); - } - - public Instances createInstances(String file, int skipStart, int skipEnd) { - - InstancesTagger is = new InstancesTagger(); - - CONLLReader09 depReader = new CONLLReader09(CONLLReader09.NO_NORMALIZE); - - depReader.startReading(file); - mf.register(POS, "<root-POS>"); - mf.register(WORD, "<root>"); - - System.out.println("Registering feature parts "); - - HashMap<Integer, HashSet<Integer>> pps = new HashMap<Integer, HashSet<Integer>>(); - - int ic = 0; - while (true) { - - SentenceData09 instance1 = depReader.getNext(); - - if (instance1 == null) - break; - ic++; - - String[] w = instance1.forms; - for (String element : w) - mf.register(WORD, element); - for (String element : w) - registerChars(CHAR, element); - for (String element : w) - registerChars(CHAR, element.toLowerCase()); - - w = instance1.plemmas; - for (String element : w) - mf.register(WORD, element); - for (String element : w) - registerChars(CHAR, element); - - w = instance1.gpos; - for (String element : w) { - mf.register(POS, element); - } - for (int i1 = 0; i1 < w.length; i1++) { - HashSet<Integer> ps = pps.get(mf.getValue(POS, w[i1])); - if (ps == null) { - ps = new HashSet<Integer>(); - pps.put(mf.getValue(POS, w[i1]), ps); - } - if (i1 + 1 < w.length) - ps.add(mf.getValue(POS, w[i1 + 1])); - } - - } - - for (Entry<Integer, HashSet<Integer>> e : pps.entrySet()) { - int[] ps = new int[e.getValue().size()]; - int j = 0; - for (int k : e.getValue().toArray(new Integer[0])) { - ps[j++] = k; - } - _pps.put(e.getKey(), ps); - // System.out.println("put "+e.getKey()+" "+ps.length+" pps size - // "+_pps.size()); - } - - System.out.println("words in corpus " + (corpusWrds = mf.getFeatureCounter().get(PipeGen.WORD))); - if (options.clusterFile == null) - cl = new Cluster(); - else - cl = new Cluster(options.clusterFile, mf, 6); - - if (options.lexicon == null) - lx = new Lexicon(new byte[0][0]); - else - lx = new Lexicon(options.lexicon, mf); - - initFeatures(); - - mf.calculateBits(); - initValues(); - - System.out.println("" + mf.toString()); - - depReader.startReading(file); - - int num1 = 0; - - int instanceCount = 0; - - System.out.print("Creating Instances: "); - - is.init(ic, mf); - int del = 0; - - while (true) { - if (num1 % 100 == 0) - del = outValue(num1, del); - - if (num1 >= skipStart && num1 < skipEnd && skipStart >= 0) { - SentenceData09 instance1 = depReader.getNext(); - if (instance1 == null) - break; - num1++; - continue; - } - - SentenceData09 instance1 = depReader.getNext(is); - if (instance1 == null) - break; - - is.fillChars(instance1, instanceCount, _CEND); - for (int k = 0; k < instance1.length(); k++) { - if (instance1.ppos[k].contains("\\|")) - - is.pposs[num1][k] = (short) mf.getValue(FM, instance1.ppos[k].split("\\|")[1]); - } - - if (num1 > options.count) - break; - - num1++; - instanceCount++; - } - outValue(num1, del); - System.out.println(); - - types = MFO.reverse(mf.getFeatureSet().get(POS)); - return is; - } - - private void registerChars(String type, String word) { - for (int i = 0; i < word.length(); i++) - mf.register(type, Character.toString(word.charAt(i))); - } - - /* - * (non-Javadoc) - * - * @see is2.tag5.IPipe#initValues() - */ - @Override - public void initValues() { - s_pos = mf.getFeatureBits(POS); - s_word = mf.getFeatureBits(WORD); - s_type = mf.getFeatureBits(TYPE); - s_char = mf.getFeatureBits(CHAR); - - d1.a0 = s_type; - d1.a1 = s_pos; - d1.a2 = s_word; - d1.a3 = s_word; - d2.a0 = s_type; - d2.a1 = s_pos; - d2.a2 = s_pos; - d2.a3 = s_pos; - d2.a4 = s_pos; - d2.a5 = s_pos; - d2.a6 = s_pos; - d3.a0 = s_type; - d3.a1 = s_pos; - d3.a2 = s_char; - d3.a3 = s_char; - d3.a4 = s_char; - d3.a5 = s_char; - d3.a6 = s_char; - d3.a7 = s_char; - dw.a0 = s_type; - dw.a1 = s_pos; - dw.a2 = s_word; - dw.a3 = s_word; - dw.a4 = s_word; - dw.a5 = s_word; - dw.a6 = s_word; - dw.a7 = s_word; - dwp.a0 = s_type; - dwp.a1 = s_pos; - dwp.a2 = s_word; - dwp.a3 = s_pos; - dwp.a4 = s_word; - - } - - /* - * (non-Javadoc) - * - * @see is2.tag5.IPipe#initFeatures() - */ - @Override - public void initFeatures() { - // 62 - for (int t = 0; t < 67; t++) - mf.register(TYPE, "F" + t); - - mf.register(POS, MID); - _strp = mf.register(POS, STR); - mf.register(POS, END); - - mf.register(WORD, STR); - mf.register(WORD, END); - - _CEND = mf.register(CHAR, END); - - mf.register(WORD, STWRD); - mf.register(POS, STPOS); - - } - - final public void addFeatures(InstancesTagger is, int ic, String fs, int i, short pposs[], int[] forms, - int[] lemmas, long[] vs) { - - int c0 = is.chars[ic][i][0], c1 = is.chars[ic][i][1], c2 = is.chars[ic][i][2], c3 = is.chars[ic][i][3], - c4 = is.chars[ic][i][4], c5 = is.chars[ic][i][5]; - int e0 = is.chars[ic][i][6], e1 = is.chars[ic][i][7], e2 = is.chars[ic][i][8], e3 = is.chars[ic][i][9], - e4 = is.chars[ic][i][10]; - - int f = 1, n = 0; - short upper = 0, number = 1; - for (int k1 = 0; k1 < fs.length(); k1++) { - char c = fs.charAt(k1); - if (Character.isUpperCase(c)) { - if (k1 == 0) - upper = 1; - else { - // first char + another - if (upper == 1) - upper = 3; - // another uppercase in the word - else if (upper == 0) - upper = 2; - } - } - - // first - if (Character.isDigit(c) && k1 == 0) - number = 2; - else if (Character.isDigit(c) && number == 1) - number = 3; - // if(number==2 &&Character.isDigit(c)) number=4; - // if(number==4 && !Character.isDigit(c)) number=5; - } - - // if (i==0 && upper>0) upper+=4; - int form = forms[i], form2 = forms[i] < corpusWrds ? forms[i] : -1; - - int len = forms.length; - long l; - d1.v0 = f++; - d1.v2 = form2; - l = mf.calc3(d1); - vs[n++] = mf.calc3(d1); - - d1.v0 = f++; - d1.v2 = is.formlc[ic][i]; - vs[n++] = mf.calc3(d1); - - d3.v2 = c0; - d3.v3 = c1; - d3.v4 = c2; - d3.v5 = c3; - d3.v6 = c4; - d3.v0 = f++; - vs[n++] = mf.calc3(d3); - d3.v0 = f++; - vs[n++] = mf.calc4(d3); - d3.v0 = f++; - vs[n++] = mf.calc5(d3); - d3.v0 = f++; - vs[n++] = mf.calc6(d3); - d3.v0 = f++; - vs[n++] = mf.calc7(d3); - - if (form != -1) { - d3.v2 = c2; - d3.v3 = c3; - d3.v4 = c4; - d3.v5 = c5; - d3.v6 = cl.getLP(form); - d3.v0 = f; - vs[n++] = mf.calc6(d3); - d3.v0 = f + 1; - vs[n++] = mf.calc7(d3); - } - f += 2; - - if (form > 0) { - d3.v0 = f; - d3.v5 = cl.getLP(form); - vs[n++] = mf.calc6(d3); - d3.v0 = f + 1; - d3.v4 = cl.getLP(form); - vs[n++] = mf.calc5(d3); - d3.v0 = f + 2; - d3.v3 = cl.getLP(form); - vs[n++] = mf.calc4(d3); - } - f += 5; - - d3.v2 = e0; - d3.v3 = e1; - d3.v4 = e2; - d3.v5 = e3; - d3.v6 = e4; - d3.v0 = f++; - vs[n++] = mf.calc3(d3); - d3.v0 = f++; - vs[n++] = l = mf.calc4(d3); - vs[n++] = d3.calcs(3, upper, l); - d3.v0 = f++; - vs[n++] = l = mf.calc5(d3); - vs[n++] = d3.calcs(3, upper, l); - d3.v0 = f++; - vs[n++] = l = mf.calc6(d3); - vs[n++] = d3.calcs(3, upper, l); - d3.v0 = f++; - vs[n++] = l = mf.calc7(d3); - vs[n++] = d3.calcs(3, upper, l); - - if (form > 0) { - d3.v0 = f; - d3.v5 = cl.getLP(form); - vs[n++] = mf.calc6(d3); - d3.v0 = f + 1; - d3.v4 = cl.getLP(form); - vs[n++] = mf.calc5(d3); - d3.v0 = f + 2; - d3.v3 = cl.getLP(form); - vs[n++] = mf.calc4(d3); - - d3.v2 = e0; - d3.v3 = e1; - d3.v4 = e2; - - d3.v0 = f + 3; - d3.v2 = lx.getTag(form); - vs[n++] = mf.calc3(d3); - d3.v0 = f + 4; - d3.v4 = cl.getLP(form); - vs[n++] = mf.calc5(d3); - d3.v0 = f + 5; - d3.v3 = cl.getLP(form); - vs[n++] = mf.calc4(d3); - } - f += 6; - - // sign three-grams - d3.v0 = f++; - d3.v2 = c1; - d3.v3 = c2; - d3.v4 = c3; - vs[n++] = mf.calc5(d3); - d3.v0 = f++; - d3.v2 = c2; - d3.v3 = c3; - d3.v4 = c4; - vs[n++] = mf.calc5(d3); - d3.v0 = f++; - d3.v2 = c3; - d3.v3 = c4; - d3.v4 = c5; - vs[n++] = mf.calc5(d3); - - // sign quad-grams - d3.v0 = f++; - d3.v2 = c1; - d3.v3 = c2; - d3.v4 = c3; - d3.v5 = c4; - vs[n++] = mf.calc6(d3); - d3.v0 = f++; - d3.v2 = c2; - d3.v3 = c3; - d3.v4 = c4; - d3.v5 = c5; - vs[n++] = mf.calc6(d3); // changed to 6 - - if (i + 1 < len && forms[i + 1] < this.corpusWrds) { - dw.v0 = f; - dw.v2 = forms[i + 1]; - dw.v3 = form2; - vs[n++] = mf.calc4(dw); - } - f++; - - if (len > i + 1) { - - if (forms[i + 1] < corpusWrds) { - dw.v0 = f; - dw.v2 = forms[i + 1]; - vs[n++] = mf.calc3(dw); - } - - d3.v0 = f + 1; - d3.v2 = is.chars[ic][i + 1][0]; - vs[n++] = mf.calc3(d3); - d3.v0 = f + 2; - d3.v2 = is.chars[ic][i + 1][6]; - vs[n++] = mf.calc3(d3); - - d3.v2 = e0; - d3.v3 = e1; - - d3.v0 = f + 3; - d3.v4 = is.chars[ic][i + 1][0]; - vs[n++] = mf.calc5(d3); - d3.v0 = f + 4; - d3.v4 = is.chars[ic][i + 1][6]; - vs[n++] = mf.calc5(d3); - - if (is.chars[ic][i + 1][11] > 1) { // instance.forms[i+1].length() - - d3.v0 = f + 5; - d3.v2 = is.chars[ic][i + 1][0]; - d3.v3 = is.chars[ic][i + 1][1]; - vs[n++] = mf.calc4(d3); - d3.v0 = f + 6; - d3.v2 = is.chars[ic][i + 1][6]; - d3.v3 = is.chars[ic][i + 1][7]; - vs[n++] = mf.calc4(d3); - - d3.v2 = e0; - d3.v3 = e1; - - d3.v0 = f + 7; - d3.v4 = is.chars[ic][i + 1][0]; - d3.v5 = is.chars[ic][i + 1][1]; - vs[n++] = mf.calc6(d3); - d3.v0 = f + 8; - d3.v4 = is.chars[ic][i + 1][6]; - d3.v5 = is.chars[ic][i + 1][7]; - vs[n++] = mf.calc6(d3); - - if (forms[i + 1] > 0) { - d3.v0 = f + 9; - d3.v2 = is.chars[ic][i + 1][0]; - d3.v3 = is.chars[ic][i + 1][1]; - d3.v4 = cl.getLP(forms[i + 1]); - vs[n++] = mf.calc5(d3); - d3.v0 = f + 10; - d3.v2 = is.chars[ic][i + 1][6]; - d3.v3 = is.chars[ic][i + 1][7]; - d3.v4 = cl.getLP(forms[i + 1]); - vs[n++] = mf.calc5(d3); - } - } - - if (forms[i + 1] > 0) { - - dw.v0 = f + 11; - dw.v2 = cl.getLP(forms[i + 1]); - dw.v3 = form2; - vs[n++] = mf.calc4(dw); - - // if (forms[i]>0){ - // dw.v0=f+12; dw.v2= cl.getLP(forms[i+1]); - // dw.v3=lx.getTag(form);vs[n++]=mf.calc4(dw); - // dw.v0=f+13; dw.v2= cl.getLP(forms[i]); - // dw.v3=lx.getTag(forms[i+1]);vs[n++]=mf.calc4(dw); - // } - } - - if (len > i + 2) { - if (forms[i + 2] < corpusWrds && forms[i + 1] < corpusWrds) { - dw.v0 = f + 12; - dw.v2 = forms[i + 2]; - dw.v3 = forms[i + 1]; - vs[n++] = mf.calc4(dw); - vs[n++] = mf.calc3(dw); - } - d2.v0 = f + 13; - d2.v2 = pposs[i + 1]; - d2.v3 = pposs[i + 2]; - vs[n++] = mf.calc4(d2); - } - - if (len > i + 3) { - if (forms[i + 3] < this.corpusWrds && forms[i + 2] < this.corpusWrds) { - dw.v0 = f + 14; - dw.v2 = forms[i + 3]; - dw.v3 = forms[i + 2]; - vs[n++] = mf.calc4(dw); - vs[n++] = mf.calc3(dw); - } - } - } - f += 15; - - // length - d2.v0 = f++; - d2.v2 = is.chars[ic][i][11]; - vs[n++] = mf.calc3(d2); - - // contains a number - d2.v0 = f++; - d2.v2 = number; - vs[n++] = mf.calc3(d2); - if (lemmas[i] < corpusWrds) { - d1.v0 = f; - d1.v2 = lemmas[i]; - vs[n++] = mf.calc3(d1); - } - f++; - - if (i != 0 && len > i + 1) { - - if (lemmas[i - 1] < corpusWrds && lemmas[i + 1] < corpusWrds) { - dw.v0 = f; - dw.v2 = lemmas[i - 1]; - dw.v3 = lemmas[i + 1]; - vs[n++] = mf.calc4(dw); - } - - d2.v0 = f + 1; - d2.v2 = pposs[i - 1]; - d2.v3 = pposs[i + 1]; - vs[n++] = mf.calc4(d2); - } - f += 2; - - d2.v0 = f++; - d2.v2 = i >= 1 ? pposs[i - 1] : _strp; - vs[n++] = mf.calc3(d2); - - if (i > 0) { - - dw.v0 = f; - dw.v2 = i >= 1 ? forms[i - 1] < corpusWrds ? forms[i - 1] : -1 : _strp; - vs[n++] = mf.calc3(dw); - f++; - - if (lemmas[i - 1] < corpusWrds) { - dw.v0 = f; - dw.v2 = i >= 1 ? lemmas[i - 1] : _strp; - vs[n++] = mf.calc3(dw); - } - f++; - - // if (len>i+1) {d2.v0=f; d2.v2= pposs[i-1];d2.v3= pposs[i+1]; - // vs[n++]=mf.calc4(d2);} - // f++; - - if (i > 1) { - - d2.v0 = f++; - d2.v2 = i < 2 ? _strp : pposs[i - 2]; - vs[n++] = mf.calc3(d2); - d2.v0 = f++; - d2.v2 = pposs[i - 1]; - d2.v3 = pposs[i - 2]; - vs[n++] = mf.calc4(d2); - - if (forms[i - 2] < corpusWrds) { - dw.v0 = f; - dw.v2 = forms[i - 2]; - vs[n++] = mf.calc3(dw); - } - f++; - if (forms[i - 1] < corpusWrds) { - dwp.v0 = f; - dwp.v2 = forms[i - 1]; - dwp.v3 = pposs[i - 2]; - vs[n++] = mf.calc4(dwp); - } - f++; - if (forms[i - 2] < corpusWrds) { - dwp.v0 = f; - dwp.v2 = forms[i - 2]; - dwp.v3 = pposs[i - 1]; - vs[n++] = mf.calc4(dwp); - } - f++; - - if (i > 2) { - d2.v0 = f++; - d2.v2 = pposs[i - 3]; - vs[n++] = mf.calc3(d2); - d2.v0 = f++; - d2.v2 = pposs[i - 2]; - d2.v3 = pposs[i - 3]; - vs[n++] = mf.calc4(d2); - if (forms[i - 3] < this.corpusWrds && forms[i - 2] < this.corpusWrds) { - dw.v0 = f; - dw.v2 = forms[i - 3]; - dw.v3 = forms[i - 2]; - vs[n++] = mf.calc4(dw); - } - f++; - } - } - } - vs[n] = Integer.MIN_VALUE; - } - - public int fillFeatureVectorsOne(String fs, ParametersFloat params, int w1, InstancesTagger is, int n, short[] pos, - Long2IntInterface li, float[] score) { - - float best = -1000; - int bestType = -1; - - F2SF f = new F2SF(params.parameters); - - long vs[] = new long[_MAX]; - int lemmas[]; - if (options.noLemmas) - lemmas = new int[is.length(n)]; - else - lemmas = is.plemmas[n]; - addFeatures(is, n, fs, w1, pos, is.forms[n], lemmas, vs); - - // for(int t = 0; t < types.length; t++) { - - for (int t = 0; t < types.length; t++) { - - int p = t << s_type; - - f.clear(); - for (int k = 0; vs[k] != Integer.MIN_VALUE; k++) - if (vs[k] > 0) - f.add(li.l2i(vs[k] + p)); - if (f.score > best) { - bestType = t; - score[w1] = best = f.score; - } - } - return bestType; - - } - - public ArrayList<POS> classify(String fs, ParametersFloat params, int w1, InstancesTagger is, int n, short[] pos, - Long2IntInterface li) { - - F2SF f = new F2SF(params.parameters); - - long vs[] = new long[_MAX]; - int lemmas[]; - if (options.noLemmas) - lemmas = new int[is.length(n)]; - else - lemmas = is.plemmas[n]; - addFeatures(is, n, fs, w1, pos, is.forms[n], lemmas, vs); - - ArrayList<POS> best = new ArrayList<POS>(types.length); - - for (int t = 0; t < types.length; t++) { - - int p = t << s_type; - - f.clear(); - f.add(vs, li, p); - POS px = new POS(t, f.score); - best.add(px); - } - Collections.sort(best); - return best; - - } - - /* - * (non-Javadoc) - * - * @see is2.tag5.IPipe#write(java.io.DataOutputStream) - */ - @Override - public void write(DataOutputStream dos) { - try { - this.cl.write(dos); - this.lx.write(dos); - dos.writeInt(this.corpusWrds); - dos.writeInt(_pps.size()); - - for (Entry<Integer, int[]> e : _pps.entrySet()) { - dos.writeInt(e.getValue().length); - for (int k : e.getValue()) - dos.writeInt(k); - dos.writeInt(e.getKey()); - } - } catch (IOException e) { - e.printStackTrace(); - } - } - - public void read(DataInputStream dis) { - try { - this.cl = new Cluster(dis); - this.lx = new Lexicon(dis); - this.corpusWrds = dis.readInt(); - - int pc = dis.readInt(); - for (int j = 0; j < pc; j++) { - int ps[] = new int[dis.readInt()]; - for (int k = 0; k < ps.length; k++) - ps[k] = dis.readInt(); - _pps.put(dis.readInt(), ps); - } - // System.out.println("_pps "+ps.length); - - } catch (IOException e) { - e.printStackTrace(); - } - } -} diff --git a/dependencyParser/mate-tools/src/is2/tag/Lexicon.java b/dependencyParser/mate-tools/src/is2/tag/Lexicon.java deleted file mode 100644 index f719f26..0000000 --- a/dependencyParser/mate-tools/src/is2/tag/Lexicon.java +++ /dev/null @@ -1,150 +0,0 @@ -/** - * - */ -package is2.tag; - -import java.io.BufferedReader; -import java.io.DataInputStream; -import java.io.DataOutputStream; -import java.io.FileInputStream; -import java.io.IOException; -import java.io.InputStreamReader; - -import is2.data.IEncoderPlus; -import is2.data.PipeGen; -import is2.util.DB; - -/** - * @author Dr. Bernd Bohnet, 07.01.2011 - * - * - */ -public class Lexicon { - - public static final String FR = "FR", TAG = "TAG"; - - final byte[][] word2tag; - - public Lexicon(byte[][] w2t) { - - word2tag = w2t; - } - - public Lexicon(String clusterFile, IEncoderPlus mf) { - - final String REGEX = "\t"; - - // register words - try { - BufferedReader inputReader = new BufferedReader( - new InputStreamReader(new FileInputStream(clusterFile), "UTF-8"), 32768); - - int cnt = 0; - String line; - while ((line = inputReader.readLine()) != null) { - - try { - String[] split = line.split(REGEX); - // int f = Integer.parseInt(split[2]); - // if (f>2) { - cnt++; - mf.register(PipeGen.WORD, split[0]); - mf.register(TAG, split[1]); // tag - - if (split.length > 1) - mf.register(FR, split[1]); // frequency - // } - } catch (Exception e) { - System.out.println("Error in lexicon line " + cnt + " error: " + e.getMessage()); - } - } - System.out.println("read number of words from lexicon " + cnt); - inputReader.close(); - - } catch (Exception e) { - e.printStackTrace(); - } - - word2tag = new byte[mf.getFeatureCounter().get(PipeGen.WORD)][1]; - // insert words - try { - String line; - BufferedReader inputReader = new BufferedReader( - new InputStreamReader(new FileInputStream(clusterFile), "UTF-8"), 32768); - - while ((line = inputReader.readLine()) != null) { - - String[] split = line.split(REGEX); - int w = mf.getValue(PipeGen.WORD, split[0]); - if (w < 0) - continue; - word2tag[w][0] = (byte) mf.getValue(TAG, split[1]); - // if (split.length>1) word2tag[w][1]= (byte)mf.getValue(FR, - // split[2]); // frequency - } - inputReader.close(); - int fill = 0; - for (byte[] element : word2tag) { - if (element[0] != 0) - fill++; - } - System.out.println("filled " + fill + " of " + word2tag.length); - - } catch (Exception e) { - e.printStackTrace(); - } - } - - /** - * Read the cluster - * - * @param dos - * @throws IOException - */ - public Lexicon(DataInputStream dis) throws IOException { - - word2tag = new byte[dis.readInt()][1]; - for (int i = 0; i < word2tag.length; i++) { - word2tag[i][0] = dis.readByte(); - // word2tag[i][1]=dis.readByte(); - } - DB.println("Read lexicon with " + word2tag.length + " words "); - } - - /** - * Write the cluster - * - * @param dos - * @throws IOException - */ - public void write(DataOutputStream dos) throws IOException { - - dos.writeInt(word2tag.length); - for (byte[] i : word2tag) { - dos.writeByte(i[0]); - // dos.writeByte(i[1]); - } - - } - - /** - * @param form - * @return - */ - public int getTag(int form) { - if (word2tag.length < form || form < 0) - return -1; - return word2tag[form][0]; - } - - /** - * @param form - * @return - */ - public int getConf(int form) { - if (word2tag.length < form || form < 0) - return -1; - return word2tag[form][1]; - } - -} diff --git a/dependencyParser/mate-tools/src/is2/tag/MFO.java b/dependencyParser/mate-tools/src/is2/tag/MFO.java deleted file mode 100644 index d8ac62d..0000000 --- a/dependencyParser/mate-tools/src/is2/tag/MFO.java +++ /dev/null @@ -1,527 +0,0 @@ -package is2.tag; - -import java.io.DataInputStream; -import java.io.DataOutputStream; -import java.io.IOException; -import java.util.HashMap; -import java.util.Map.Entry; - -import is2.data.IEncoderPlus; -import is2.util.DB; - -/** - * Map Features, do not map long to integer - * - * @author Bernd Bohnet, 20.09.2009 - */ - -final public class MFO implements IEncoderPlus { - - /** The features and its values */ - private final HashMap<String, HashMap<String, Integer>> m_featureSets = new HashMap<String, HashMap<String, Integer>>(); - - /** The feature class and the number of values */ - private final HashMap<String, Integer> m_featureCounters = new HashMap<String, Integer>(); - - /** The number of bits needed to encode a feature */ - final HashMap<String, Integer> m_featureBits = new HashMap<String, Integer>(); - - /** Integer counter for long2int */ - // private int count=0; - - /** Stop growing */ - public boolean stop = false; - - final public static String NONE = "<None>"; - - final public static class Data4 { - public int shift; - public short a0, a1, a2, a3, a4, a5, a6, a7, a8, a9; - public int v0, v1, v2, v3, v4, v5, v6, v7, v8, v9; - - final public long calcs(int b, long v, long l) { - if (l < 0) - return l; - l |= v << shift; - shift += b; - return l; - } - - final public long calc2() { - - if (v0 < 0 || v1 < 0) - return -1; - - long l = v0; - shift = a0; - l |= (long) v1 << shift; - shift += a1; - - return l; - } - - final public long calc3() { - - if (v0 < 0 || v1 < 0 || v2 < 0) - return -1; - // if (v1<0||v2<0) return -1; - - long l = v0; - shift = a0; - l |= (long) v1 << shift; - shift += a1; - l |= (long) v2 << shift; - shift = (short) (shift + a2); - - // shift=; - return l; - } - - final public long calc4() { - if (v0 < 0 || v1 < 0 || v2 < 0 || v3 < 0) - return -1; - - long l = v0; - shift = a0; - l |= (long) v1 << shift; - shift += a1; - l |= (long) v2 << shift; - shift += a2; - l |= (long) v3 << shift; - shift = shift + a3; - - return l; - } - - final public long calc5() { - - if (v0 < 0 || v1 < 0 || v2 < 0 || v3 < 0 || v4 < 0) - return -1; - - long l = v0; - shift = a0; - l |= (long) v1 << shift; - shift += a1; - l |= (long) v2 << shift; - shift += a2; - l |= (long) v3 << shift; - shift += a3; - l |= (long) v4 << shift; - shift = shift + a4; - - return l; - } - - final public long calc6() { - - if (v0 < 0 || v1 < 0 || v2 < 0 || v3 < 0 || v4 < 0 || v5 < 0) - return -1; - - long l = v0; - shift = a0; - l |= (long) v1 << shift; - shift += a1; - l |= (long) v2 << shift; - shift += a2; - l |= (long) v3 << shift; - shift += a3; - l |= (long) v4 << shift; - shift += a4; - l |= (long) v5 << shift; - shift = shift + a5; - - return l; - } - - final public long calc7() { - - if (v0 < 0 || v1 < 0 || v2 < 0 || v3 < 0 || v4 < 0 || v5 < 0 || v6 < 0) - return -1; - - long l = v0; - shift = a0; - l |= (long) v1 << shift; - shift += a1; - l |= (long) v2 << shift; - shift += a2; - l |= (long) v3 << shift; - shift += a3; - l |= (long) v4 << shift; - shift += a4; - l |= (long) v5 << shift; - shift += a5; - l |= (long) v6 << shift; - shift = shift + a6; - - return l; - } - - final public long calc8() { - - if (v0 < 0 || v1 < 0 || v2 < 0 || v3 < 0 || v4 < 0 || v5 < 0 || v6 < 0 || v7 < 0) - return -1; - - long l = v0; - shift = a0; - l |= (long) v1 << shift; - shift += a1; - l |= (long) v2 << shift; - shift += a2; - l |= (long) v3 << shift; - shift += a3; - l |= (long) v4 << shift; - shift += a4; - l |= (long) v5 << shift; - shift += a5; - l |= (long) v6 << shift; - shift += a6; - l |= (long) v7 << shift; - shift = shift + a7; - - return l; - } - - } - - public MFO() { - } - - // public int size() {return count;} - - final public void stop() { - stop = true; - } - - final public void start() { - stop = false; - } - - /** - * Register an attribute class, if it not exists and add a possible value - * - * @param type - * @param type2 - */ - @Override - final public int register(String a, String v) { - - HashMap<String, Integer> fs = getFeatureSet().get(a); - if (fs == null) { - fs = new HashMap<String, Integer>(); - getFeatureSet().put(a, fs); - fs.put(NONE, 0); - getFeatureCounter().put(a, 1); - } - Integer c = getFeatureCounter().get(a); - - Integer i = fs.get(v); - if (i == null) { - fs.put(v, c); - c++; - getFeatureCounter().put(a, c); - return c - 1; - } else - return i; - } - - /** - * Calculates the number of bits needed to encode a feature - */ - public void calculateBits() { - - for (Entry<String, Integer> e : getFeatureCounter().entrySet()) { - int bits = (int) Math.ceil((Math.log(e.getValue() + 1) / Math.log(2))); - m_featureBits.put(e.getKey(), bits); - } - - // System.out.println("total number of needed bits "+total); - } - - @Override - public String toString() { - - StringBuffer content = new StringBuffer(); - for (Entry<String, Integer> e : getFeatureCounter().entrySet()) { - content.append(e.getKey() + " " + e.getValue()); - content.append(':'); - // HashMap<String,Integer> vs = getFeatureSet().get(e.getKey()); - content.append(getFeatureBits(e.getKey())); - - /* - * if (vs.size()<120) for(Entry<String,Integer> e2 : vs.entrySet()) - * { content.append(e2.getKey()+" ("+e2.getValue()+") "); } - */ - content.append('\n'); - - } - return content.toString(); - } - - static final public long calcs(Data4 d, int b, long v, long l) { - if (l < 0) - return l; - l |= v << d.shift; - d.shift += b; - return l; - } - - final public short getFeatureBits(String a) { - return (short) m_featureBits.get(a).intValue(); - } - - /** - * Get the integer place holder of the string value v of the type a - * - * @param t - * the type - * @param v - * the value - * @return the integer place holder of v - */ - @Override - final public int getValue(String t, String v) { - - if (m_featureSets.get(t) == null) - return -1; - Integer vi = m_featureSets.get(t).get(v); - if (vi == null) - return -1; // stop && - return vi.intValue(); - } - - /** - * Static version of getValue - * - * @see getValue - */ - final public int getValueS(String a, String v) { - - if (m_featureSets.get(a) == null) - return -1; - Integer vi = m_featureSets.get(a).get(v); - if (vi == null) - return -1; // stop && - return vi.intValue(); - } - - public int hasValue(String a, String v) { - - Integer vi = m_featureSets.get(a).get(v); - if (vi == null) - return -1; - return vi.intValue(); - } - - final public long calc2(Data4 d) { - - if (d.v0 < 0 || d.v1 < 0) - return -1; - // if (d.v1<0||d.v2<0) return -1; - - long l = d.v0; - short shift = d.a0; - l |= (long) d.v1 << shift; - shift += d.a1; - // l |= (long)d.v2<<shift; - d.shift = shift; - - // d.shift=; - return l; - } - - final public long calc3(Data4 d) { - - if (d.v0 < 0 || d.v1 < 0 || d.v2 < 0) - return -1; - - long l = d.v0; - short shift = d.a0; - l |= (long) d.v1 << shift; - shift += d.a1; - l |= (long) d.v2 << shift; - d.shift = shift + d.a2; - return l; - } - - final public long calc4(Data4 d) { - if (d.v0 < 0 || d.v1 < 0 || d.v2 < 0 || d.v3 < 0) - return -1; - - long l = d.v0; - int shift = d.a0; - l |= (long) d.v1 << shift; - shift += d.a1; - l |= (long) d.v2 << shift; - shift += d.a2; - l |= (long) d.v3 << shift; - d.shift = shift + d.a3; - - return l; - } - - final public long calc5(Data4 d) { - - if (d.v0 < 0 || d.v1 < 0 || d.v2 < 0 || d.v3 < 0 || d.v4 < 0) - return -1; - - long l = d.v0; - int shift = d.a0; - l |= (long) d.v1 << shift; - shift += d.a1; - l |= (long) d.v2 << shift; - shift += d.a2; - l |= (long) d.v3 << shift; - shift += d.a3; - l |= (long) d.v4 << shift; - d.shift = shift + d.a4; - - return l; - } - - final public long calc6(Data4 d) { - - if (d.v0 < 0 || d.v1 < 0 || d.v2 < 0 || d.v3 < 0 || d.v4 < 0 || d.v5 < 0) - return -1; - - long l = d.v0; - int shift = d.a0; - l |= (long) d.v1 << shift; - shift += d.a1; - l |= (long) d.v2 << shift; - shift += d.a2; - l |= (long) d.v3 << shift; - shift += d.a3; - l |= (long) d.v4 << shift; - shift += d.a4; - l |= (long) d.v5 << shift; - d.shift = shift + d.a5; - - return l; - } - - final public long calc7(Data4 d) { - - if (d.v0 < 0 || d.v1 < 0 || d.v2 < 0 || d.v3 < 0 || d.v4 < 0 || d.v5 < 0 || d.v6 < 0) - return -1; - - long l = d.v0; - int shift = d.a0; - l |= (long) d.v1 << shift; - shift += d.a1; - l |= (long) d.v2 << shift; - shift += d.a2; - l |= (long) d.v3 << shift; - shift += d.a3; - l |= (long) d.v4 << shift; - shift += d.a4; - l |= (long) d.v5 << shift; - shift += d.a5; - l |= (long) d.v6 << shift; - d.shift = shift + d.a6; - - return l; - } - - final public long calc8(Data4 d) { - - if (d.v0 < 0 || d.v1 < 0 || d.v2 < 0 || d.v3 < 0 || d.v4 < 0 || d.v5 < 0 || d.v6 < 0 || d.v7 < 0) - return -1; - - long l = d.v0; - int shift = d.a0; - l |= (long) d.v1 << shift; - shift += d.a1; - l |= (long) d.v2 << shift; - shift += d.a2; - l |= (long) d.v3 << shift; - shift += d.a3; - l |= (long) d.v4 << shift; - shift += d.a4; - l |= (long) d.v5 << shift; - shift += d.a5; - l |= (long) d.v6 << shift; - shift += d.a6; - l |= (long) d.v7 << shift; - d.shift = shift + d.a7; - - return l; - } - - /** - * Maps a long to a integer value. This is very useful to save memory for - * sparse data long values - * - * @param node - * @return the integer - */ - static public int misses = 0; - static public int good = 0; - - /** - * Write the data - * - * @param dos - * @throws IOException - */ - public void writeData(DataOutputStream dos) throws IOException { - dos.writeInt(getFeatureSet().size()); - for (Entry<String, HashMap<String, Integer>> e : getFeatureSet().entrySet()) { - dos.writeUTF(e.getKey()); - dos.writeInt(e.getValue().size()); - - for (Entry<String, Integer> e2 : e.getValue().entrySet()) { - - if (e2.getKey() == null) - DB.println("key " + e2.getKey() + " value " + e2.getValue() + " e -key " + e.getKey()); - dos.writeUTF(e2.getKey()); - dos.writeInt(e2.getValue()); - - } - - } - } - - public void read(DataInputStream din) throws IOException { - - int size = din.readInt(); - for (int i = 0; i < size; i++) { - String k = din.readUTF(); - int size2 = din.readInt(); - - HashMap<String, Integer> h = new HashMap<String, Integer>(); - getFeatureSet().put(k, h); - for (int j = 0; j < size2; j++) { - h.put(din.readUTF(), din.readInt()); - } - getFeatureCounter().put(k, size2); - } - - calculateBits(); - } - - /** - * Clear the data - */ - public void clearData() { - getFeatureSet().clear(); - m_featureBits.clear(); - getFeatureSet().clear(); - } - - @Override - public HashMap<String, Integer> getFeatureCounter() { - return m_featureCounters; - } - - public HashMap<String, HashMap<String, Integer>> getFeatureSet() { - return m_featureSets; - } - - static public String[] reverse(HashMap<String, Integer> v) { - String[] set = new String[v.size()]; - for (Entry<String, Integer> e : v.entrySet()) { - set[e.getValue()] = e.getKey(); - } - return set; - } -} diff --git a/dependencyParser/mate-tools/src/is2/tag/Options.java b/dependencyParser/mate-tools/src/is2/tag/Options.java deleted file mode 100644 index 0998c70..0000000 --- a/dependencyParser/mate-tools/src/is2/tag/Options.java +++ /dev/null @@ -1,132 +0,0 @@ -package is2.tag; - -import java.io.File; - -import is2.util.OptionsSuper; - -public final class Options extends OptionsSuper { - - public Options(String[] args) { - - for (int i = 0; i < args.length; i++) { - String[] pair = args[i].split(":"); - - if (pair[0].equals("--help")) - explain(); - else if (pair[0].equals("-train")) { - train = true; - trainfile = args[i + 1]; - } else if (pair[0].equals("-eval")) { - eval = true; - goldfile = args[i + 1]; - i++; - } else if (pair[0].equals("-test")) { - test = true; - testfile = args[i + 1]; - i++; - } else if (pair[0].equals("-i")) { - numIters = Integer.parseInt(args[i + 1]); - i++; - } else if (pair[0].equals("-out")) { - outfile = args[i + 1]; - i++; - } else if (pair[0].equals("-decode")) { - decodeProjective = args[i + 1].equals("proj"); - i++; - } else if (pair[0].equals("-confidence")) { - - conf = true; - } - - else if (pair[0].equals("-count")) { - count = Integer.parseInt(args[i + 1]); - i++; - } else if (pair[0].equals("-model")) { - modelName = args[i + 1]; - i++; - } else if (pair[0].equals("-tmp")) { - tmp = args[i + 1]; - i++; - } else if (pair[0].equals("-format")) { - // format = args[i+1]; - formatTask = Integer.parseInt(args[i + 1]); - i++; - } else if (pair[0].equals("-allfeatures")) { - allFeatures = true; - } else if (pair[0].equals("-nonormalize")) { - normalize = false; - } else if (pair[0].equals("-nframes")) { - // format = args[i+1]; - nbframes = args[i + 1]; - i++; - - } else if (pair[0].equals("-pframes")) { - // format = args[i+1]; - pbframes = args[i + 1]; - i++; - } else if (pair[0].equals("-nopred")) { - nopred = true; - } else if (pair[0].equals("-divide")) { - keep = true; - } else if (pair[0].equals("-lexicon")) { - lexicon = args[i + 1]; - i++; - - } else - super.addOption(args, i); - - } - - try { - - if (trainfile != null) { - - if (keep && tmp != null) { - trainforest = new File(tmp); - if (!trainforest.exists()) - keep = false; - - } else if (tmp != null) { - trainforest = File.createTempFile("train", ".tmp", new File(tmp)); - trainforest.deleteOnExit(); - } else { - trainforest = File.createTempFile("train", ".tmp"); // ,new - // File("F:\\") - trainforest.deleteOnExit(); - } - - } - - } catch (java.io.IOException e) { - System.out.println("Unable to create tmp files for feature forests!"); - System.out.println(e); - System.exit(0); - } - } - - private void explain() { - System.out.println("Usage: "); - System.out.println("java -class mate.jar is2.parser.Parser [Options]"); - System.out.println(); - System.out.println("Example: "); - System.out.println( - " java -class mate.jar is2.parser.Parser -model eps3.model -train corpora/conll08st/train/train.closed -test corpora/conll08st/devel/devel.closed -out b3.test -eval corpora/conll08st/devel/devel.closed -count 2000 -i 6"); - System.out.println(""); - System.out.println("Options:"); - System.out.println(""); - System.out.println(" -train <file> the corpus a model is trained on; default " + this.trainfile); - System.out.println(" -test <file> the input corpus for testing; default " + this.testfile); - System.out.println(" -out <file> the output corpus (result) of a test run; default " + this.outfile); - System.out.println(" -model <file> the parsing model for traing the model is stored in the files"); - System.out.println( - " and for parsing the model is load from this file; default " + this.modelName); - System.out.println( - " -i <number> the number of training iterations; good numbers are 10 for smaller corpora and 6 for bigger; default " - + this.numIters); - System.out.println(" -count <number> the n first sentences of the corpus are take for the training default " - + this.count); - System.out.println(" -format <number> conll format of the year 8 or 9; default " + this.formatTask); - - System.exit(0); - } -} diff --git a/dependencyParser/mate-tools/src/is2/tag/POS.java b/dependencyParser/mate-tools/src/is2/tag/POS.java deleted file mode 100644 index 30f1e41..0000000 --- a/dependencyParser/mate-tools/src/is2/tag/POS.java +++ /dev/null @@ -1,30 +0,0 @@ -package is2.tag; - -public class POS implements Comparable<POS> { - - // pos tag - public int p; - - // score of the tag - public float s; - - // the position of the word in the sentence - public int w; - - public POS(int p, float s) { - this.p = p; - this.s = s; - } - - @Override - public int compareTo(POS o) { - - return s > o.s ? -1 : s == o.s ? 0 : 1; - } - - @Override - public String toString() { - return "" + p + ":" + s; - } - -} diff --git a/dependencyParser/mate-tools/src/is2/tag/Tagger.java b/dependencyParser/mate-tools/src/is2/tag/Tagger.java deleted file mode 100644 index 2ea146e..0000000 --- a/dependencyParser/mate-tools/src/is2/tag/Tagger.java +++ /dev/null @@ -1,506 +0,0 @@ -package is2.tag; - -import java.io.BufferedInputStream; -import java.io.BufferedOutputStream; -import java.io.DataInputStream; -import java.io.DataOutputStream; -import java.io.FileInputStream; -import java.io.FileNotFoundException; -import java.io.FileOutputStream; -import java.io.IOException; -import java.util.ArrayList; -import java.util.Map.Entry; -import java.util.zip.ZipEntry; -import java.util.zip.ZipInputStream; -import java.util.zip.ZipOutputStream; - -import is2.data.F2SF; -import is2.data.FV; -import is2.data.Instances; -import is2.data.InstancesTagger; -import is2.data.Long2Int; -import is2.data.Long2IntInterface; -import is2.data.ParametersFloat; -import is2.data.PipeGen; -import is2.data.SentenceData09; -import is2.io.CONLLReader09; -import is2.io.CONLLWriter09; -import is2.io.IOGenerals; -import is2.tools.IPipe; -import is2.tools.Tool; -import is2.tools.Train; -import is2.util.DB; -import is2.util.Evaluator; -import is2.util.OptionsSuper; - -public class Tagger implements Tool, Train { - - public ExtractorT2 pipe; - public ParametersFloat params; - public Long2IntInterface li; - public MFO mf; - - /** - * Initialize - * - * @param options - */ - public Tagger(Options options) { - - // load the model - try { - readModel(options); - } catch (Exception e) { - e.printStackTrace(); - } - } - - public Tagger() { - } - - /** - * @param modelFileName - * the file name of the model - */ - public Tagger(String modelFileName) { - this(new Options(new String[] { "-model", modelFileName })); - } - - public static void main(String[] args) throws FileNotFoundException, Exception { - - long start = System.currentTimeMillis(); - Options options = new Options(args); - - Tagger tagger = new Tagger(); - - if (options.train) { - - // depReader.normalizeOn=false; - - tagger.li = new Long2Int(options.hsize); - tagger.pipe = new ExtractorT2(options, tagger.mf = new MFO()); - - // tagger.pipe.li =tagger.li; - - InstancesTagger is = (InstancesTagger) tagger.pipe.createInstances(options.trainfile); - - tagger.params = new ParametersFloat(tagger.li.size()); - - tagger.train(options, tagger.pipe, tagger.params, is); - tagger.writeModel(options, tagger.pipe, tagger.params); - - } - - if (options.test) { - - tagger.readModel(options); - - tagger.out(options, tagger.pipe, tagger.params); - } - - System.out.println(); - - if (options.eval) { - System.out.println("\nEVALUATION PERFORMANCE:"); - Evaluator.evaluateTagger(options.goldfile, options.outfile, options.format); - } - long end = System.currentTimeMillis(); - System.out.println("used time " + ((float) ((end - start) / 100) / 10)); - } - - @Override - public void readModel(OptionsSuper options) { - - try { - pipe = new ExtractorT2(options, mf = new MFO()); - // load the model - ZipInputStream zis = new ZipInputStream(new BufferedInputStream(new FileInputStream(options.modelName))); - zis.getNextEntry(); - DataInputStream dis = new DataInputStream(new BufferedInputStream(zis)); - - pipe.mf.read(dis); - pipe.initValues(); - pipe.initFeatures(); - - params = new ParametersFloat(0); - params.read(dis); - li = new Long2Int(params.parameters.length); - pipe.read(dis); - - dis.close(); - - pipe.types = new String[pipe.mf.getFeatureCounter().get(PipeGen.POS)]; - for (Entry<String, Integer> e : pipe.mf.getFeatureSet().get(PipeGen.POS).entrySet()) - pipe.types[e.getValue()] = e.getKey(); - - DB.println("Loading data finished. "); - } catch (Exception e) { - e.printStackTrace(); - } - } - - /** - * Do the training - * - * @param instanceLengths - * @param options - * @param pipe - * @param params - * @throws IOException - * @throws InterruptedException - * @throws ClassNotFoundException - */ - @Override - public void train(OptionsSuper options, IPipe pipe, ParametersFloat params, Instances is2) { - - InstancesTagger is = (InstancesTagger) is2; - String wds[] = MFO.reverse(this.pipe.mf.getFeatureSet().get(PipeGen.WORD)); - - int pd[] = new int[this.pipe.types.length]; - for (int k = 0; k < pd.length; k++) - pd[k] = k; - - int del = 0; - F2SF f = new F2SF(params.parameters); - long vs[] = new long[ExtractorT2._MAX]; - - int types = this.pipe.types.length; - - double upd = options.numIters * is.size() + 1; - - for (int i = 0; i < options.numIters; i++) { - - long start = System.currentTimeMillis(); - - int numInstances = is.size(); - - long last = System.currentTimeMillis(); - FV pred = new FV(), gold = new FV(); - - int correct = 0, count = 0; - System.out.print("Iteration " + i + ": "); - - for (int n = 0; n < numInstances; n++) { - - if ((n + 1) % 500 == 0) - del = PipeGen.outValueErr(n + 1, (count - correct), (float) correct / (float) count, del, last, - upd); - - int length = is.length(n); - - upd--; - - for (int w = 1; w < length; w++) { - - double best = -1000; - short bestType = -1; - - int[] lemmas; // = is.lemmas[n]; - if (options.noLemmas) - lemmas = new int[is.length(n)]; - else - lemmas = is.plemmas[n]; - - this.pipe.addFeatures(is, n, wds[is.forms[n][w]], w, is.gpos[n], is.forms[n], lemmas, vs); - - for (short t = 0; t < types; t++) { - - // the hypotheses of a part of speech tag - long p = t << ExtractorT2.s_type; - f.clear(); - - // add the features to the vector - for (int k1 = 0; vs[k1] != Integer.MIN_VALUE; k1++) { - if (vs[k1] > 0) - f.add(this.li.l2i(vs[k1] | p)); - } - - if (f.score > best) { - bestType = t; - best = f.score; - } - } - - count++; - if (bestType == is.gpos[n][w]) { - correct++; - continue; - } - - pred.clear(); - for (int k1 = 0; vs[k1] != Integer.MIN_VALUE; k1++) - if (vs[k1] > 0) - pred.add(this.li.l2i(vs[k1] | bestType << ExtractorT2.s_type)); - - gold.clear(); - for (int k1 = 0; vs[k1] != Integer.MIN_VALUE; k1++) - if (vs[k1] > 0) - gold.add(this.li.l2i(vs[k1] | is.gpos[n][w] << ExtractorT2.s_type)); - - params.update(pred, gold, (float) upd, 1.0F); - } - } - - long end = System.currentTimeMillis(); - String info = "time " + (end - start); - PipeGen.outValueErr(numInstances, (count - correct), (float) correct / (float) count, del, last, upd, info); - System.out.println(); - del = 0; - } - - params.average(options.numIters * is.size()); - - } - - /** - * Tag a sentence - * - * @param options - * @param pipe - * @param params - * @throws IOException - */ - @Override - public void out(OptionsSuper options, IPipe pipe, ParametersFloat params) { - - try { - - long start = System.currentTimeMillis(); - // change this backe!!! - // CONLLReader09 depReader = new CONLLReader09(options.testfile, - // CONLLReader09.NO_NORMALIZE); - CONLLReader09 depReader = new CONLLReader09(options.testfile); - - CONLLWriter09 depWriter = new CONLLWriter09(options.outfile); - - System.out.print("Processing Sentence: "); - pipe.initValues(); - - int cnt = 0; - int del = 0; - while (true) { - - InstancesTagger is = new InstancesTagger(); - is.init(1, mf); - SentenceData09 instance = depReader.getNext(is); - if (instance == null || instance.forms == null) - break; - - is.fillChars(instance, 0, ExtractorT2._CEND); - - cnt++; - - tag(is, instance); - - SentenceData09 i09 = new SentenceData09(instance); - i09.createSemantic(instance); - depWriter.write(i09); - - if (cnt % 100 == 0) - del = PipeGen.outValue(cnt, del); - - } - del = PipeGen.outValue(cnt, del); - depWriter.finishWriting(); - - // int r[] = new int[14]; - /* - * for(Entry<Float, Integer> e : map.entrySet()) { - * if(e.getKey()<min)min=e.getKey(); - * if(e.getKey()>max)max=e.getKey(); - * - * if(e.getKey()<0.2) r[0]++; else if(e.getKey()<0.5) - * r[1]+=e.getValue(); else if(e.getKey()<0.7) r[2]+=e.getValue(); - * else if(e.getKey()<0.8) r[3]+=e.getValue(); else - * if(e.getKey()<0.9) r[4]+=e.getValue(); else if(e.getKey()<1.0) - * r[5]+=e.getValue(); else if(e.getKey()<1.2) r[6]+=e.getValue(); - * else if(e.getKey()<1.3) r[7]+=e.getValue(); else - * if(e.getKey()<1.4) r[8]+=e.getValue(); else if(e.getKey()<1.5) - * r[9]+=e.getValue(); else if(e.getKey()<1.9) r[10]+=e.getValue(); - * else if(e.getKey()<2.2) r[11]+=e.getValue(); else - * if(e.getKey()<2.5) r[12]+=e.getValue(); else if(e.getKey()>=2.5) - * r[13]+=e.getValue(); } - */ - // for(int k=0;k<r.length;k++) System.out.println(k+" "+r[k][0]+" - // "+((float)r[k][1]/(float)r[k][0])+" good "+r[k][1]); - // System.out.println("min "+min+" "+max); - - long end = System.currentTimeMillis(); - System.out.println(PipeGen.getSecondsPerInstnace(cnt, (end - start))); - System.out.println(PipeGen.getUsedTime(end - start)); - } catch (Exception e) { - e.printStackTrace(); - } - } - - public SentenceData09 tag(SentenceData09 instance) { - InstancesTagger is = new InstancesTagger(); - is.init(1, pipe.mf); - new CONLLReader09().insert(is, instance); - is.fillChars(instance, 0, ExtractorT2._CEND); - tag(is, instance); - - return instance; - } - - private void tag(InstancesTagger is, SentenceData09 instance) { - - int length = instance.ppos.length; - - short[] pos = new short[instance.gpos.length]; - - float sc[] = new float[instance.ppos.length]; - - instance.ppos[0] = IOGenerals.ROOT_POS; - pos[0] = (short) pipe.mf.getValue(PipeGen.POS, IOGenerals.ROOT_POS); - - for (int j = 1; j < length; j++) { - - short bestType = (short) pipe.fillFeatureVectorsOne(instance.forms[j], params, j, is, 0, pos, this.li, sc); - pos[j] = bestType; - instance.ppos[j] = pipe.types[bestType]; - } - - for (int j = 1; j < length; j++) { - - short bestType = (short) pipe.fillFeatureVectorsOne(instance.forms[j], params, j, is, 0, pos, this.li, sc); - instance.ppos[j] = pipe.types[bestType]; - pos[j] = bestType; - } - } - - /** - * Tag a single word and return a n-best list of Part-of-Speech tags. - * - * @param is - * set of sentences - * @param instanceIndex - * index to the sentence in question - * @param word - * word to be tagged - * @return n-best list of Part-of-Speech tags - */ - public ArrayList<POS> tag(InstancesTagger is, int instanceIndex, int word, String wordForm) { - - return pipe.classify(wordForm, params, word, is, instanceIndex, is.pposs[instanceIndex], li); - - } - - public ArrayList<String> tagStrings(InstancesTagger is, int instanceIndex, int word, String wordForm) { - - ArrayList<POS> plist = pipe.classify(wordForm, params, word, is, instanceIndex, is.pposs[instanceIndex], li); - String pos[] = MFO.reverse(this.pipe.mf.getFeatureSet().get(PipeGen.POS)); - - ArrayList<String> postags = null; - for (POS p : plist) { - try { - postags.add(pos[p.p]); - } catch (Exception e) { - e.printStackTrace(); - } - } - return postags; - - } - - /** - * Tag a sentence - * - * @param options - * @param pipe - * @param parametersReranker - * @throws IOException - */ - public String[] tag(String[] words, String[] lemmas) { - - String[] pposs = new String[words.length]; - - try { - pipe.initValues(); - - int length = words.length + 1; - - InstancesTagger is = new InstancesTagger(); - is.init(1, pipe.mf); - is.createInstance09(length); - - SentenceData09 instance = new SentenceData09(); - instance.forms = new String[length]; - instance.forms[0] = IOGenerals.ROOT; - - instance.plemmas = new String[length]; - instance.plemmas[0] = IOGenerals.ROOT_LEMMA; - - for (int j = 0; j < words.length; j++) { - instance.forms[j + 1] = words[j]; - instance.plemmas[j + 1] = lemmas[j]; - } - - for (int j = 0; j < length; j++) { - is.setForm(0, j, instance.forms[j]); - is.setLemma(0, j, instance.plemmas[j]); - } - - instance.ppos = new String[length]; - - is.fillChars(instance, 0, ExtractorT2._CEND); - - this.tag(is, instance); - - for (int j = 0; j < words.length; j++) { - pposs[j] = instance.ppos[j + 1]; - } - } catch (Exception e) { - e.printStackTrace(); - } - - return pposs; - - } - - /* - * (non-Javadoc) - * - * @see is2.tools.Tool#apply(is2.data.SentenceData09) - */ - @Override - public SentenceData09 apply(SentenceData09 snt) { - - SentenceData09 it = new SentenceData09(); - it.createWithRoot(snt); - it = tag(it); - SentenceData09 i09 = new SentenceData09(it); - i09.createSemantic(it); - return i09; - } - - /* - * (non-Javadoc) - * - * @see is2.tools.Train#writeModel(is2.util.OptionsSuper, is2.mtag2.Pipe, - * is2.data.ParametersFloat) - */ - @Override - public void writeModel(OptionsSuper options, IPipe pipe, is2.data.ParametersFloat params) { - try { - ZipOutputStream zos = new ZipOutputStream( - new BufferedOutputStream(new FileOutputStream(options.modelName))); - zos.putNextEntry(new ZipEntry("data")); - DataOutputStream dos = new DataOutputStream(new BufferedOutputStream(zos)); - - this.pipe.mf.writeData(dos); - - DB.println("number of parameters " + params.parameters.length); - dos.flush(); - - params.write(dos); - pipe.write(dos); - dos.flush(); - dos.close(); - - } catch (Exception e) { - e.printStackTrace(); - } - } - -} diff --git a/dependencyParser/mate-tools/src/is2/tag/package.html b/dependencyParser/mate-tools/src/is2/tag/package.html deleted file mode 100644 index 469fdf6..0000000 --- a/dependencyParser/mate-tools/src/is2/tag/package.html +++ /dev/null @@ -1,4 +0,0 @@ -Package info -<br><br> -This parser includes a tagger into the dependency parser -<br> \ No newline at end of file diff --git a/dependencyParser/mate-tools/src/is2/tools/IPipe.java b/dependencyParser/mate-tools/src/is2/tools/IPipe.java deleted file mode 100644 index b6e0e02..0000000 --- a/dependencyParser/mate-tools/src/is2/tools/IPipe.java +++ /dev/null @@ -1,28 +0,0 @@ -/** - * - */ -package is2.tools; - -import java.io.DataOutputStream; - -import is2.data.Instances; - -/** - * @author Dr. Bernd Bohnet, 25.12.2010 - * - * - */ -public interface IPipe { - - public abstract Instances createInstances(String file); - - public abstract void initValues(); - - /** - * Initialize the features types. - */ - public abstract void initFeatures(); - - public abstract void write(DataOutputStream dos); - -} \ No newline at end of file diff --git a/dependencyParser/mate-tools/src/is2/tools/Retrainable.java b/dependencyParser/mate-tools/src/is2/tools/Retrainable.java deleted file mode 100644 index 86fbfcc..0000000 --- a/dependencyParser/mate-tools/src/is2/tools/Retrainable.java +++ /dev/null @@ -1,30 +0,0 @@ -package is2.tools; - -import is2.data.SentenceData09; - -/** - * Provides Methods for the retraining - * - * @author bohnetbd - * - */ -public interface Retrainable { - - /** - * Retrains with a update factor (upd). The retraining stops when the model - * was successful adapted or it gave up after the maximal iterations. - * - * @param sentence - * the data container of the new example. - * @param upd - * the update factor, e.g. 0.01 - * @param iterations - * maximal number of iterations that are tried to adapt the - * system. - * @return success = true -- else false - */ - public boolean retrain(SentenceData09 sentence, float upd, int iterations); - - boolean retrain(SentenceData09 sentence, float upd, int iterations, boolean print); - -} diff --git a/dependencyParser/mate-tools/src/is2/tools/Tool.java b/dependencyParser/mate-tools/src/is2/tools/Tool.java deleted file mode 100644 index 41ead53..0000000 --- a/dependencyParser/mate-tools/src/is2/tools/Tool.java +++ /dev/null @@ -1,25 +0,0 @@ -/** - * - */ -package is2.tools; - -import is2.data.SentenceData09; - -/** - * @author Bernd Bohnet, 27.10.2010 - * - * Interface to all tools - */ -public interface Tool { - - /** - * Uses the tool and applies it on the input sentence. The input is altered - * and has to include a root (token). - * - * @param i - * the input sentence - * @return The result of the performance without the root. - */ - SentenceData09 apply(SentenceData09 snt09); - -} diff --git a/dependencyParser/mate-tools/src/is2/tools/ToolIO.java b/dependencyParser/mate-tools/src/is2/tools/ToolIO.java deleted file mode 100644 index d7b67fe..0000000 --- a/dependencyParser/mate-tools/src/is2/tools/ToolIO.java +++ /dev/null @@ -1,15 +0,0 @@ -/** - * - */ -package is2.tools; - -/** - * @author Bernd Bohnet, 27.10.2010 - * - * Interface to all tools - */ -public interface ToolIO { - - void readModel(); - -} diff --git a/dependencyParser/mate-tools/src/is2/tools/Train.java b/dependencyParser/mate-tools/src/is2/tools/Train.java deleted file mode 100644 index 31a7ad8..0000000 --- a/dependencyParser/mate-tools/src/is2/tools/Train.java +++ /dev/null @@ -1,25 +0,0 @@ -/** - * - */ -package is2.tools; - -import is2.data.Instances; -import is2.data.ParametersFloat; -import is2.util.OptionsSuper; - -/** - * @author Dr. Bernd Bohnet, 24.12.2010 - * - * - */ -public interface Train { - - public abstract void writeModel(OptionsSuper options, IPipe pipe, ParametersFloat params); - - public abstract void readModel(OptionsSuper options); - - public abstract void train(OptionsSuper options, IPipe pipe, ParametersFloat params, Instances is); - - public abstract void out(OptionsSuper options, IPipe pipe, ParametersFloat params); - -} \ No newline at end of file diff --git a/dependencyParser/mate-tools/src/is2/util/Convert.java b/dependencyParser/mate-tools/src/is2/util/Convert.java deleted file mode 100644 index b9c820f..0000000 --- a/dependencyParser/mate-tools/src/is2/util/Convert.java +++ /dev/null @@ -1,453 +0,0 @@ -/** - * - */ -package is2.util; - -import java.io.BufferedReader; -import java.io.BufferedWriter; -import java.io.FileInputStream; -import java.io.FileOutputStream; -import java.io.InputStreamReader; -import java.io.OutputStreamWriter; -import java.nio.charset.Charset; -import java.util.ArrayList; - -import is2.data.SentenceData09; -import is2.io.CONLLReader06; -import is2.io.CONLLReader08; -import is2.io.CONLLReader09; -import is2.io.CONLLWriter06; -import is2.io.CONLLWriter09; - -/** - * @author Dr. Bernd Bohnet, 01.03.2010 - * - * - */ -public class Convert { - - public static void main(String args[]) throws Exception { - - if (args.length < 2) { - - System.out.println("Usage"); - System.out.println(" java is2.util.Convert <in> <out> [-w06|-w0809|-yue] [-wordsonly]"); - - } - - int todo = 9; - boolean wordsOnly = false; - for (String a : args) { - if (a != null && a.equals("-w06")) - todo = 6; - else if (a != null && a.equals("-w0809")) - todo = 89; - else if (a != null && a.equals("-yue")) - todo = 99; - else if (a != null && a.equals("-utf8")) - todo = 8; - - if (a != null && a.equals("-wordsonly")) - wordsOnly = true; - - } - - if (todo == 9) - convert(args[0], args[1]); - else if (todo == 6) - convert0906(args[0], args[1]); - else if (todo == 8) - convert8(args[0], args[1], args[2]); - else if (todo == 89) - convert0809(args[0], args[1]); - else if (todo == 99) { - convertChnYue(args[0], args[1], wordsOnly); - } - - } - - private static void convert8(String infile, String outfile, String format) { - try { - - System.out.println("availableCharsets: " + Charset.availableCharsets()); - - BufferedReader in = new BufferedReader(new InputStreamReader(new FileInputStream(infile), format)); - BufferedWriter out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outfile), "UTF8")); - ; - int ch; - - int count = 0, wcount = 0; - ; - while ((ch = in.read()) > -1) { - count++; - - if (Character.isDefined(ch)) { - - out.write(ch); - wcount++; - } - } - in.close(); - out.close(); - System.out.println("read " + count + " chars and wrote " + wcount + " utf8 chars"); - } catch (Exception e) { - e.printStackTrace(); - } - - } - - public static void convert(String source, String target) throws Exception { - - CONLLReader06 reader = new CONLLReader06(source); - CONLLWriter09 writer = new CONLLWriter09(target); - - int str = 0; - while (true) { - SentenceData09 i = reader.getNext(); - str++; - if (i == null) - break; - - String[] formsNoRoot = new String[i.length() - 1]; - String[] posNoRoot = new String[formsNoRoot.length]; - String[] lemmas = new String[formsNoRoot.length]; - - String[] org_lemmas = new String[formsNoRoot.length]; - - String[] of = new String[formsNoRoot.length]; - String[] pf = new String[formsNoRoot.length]; - - String[] pposs = new String[formsNoRoot.length]; - String[] labels = new String[formsNoRoot.length]; - String[] fillp = new String[formsNoRoot.length]; - - int[] heads = new int[formsNoRoot.length]; - - for (int j = 0; j < formsNoRoot.length; j++) { - formsNoRoot[j] = i.forms[j + 1]; - if (formsNoRoot[j].length() == 0 || formsNoRoot[j].equals("")) { - System.out.println("error forms " + str); - // System.exit(0); - formsNoRoot[j] = " "; - } - posNoRoot[j] = i.gpos[j + 1]; - if (posNoRoot[j].length() == 0 || posNoRoot[j].equals(" ")) { - System.out.println("error pos " + str); - // System.exit(0); - } - pposs[j] = i.ppos[j + 1]; - if (pposs[j].length() == 0 || pposs[j].equals(" ")) { - System.out.println("error pos " + str); - // System.exit(0); - } - - labels[j] = i.labels[j + 1]; - if (labels[j].length() == 0 || labels[j].equals(" ")) { - System.out.println("error lab " + str); - // System.exit(0); - } - heads[j] = i.heads[j + 1]; - if (heads[j] > posNoRoot.length) { - System.out.println("head out of range " + heads[j] + " " + heads.length + " " + str); - heads[j] = posNoRoot.length; - } - - lemmas[j] = i.plemmas[j + 1]; - if (lemmas[j].length() == 0 || lemmas[j].equals(" ")) { - System.out.println("error lab " + str); - // System.exit(0); - } - org_lemmas[j] = i.lemmas[j + 1]; - if (org_lemmas[j].length() == 0 || org_lemmas[j].equals(" ")) { - System.out.println("error lab " + str); - // System.exit(0); - } - of[j] = i.ofeats[j + 1]; - pf[j] = i.pfeats[j + 1]; - if (str == 6099) { - // System.out.println(formsNoRoot[j]+"\t"+posNoRoot[j]+"\t"+pposs[j]+"\t"+labels[j]+"\t"+heads[j]); - } - - // (instance.fillp!=null) fillp[j] = instance.fillp[j+1]; - } - - SentenceData09 i09 = new SentenceData09(formsNoRoot, formsNoRoot, formsNoRoot, pposs, pposs, labels, heads, - fillp, of, pf); - - // public SentenceData09(String[] forms, String[] lemmas, String[] - // olemmas,String[] gpos, String[] ppos, String[] labs, int[] heads, - // String[] fillpred) { - // SentenceData09 - // SentenceData09 i2 = new SentenceData09(i.forms, - // i.lemmas,i.org_lemmas,); - - writer.write(i09); - - } - writer.finishWriting(); - - } - - public static void convertChnYue(String source, String target, boolean wordsOnly) throws Exception { - - BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(source), "UTF-8"), 32768); - - CONLLWriter09 writer = new CONLLWriter09(target); - - int str = 0; - while (true) { - - ArrayList<String[]> lines = new ArrayList<String[]>(); - - String line; - while ((line = reader.readLine()) != null) { - - if (line.length() < 2) - break; - String split[] = line.split("\t"); - lines.add(split); - } - if (line == null) - break; - - str++; - - String[] formsNoRoot = new String[lines.size()]; - String[] posNoRoot = new String[formsNoRoot.length]; - String[] lemmas = new String[formsNoRoot.length]; - - String[] org_lemmas = new String[formsNoRoot.length]; - - String[] of = new String[formsNoRoot.length]; - String[] pf = new String[formsNoRoot.length]; - - String[] pposs = new String[formsNoRoot.length]; - String[] labels = new String[formsNoRoot.length]; - String[] fillp = new String[formsNoRoot.length]; - - int[] heads = new int[formsNoRoot.length]; - - for (int j = 0; j < formsNoRoot.length; j++) { - formsNoRoot[j] = lines.get(j)[0]; - if (formsNoRoot[j].length() == 0 || formsNoRoot[j].equals("")) { - System.out.println("error forms " + str); - // System.exit(0); - formsNoRoot[j] = "_"; - } - - posNoRoot[j] = lines.get(j)[1]; - if (posNoRoot[j].length() == 0 || posNoRoot[j].equals(" ")) { - System.out.println("error pos " + str); - // System.exit(0); - } - pposs[j] = "_"; - - labels[j] = lines.get(j)[3]; - if (labels[j].length() == 0 || labels[j].equals(" ")) { - System.out.println("error lab " + str); - labels[j] = "_"; - // System.exit(0); - } - heads[j] = Integer.parseInt(lines.get(j)[2]) + 1; - if (heads[j] > posNoRoot.length) { - System.out.println("head out of range " + heads[j] + " " + heads.length + " " + str); - heads[j] = posNoRoot.length; - } - - // 0 is root and not -1 - if (heads[j] == -1) - heads[j] = 0; - - lemmas[j] = "_"; - - org_lemmas[j] = "_"; - - of[j] = "_"; - pf[j] = "_"; - - if (wordsOnly) { - posNoRoot[j] = "_"; - heads[j] = 0; - labels[j] = "_"; - } - - // (instance.fillp!=null) fillp[j] = instance.fillp[j+1]; - } - - SentenceData09 i09 = new SentenceData09(formsNoRoot, lemmas, org_lemmas, posNoRoot, posNoRoot, labels, - heads, fillp, of, pf); - - // public SentenceData09(String[] forms, String[] lemmas, String[] - // olemmas,String[] gpos, String[] ppos, String[] labs, int[] heads, - // String[] fillpred) { - // SentenceData09 - // SentenceData09 i2 = new SentenceData09(i.forms, - // i.lemmas,i.org_lemmas,); - - writer.write(i09); - - } - reader.close(); - writer.finishWriting(); - - } - - /** - * Convert the 0 - * - * @param source - * @param target - * @throws Exception - */ - public static void convert0809(String source, String target) throws Exception { - - CONLLReader08 reader = new CONLLReader08(source); - CONLLWriter09 writer = new CONLLWriter09(target); - - int str = 0; - while (true) { - SentenceData09 i = reader.getNext(); - str++; - if (i == null) - break; - - String[] formsNoRoot = new String[i.length() - 1]; - String[] posNoRoot = new String[formsNoRoot.length]; - String[] lemmas = new String[formsNoRoot.length]; - - String[] org_lemmas = new String[formsNoRoot.length]; - - String[] of = new String[formsNoRoot.length]; - String[] pf = new String[formsNoRoot.length]; - - String[] pposs = new String[formsNoRoot.length]; - String[] labels = new String[formsNoRoot.length]; - String[] fillp = new String[formsNoRoot.length]; - - int[] heads = new int[formsNoRoot.length]; - - for (int j = 0; j < formsNoRoot.length; j++) { - formsNoRoot[j] = i.forms[j + 1]; - if (formsNoRoot[j].length() == 0 || formsNoRoot[j].equals("")) { - System.out.println("error forms " + str); - // System.exit(0); - formsNoRoot[j] = " "; - } - posNoRoot[j] = i.gpos[j + 1]; - if (posNoRoot[j].length() == 0 || posNoRoot[j].equals(" ")) { - System.out.println("error pos " + str); - // System.exit(0); - } - pposs[j] = i.ppos[j + 1]; - if (pposs[j].length() == 0 || pposs[j].equals(" ")) { - System.out.println("error pos " + str); - // System.exit(0); - } - - labels[j] = i.labels[j + 1]; - if (labels[j].length() == 0 || labels[j].equals(" ")) { - System.out.println("error lab " + str); - // System.exit(0); - } - heads[j] = i.heads[j + 1]; - if (heads[j] > posNoRoot.length) { - System.out.println("head out of range " + heads[j] + " " + heads.length + " " + str); - heads[j] = posNoRoot.length; - } - - lemmas[j] = i.plemmas[j + 1]; - if (lemmas[j].length() == 0 || lemmas[j].equals(" ")) { - System.out.println("error lab " + str); - // System.exit(0); - } - org_lemmas[j] = i.lemmas[j + 1]; - // if (org_lemmas[j].length()==0 ||org_lemmas[j].equals(" ")) { - // System.out.println("error lab "+str); - // // System.exit(0); - // } - // of[j] = i.ofeats[j+1]; - // pf[j] = i.pfeats[j+1]; - if (str == 6099) { - // System.out.println(formsNoRoot[j]+"\t"+posNoRoot[j]+"\t"+pposs[j]+"\t"+labels[j]+"\t"+heads[j]); - } - - // (instance.fillp!=null) fillp[j] = instance.fillp[j+1]; - } - - SentenceData09 i09 = new SentenceData09(formsNoRoot, org_lemmas, lemmas, pposs, pposs, labels, heads, fillp, - of, pf); - - // public SentenceData09(String[] forms, String[] lemmas, String[] - // olemmas,String[] gpos, String[] ppos, String[] labs, int[] heads, - // String[] fillpred) { - // SentenceData09 - // SentenceData09 i2 = new SentenceData09(i.forms, - // i.lemmas,i.org_lemmas,); - - writer.write(i09); - - } - writer.finishWriting(); - - } - - public static void convert0906(String source, String target) throws Exception { - - CONLLReader09 reader = new CONLLReader09(source); - CONLLWriter06 writer = new CONLLWriter06(target); - - while (true) { - SentenceData09 i = reader.getNext(); - - if (i == null) - break; - - String[] formsNoRoot = new String[i.length() - 1]; - String[] posNoRoot = new String[formsNoRoot.length]; - String[] lemmas = new String[formsNoRoot.length]; - - String[] org_lemmas = new String[formsNoRoot.length]; - - String[] of = new String[formsNoRoot.length]; - String[] pf = new String[formsNoRoot.length]; - - String[] pposs = new String[formsNoRoot.length]; - String[] labels = new String[formsNoRoot.length]; - String[] fillp = new String[formsNoRoot.length]; - - int[] heads = new int[formsNoRoot.length]; - - for (int j = 0; j < formsNoRoot.length; j++) { - formsNoRoot[j] = i.forms[j + 1]; - posNoRoot[j] = i.gpos[j + 1]; - pposs[j] = i.gpos[j + 1]; - - labels[j] = i.labels[j + 1]; - heads[j] = i.heads[j + 1]; - lemmas[j] = i.plemmas[j + 1]; - - org_lemmas[j] = i.lemmas[j + 1]; - of[j] = i.ofeats[j + 1]; - pf[j] = i.pfeats[j + 1]; - - // (instance.fillp!=null) fillp[j] = instance.fillp[j+1]; - } - - SentenceData09 i09 = new SentenceData09(formsNoRoot, lemmas, org_lemmas, posNoRoot, pposs, labels, heads, - fillp, of, pf); - - // public SentenceData09(String[] forms, String[] lemmas, String[] - // olemmas,String[] gpos, String[] ppos, String[] labs, int[] heads, - // String[] fillpred) { - // SentenceData09 - // SentenceData09 i2 = new SentenceData09(i.forms, - // i.lemmas,i.org_lemmas,); - - writer.write(i09); - - } - writer.finishWriting(); - - } - -} diff --git a/dependencyParser/mate-tools/src/is2/util/Convert0409.java b/dependencyParser/mate-tools/src/is2/util/Convert0409.java deleted file mode 100644 index b735ad8..0000000 --- a/dependencyParser/mate-tools/src/is2/util/Convert0409.java +++ /dev/null @@ -1,176 +0,0 @@ -/** - * - */ -package is2.util; - -import is2.data.SentenceData09; -import is2.io.CONLLReader04; -import is2.io.CONLLReader09; -import is2.io.CONLLWriter06; -import is2.io.CONLLWriter09; - -/** - * @author Dr. Bernd Bohnet, 01.03.2010 - * - * - */ -public class Convert0409 { - - public static void main(String args[]) throws Exception { - - convert(args[0], args[1]); - - } - - public static void convert(String source, String target) throws Exception { - - CONLLReader04 reader = new CONLLReader04(source); - CONLLWriter09 writer = new CONLLWriter09(target); - - int str = 0; - while (true) { - SentenceData09 i = reader.getNext(); - str++; - if (i == null) - break; - - String[] formsNoRoot = new String[i.length() - 1]; - String[] posNoRoot = new String[formsNoRoot.length]; - String[] lemmas = new String[formsNoRoot.length]; - - String[] org_lemmas = new String[formsNoRoot.length]; - - String[] of = new String[formsNoRoot.length]; - String[] pf = new String[formsNoRoot.length]; - - String[] pposs = new String[formsNoRoot.length]; - String[] labels = new String[formsNoRoot.length]; - String[] fillp = new String[formsNoRoot.length]; - - int[] heads = new int[formsNoRoot.length]; - - for (int j = 0; j < formsNoRoot.length; j++) { - formsNoRoot[j] = i.forms[j + 1]; - if (formsNoRoot[j].length() == 0 || formsNoRoot[j].equals("")) { - System.out.println("error forms " + str); - // System.exit(0); - formsNoRoot[j] = " "; - } - posNoRoot[j] = i.gpos[j + 1]; - if (posNoRoot[j].length() == 0 || posNoRoot[j].equals(" ")) { - System.out.println("error pos " + str); - // System.exit(0); - } - pposs[j] = i.ppos[j + 1]; - if (pposs[j].length() == 0 || pposs[j].equals(" ")) { - System.out.println("error pos " + str); - // System.exit(0); - } - - labels[j] = i.labels[j + 1]; - if (labels[j].length() == 0 || labels[j].equals(" ")) { - System.out.println("error lab " + str); - // System.exit(0); - } - heads[j] = i.heads[j + 1]; - if (heads[j] > posNoRoot.length) { - System.out.println("head out of range " + heads[j] + " " + heads.length + " " + str); - heads[j] = posNoRoot.length; - } - - lemmas[j] = i.plemmas[j + 1]; - if (lemmas[j].length() == 0 || lemmas[j].equals(" ")) { - System.out.println("error lab " + str); - // System.exit(0); - } - org_lemmas[j] = i.lemmas[j + 1]; - if (org_lemmas[j].length() == 0 || org_lemmas[j].equals(" ")) { - System.out.println("error lab " + str); - // System.exit(0); - } - of[j] = i.ofeats[j + 1]; - pf[j] = i.pfeats[j + 1]; - if (str == 6099) { - // System.out.println(formsNoRoot[j]+"\t"+posNoRoot[j]+"\t"+pposs[j]+"\t"+labels[j]+"\t"+heads[j]); - } - - // (instance.fillp!=null) fillp[j] = instance.fillp[j+1]; - } - - SentenceData09 i09 = new SentenceData09(formsNoRoot, lemmas, org_lemmas, pposs, pposs, labels, heads, fillp, - of, pf); - - // public SentenceData09(String[] forms, String[] lemmas, String[] - // olemmas,String[] gpos, String[] ppos, String[] labs, int[] heads, - // String[] fillpred) { - // SentenceData09 - // SentenceData09 i2 = new SentenceData09(i.forms, - // i.lemmas,i.org_lemmas,); - - writer.write(i09); - - } - writer.finishWriting(); - - } - - public static void convert0906(String source, String target) throws Exception { - - CONLLReader09 reader = new CONLLReader09(source); - CONLLWriter06 writer = new CONLLWriter06(target); - - while (true) { - SentenceData09 i = reader.getNext(); - - if (i == null) - break; - - String[] formsNoRoot = new String[i.length() - 1]; - String[] posNoRoot = new String[formsNoRoot.length]; - String[] lemmas = new String[formsNoRoot.length]; - - String[] org_lemmas = new String[formsNoRoot.length]; - - String[] of = new String[formsNoRoot.length]; - String[] pf = new String[formsNoRoot.length]; - - String[] pposs = new String[formsNoRoot.length]; - String[] labels = new String[formsNoRoot.length]; - String[] fillp = new String[formsNoRoot.length]; - - int[] heads = new int[formsNoRoot.length]; - - for (int j = 0; j < formsNoRoot.length; j++) { - formsNoRoot[j] = i.forms[j + 1]; - posNoRoot[j] = i.gpos[j + 1]; - pposs[j] = i.ppos[j + 1]; - - labels[j] = i.labels[j + 1]; - heads[j] = i.heads[j + 1]; - lemmas[j] = i.plemmas[j + 1]; - - org_lemmas[j] = i.lemmas[j + 1]; - of[j] = i.ofeats[j + 1]; - pf[j] = i.pfeats[j + 1]; - - // (instance.fillp!=null) fillp[j] = instance.fillp[j+1]; - } - - SentenceData09 i09 = new SentenceData09(formsNoRoot, lemmas, org_lemmas, posNoRoot, pposs, labels, heads, - fillp, of, pf); - - // public SentenceData09(String[] forms, String[] lemmas, String[] - // olemmas,String[] gpos, String[] ppos, String[] labs, int[] heads, - // String[] fillpred) { - // SentenceData09 - // SentenceData09 i2 = new SentenceData09(i.forms, - // i.lemmas,i.org_lemmas,); - - writer.write(i09); - - } - writer.finishWriting(); - - } - -} diff --git a/dependencyParser/mate-tools/src/is2/util/ConvertADJ.java b/dependencyParser/mate-tools/src/is2/util/ConvertADJ.java deleted file mode 100644 index e6ca6c1..0000000 --- a/dependencyParser/mate-tools/src/is2/util/ConvertADJ.java +++ /dev/null @@ -1,121 +0,0 @@ -/** - * - */ -package is2.util; - -import is2.data.SentenceData09; -import is2.io.CONLLReader09; -import is2.io.CONLLWriter06; - -/** - * @author Dr. Bernd Bohnet, 01.03.2010 - * - * - */ -public class ConvertADJ { - - public static void main(String args[]) throws Exception { - - convert(args[0], args[1]); - - } - - public static void convert(String source, String target) throws Exception { - - CONLLReader09 reader = new CONLLReader09(source); - // CONLLWriter09 writer = new CONLLWriter09(target); - int adj = 0, argadj = 0; - int rb = 0, argrb = 0; - while (true) { - SentenceData09 i = reader.getNext(); - if (i == null) - break; - - for (int k = 0; k < i.length(); k++) { - - if (i.gpos[k].startsWith("JJ")) - adj++; - if (i.gpos[k].startsWith("RB")) - rb++; - - if (i.argposition != null) { - for (int[] element : i.argposition) { - if (element != null) - for (int a = 0; a < element.length; a++) { - if (element[a] == k && i.gpos[k].startsWith("JJ")) - argadj++; - if (element[a] == k && i.gpos[k].startsWith("RB")) - argrb++; - } - - } - } - // (instance.fillp!=null) fillp[j] = instance.fillp[j+1]; - } - - } - System.out.println("adj " + adj + " " + argadj); - System.out.println("rb " + rb + " " + argrb); - - } - - public static void convert0906(String source, String target) throws Exception { - - CONLLReader09 reader = new CONLLReader09(source); - CONLLWriter06 writer = new CONLLWriter06(target); - - while (true) { - SentenceData09 i = reader.getNext(); - - if (i == null) - break; - - String[] formsNoRoot = new String[i.length() - 1]; - String[] posNoRoot = new String[formsNoRoot.length]; - String[] lemmas = new String[formsNoRoot.length]; - - String[] org_lemmas = new String[formsNoRoot.length]; - - String[] of = new String[formsNoRoot.length]; - String[] pf = new String[formsNoRoot.length]; - - String[] pposs = new String[formsNoRoot.length]; - String[] labels = new String[formsNoRoot.length]; - String[] fillp = new String[formsNoRoot.length]; - - int[] heads = new int[formsNoRoot.length]; - - for (int j = 0; j < formsNoRoot.length; j++) { - formsNoRoot[j] = i.forms[j + 1]; - posNoRoot[j] = i.gpos[j + 1]; - pposs[j] = i.ppos[j + 1]; - - labels[j] = i.labels[j + 1]; - heads[j] = i.heads[j + 1]; - lemmas[j] = i.plemmas[j + 1]; - - org_lemmas[j] = i.lemmas[j + 1]; - of[j] = i.ofeats[j + 1]; - pf[j] = i.pfeats[j + 1]; - - // (instance.fillp!=null) fillp[j] = instance.fillp[j+1]; - } - - SentenceData09 i09 = new SentenceData09(formsNoRoot, lemmas, org_lemmas, posNoRoot, pposs, labels, heads, - fillp, of, pf); - - // public SentenceData09(String[] forms, String[] lemmas, String[] - // olemmas,String[] gpos, String[] ppos, String[] labs, int[] heads, - // String[] fillpred) { - // SentenceData09 - // SentenceData09 i2 = new SentenceData09(i.forms, - // i.lemmas,i.org_lemmas,); - - writer.write(i09); - - } - writer.finishWriting(); - - } - -} diff --git a/dependencyParser/mate-tools/src/is2/util/ConvertLowerCase0909.java b/dependencyParser/mate-tools/src/is2/util/ConvertLowerCase0909.java deleted file mode 100644 index e5842d6..0000000 --- a/dependencyParser/mate-tools/src/is2/util/ConvertLowerCase0909.java +++ /dev/null @@ -1,76 +0,0 @@ -/** - * - */ -package is2.util; - -import is2.data.SentenceData09; -import is2.io.CONLLReader09; -import is2.io.CONLLWriter09; - -/** - * @author Dr. Bernd Bohnet, 01.03.2010 - * - * - */ -public class ConvertLowerCase0909 { - - public static void main(String args[]) throws Exception { - - CONLLReader09 reader = new CONLLReader09(args[0]); - CONLLWriter09 writer = new CONLLWriter09(args[1]); - - while (true) { - SentenceData09 i = reader.getNext(); - if (i == null) - break; - - SentenceData09 i09 = new SentenceData09(i); - i09.createSemantic(i); - - for (int k = 0; k < i09.length(); k++) { - i09.lemmas[k] = i09.lemmas[k].toLowerCase(); - i09.plemmas[k] = i09.plemmas[k].toLowerCase(); - - } - - writer.write(i09); - - } - writer.finishWriting(); - - } - - public static void convert(String source, String target) throws Exception { - - CONLLReader09 reader = new CONLLReader09(source); - CONLLWriter09 writer = new CONLLWriter09(target); - - while (true) { - SentenceData09 i = reader.getNext(); - if (i == null) - break; - - SentenceData09 i09 = new SentenceData09(i); - i09.createSemantic(i); - - for (int k = 0; k < i09.length(); k++) { - i09.lemmas[k] = i09.lemmas[k].toLowerCase(); - i09.plemmas[k] = i09.plemmas[k].toLowerCase(); - - } - - // public SentenceData09(String[] forms, String[] lemmas, String[] - // olemmas,String[] gpos, String[] ppos, String[] labs, int[] heads, - // String[] fillpred) { - // SentenceData09 - // SentenceData09 i2 = new SentenceData09(i.forms, - // i.lemmas,i.org_lemmas,); - - writer.write(i09); - - } - writer.finishWriting(); - - } - -} diff --git a/dependencyParser/mate-tools/src/is2/util/ConvertTiger2CoNLL.java b/dependencyParser/mate-tools/src/is2/util/ConvertTiger2CoNLL.java deleted file mode 100644 index e650737..0000000 --- a/dependencyParser/mate-tools/src/is2/util/ConvertTiger2CoNLL.java +++ /dev/null @@ -1,120 +0,0 @@ -/** - * - */ -package is2.util; - -import java.io.BufferedReader; -import java.io.BufferedWriter; -import java.io.FileInputStream; -import java.io.IOException; -import java.io.InputStreamReader; -import java.util.StringTokenizer; - -/** - * @author Dr. Bernd Bohnet, 17.01.2010 - * - * This class removes all information from a conll 2009 file except of - * columns 1 and 2 that contain the word id and the word form. - */ -public class ConvertTiger2CoNLL { - - public static void main(String[] args) throws IOException { - - OptionsSuper options = new OptionsSuper(args, null); - - if (options.trainfile != null) { - System.err.println( - "included sentences " + clean(options.trainfile, options.outfile, options.start, options.count)); - } else - System.err.println("Please proivde the file name -train <file-name>"); - - } - - /** - * @param trainfile - * @throws IOException - */ - private static int clean(String file, String outFile, int start, int numberOfSentences) throws IOException { - - System.err.println("writting to " + outFile); - System.err.println("start " + start + " to " + (start + numberOfSentences)); - int state = 0; - - BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(file), "UTF-8"), 32768); - BufferedWriter writer = new BufferedWriter( - new java.io.OutputStreamWriter(new java.io.FileOutputStream(outFile), "UTF-8"), 32768); - String l = null; - try { - - int id = 1, snt = 0, cnt = 0; - - while ((l = reader.readLine()) != null) { - - if (l.startsWith("#BOS")) { - state = 1; // BOS - id = 1; - snt++; - continue; - } - if (l.startsWith("#EOS") && state == 1) { - state = 2; // BOS - cnt++; - - writer.newLine(); - } - - if (start > snt || (start + numberOfSentences) <= snt) { - state = 3; - } - - if (l.startsWith("#5") || l.startsWith("#6") || l.startsWith("#7")) - continue; - if ((start + numberOfSentences) <= snt) - break; - - if (state == 3) - continue; - - if (state == 1) { - - l = l.replace("\t\t", "\t"); - l = l.replace("\t\t", "\t"); - - StringTokenizer t = new StringTokenizer(l, "\t"); - int count = 0; - - writer.write("" + id + "\t"); - - while (t.hasMoreTokens()) { - if (count == 0) { - writer.write(t.nextToken() + "\t"); - } else if (count == 1) { - writer.write(t.nextToken() + "\t_\t"); - } else if (count == 2) { - writer.write(t.nextToken() + "\t_\t"); - } else if (count == 3) { - writer.write(t.nextToken().replace(".", "|") + "\t_\t"); - } else { - t.nextToken(); - } - count++; - } - writer.write("_\t_\t_\t_\t_\t_\t_\t_\t_"); - writer.newLine(); - } - id++; - } - writer.flush(); - writer.close(); - reader.close(); - - return cnt; - } catch (IOException e) { - e.printStackTrace(); - } - - return -1; - - } - -} diff --git a/dependencyParser/mate-tools/src/is2/util/DB.java b/dependencyParser/mate-tools/src/is2/util/DB.java deleted file mode 100755 index 30fd231..0000000 --- a/dependencyParser/mate-tools/src/is2/util/DB.java +++ /dev/null @@ -1,78 +0,0 @@ -package is2.util; - -import java.util.Calendar; -import java.util.GregorianCalendar; - -public class DB { - - private static final String ARROW = " -> "; - private static final String LEER = " "; - private static final String BIG = " "; - - private static boolean debug = true; - - final static public void println(Object err) { - - if (!debug) - return; - - StackTraceElement[] ste = new Exception().getStackTrace(); - - StringBuffer msg = new StringBuffer(); - msg.append((getDate().append(LEER).substring(0, 10))); - msg.append(' '); - msg.append(ste[1].getClassName() + " " + ste[1].getLineNumber()); - msg.append(':'); - msg.append(ste[1].getMethodName()); - msg.append(ARROW); - - int l = 55 - msg.length(); - if (l < 0) - l = 0; - msg.append(BIG.substring(0, l)); - - // if ((m_depth >= 0) && (m_depth < (BIG.length()) )) { - // vDebugMessage.append(BIG.substring(0, m_depth*2)); - // } - - msg.append(err); - - System.err.println(msg); - - } - - final static public void prints(Object err) { - - if (!debug) - return; - System.err.println(err); - - } - - final private static StringBuffer getDate() { - // if (Preferences.s_debug <= BDebug.FAIL) return s_sb; - - GregorianCalendar s_cal = new GregorianCalendar(); - StringBuffer sb = new StringBuffer(); - // sb.append(s_cal.get(Calendar.HOUR_OF_DAY)); - // sb.append('_'); - sb.append(s_cal.get(Calendar.MINUTE)); - sb.append('.'); - sb.append(s_cal.get(Calendar.SECOND)); - sb.append('.'); - sb.append(s_cal.get(Calendar.MILLISECOND)); - - return sb; - } - - public static void setDebug(boolean b) { - debug = b; - - } - - public static boolean getDebug() { - - return debug; - } - -} diff --git a/dependencyParser/mate-tools/src/is2/util/Edges.java b/dependencyParser/mate-tools/src/is2/util/Edges.java deleted file mode 100644 index 2457cae..0000000 --- a/dependencyParser/mate-tools/src/is2/util/Edges.java +++ /dev/null @@ -1,197 +0,0 @@ -/** - * - */ -package is2.util; - -import java.io.DataInputStream; -import java.io.DataOutputStream; -import java.io.IOException; -import java.util.Comparator; -import java.util.HashMap; -import java.util.Map.Entry; - -/** - * @author Dr. Bernd Bohnet, 13.05.2009; - * - * - */ -public final class Edges { - - private static short[][][] edges; - private static HashMap<Short, Integer> labelCount = new HashMap<Short, Integer>(); - - private static HashMap<String, Integer> slabelCount = new HashMap<String, Integer>(); - - static short[] def = new short[1]; - - private Edges() { - } - - /** - * @param length - */ - public static void init(int length) { - edges = new short[length][length][]; - } - - public static void findDefault() { - - int best = 0; - - for (Entry<Short, Integer> e : labelCount.entrySet()) { - - if (best < e.getValue()) { - best = e.getValue(); - def[0] = e.getKey(); - } - } - - // labelCount=null; - // String[] types = new String[mf.getFeatureCounter().get(PipeGen.REL)]; - // for (Entry<String, Integer> e : - // MFO.getFeatureSet().get(PipeGen.REL).entrySet()) types[e.getValue()] - // = e.getKey(); - - is2.util.DB.println("set default label to " + def[0] + " "); - - // System.out.println("found default "+def[0]); - - } - - final static public void put(int pos1, int pos2, short label) { - putD(pos1, pos2, label); - // putD(pos2, pos1,!dir, label); - } - - final static public void putD(int pos1, int pos2, short label) { - - Integer lc = labelCount.get(label); - if (lc == null) - labelCount.put(label, 1); - else - labelCount.put(label, lc + 1); - - String key = pos1 + "-" + pos2 + label; - Integer lcs = slabelCount.get(key); - if (lcs == null) - slabelCount.put(key, 1); - else - slabelCount.put(key, lcs + 1); - - if (edges[pos1][pos2] == null) { - edges[pos1][pos2] = new short[1]; - edges[pos1][pos2][0] = label; - - // edgesh[pos1][pos2][dir?0:1] = new TIntHashSet(2); - // edgesh[pos1][pos2][dir?0:1].add(label); - } else { - short labels[] = edges[pos1][pos2]; - for (short l : labels) { - // contains label already? - if (l == label) - return; - } - - short[] nlabels = new short[labels.length + 1]; - System.arraycopy(labels, 0, nlabels, 0, labels.length); - nlabels[labels.length] = label; - edges[pos1][pos2] = nlabels; - - // edgesh[pos1][pos2][dir?0:1].add(label); - } - } - - final static public short[] get(int pos1, int pos2) { - - if (pos1 < 0 || pos2 < 0 || edges[pos1][pos2] == null) - return def; - return edges[pos1][pos2]; - } - - /** - * @param dis - */ - static public void write(DataOutputStream d) throws IOException { - - int len = edges.length; - d.writeShort(len); - - for (int p1 = 0; p1 < len; p1++) { - for (int p2 = 0; p2 < len; p2++) { - if (edges[p1][p2] == null) - d.writeShort(0); - else { - d.writeShort(edges[p1][p2].length); - for (int l = 0; l < edges[p1][p2].length; l++) { - d.writeShort(edges[p1][p2][l]); - } - - } - } - } - - d.writeShort(def[0]); - - } - - /** - * @param dis - */ - public static void read(DataInputStream d) throws IOException { - int len = d.readShort(); - - edges = new short[len][len][]; - for (int p1 = 0; p1 < len; p1++) { - for (int p2 = 0; p2 < len; p2++) { - int ll = d.readShort(); - if (ll == 0) { - edges[p1][p2] = null; - } else { - edges[p1][p2] = new short[ll]; - for (int l = 0; l < ll; l++) { - edges[p1][p2][l] = d.readShort(); - } - } - } - } - - def[0] = d.readShort(); - - } - - public static class C implements Comparator<Short> { - - public C() { - super(); - } - - String _key; - - public C(String key) { - super(); - _key = key; - } - - /* - * (non-Javadoc) - * - * @see java.util.Comparator#compare(java.lang.Object, java.lang.Object) - */ - @Override - public int compare(Short l1, Short l2) { - - // int c1 = labelCount.get(l1); - // int c2 = labelCount.get(l2); - // if (true) return c1==c2?0:c1>c2?-1:1; - - int x1 = slabelCount.get(_key + l1.shortValue()); - int x2 = slabelCount.get(_key + l2.shortValue()); - // System.out.println(x1+" "+x2); - - return x1 == x2 ? 0 : x1 > x2 ? -1 : 1; - - } - - } - -} diff --git a/dependencyParser/mate-tools/src/is2/util/Evaluator.java b/dependencyParser/mate-tools/src/is2/util/Evaluator.java deleted file mode 100644 index f75fc54..0000000 --- a/dependencyParser/mate-tools/src/is2/util/Evaluator.java +++ /dev/null @@ -1,603 +0,0 @@ -package is2.util; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.Comparator; -import java.util.HashMap; -import java.util.Hashtable; -import java.util.Map.Entry; - -//import org.apache.commons.math.stat.inference.TestUtils; - -import is2.data.Parse; -import is2.data.SentenceData09; -import is2.io.CONLLReader09; - -public class Evaluator { - - public static void main(String[] args) { - - Options options = new Options(args); - - if (options.eval && options.significant1 == null) { - - evaluate(options.goldfile, options.outfile); - - } - /* - * else if (options.significant1!=null && options.significant2!=null ) { - * - * System.out.println("compare1 "+options.significant1); - * System.out.println("compare2 "+options.significant2); - * System.out.println("gold "+options.goldfile); - * - * Results r1 = evaluate(options.goldfile, options.significant1,false); - * - * System.out.println("file 1 done "); - * - * Results r2 = evaluate(options.goldfile, options.significant2,false); - * - * double[] s1 = new double[r1.correctHead.size()]; double[] s2 = new - * double[r1.correctHead.size()]; - * - * for(int k=0;k<r1.correctHead.size();k++) { s1[k] = - * r1.correctHead.get(k); s2[k] = r2.correctHead.get(k); } - * - * try { double p = TestUtils.pairedTTest(s1, s2); - * System.out.print("significant to "+p); } catch (Exception e) { - * e.printStackTrace(); } - * - * // significant(options.significant1, options.significant2) ; - * - * - * } - */ - else if (options.significant1 != null) { - evaluate(options.goldfile, options.outfile, true); - - } - - } - - /** - * - * @param act_file - * @param pred_file - * @param what - * top, pos, length, mor - */ - public static void evaluateTagger(String act_file, String pred_file, String what) { - - CONLLReader09 goldReader = new CONLLReader09(act_file); - - CONLLReader09 predictedReader = new CONLLReader09(); - predictedReader.startReading(pred_file); - - Hashtable<String, Integer> errors = new Hashtable<String, Integer>(); - Hashtable<String, StringBuffer> words = new Hashtable<String, StringBuffer>(); - - int total = 0, numsent = 0, corrT = 0; - SentenceData09 goldInstance = goldReader.getNext(); - SentenceData09 predInstance = predictedReader.getNext(); - - HashMap<Integer, int[]> correctL = new HashMap<Integer, int[]>(); - HashMap<String, int[]> pos = new HashMap<String, int[]>(); - HashMap<String, int[]> mor = new HashMap<String, int[]>(); - - float correctM = 0; - ; - - while (goldInstance != null) { - - int instanceLength = goldInstance.length(); - - if (instanceLength != predInstance.length()) - System.out.println("Lengths do not match on sentence " + numsent); - - String gold[] = goldInstance.gpos; - String pred[] = predInstance.ppos; - - String goldM[] = goldInstance.ofeats; - String predM[] = predInstance.pfeats; - - // NOTE: the first item is the root info added during - // nextInstance(), so we skip it. - - for (int i = 1; i < instanceLength; i++) { - - int[] cwr = correctL.get(i); - if (cwr == null) { - cwr = new int[2]; - correctL.put(i, cwr); - } - cwr[1]++; - int[] correctPos = pos.get(gold[i]); - if (correctPos == null) { - correctPos = new int[2]; - pos.put(gold[i], correctPos); - } - correctPos[1]++; - - int[] correctMor = mor.get(goldM[i]); - if (correctMor == null) { - correctMor = new int[2]; - mor.put(goldM[i], correctMor); - } - - if ((goldM[i].equals("_") && predM[i] == null) || goldM[i].equals(predM[i])) { - correctM++; - correctMor[0]++; - } - correctMor[1]++; - - if (gold[i].equals(pred[i])) { - corrT++; - cwr[0]++; - correctPos[0]++; - } else { - String key = "gold: '" + gold[i] + "' pred: '" + pred[i] + "'"; - Integer cnt = errors.get(key); - StringBuffer errWrd = words.get(key); - if (cnt == null) { - errors.put(key, 1); - words.put(key, new StringBuffer().append(goldInstance.forms[i])); - } else { - errors.put(key, cnt + 1); - errWrd.append(" " + goldInstance.forms[i]); - } - } - - } - total += instanceLength - 1; // Subtract one to not score fake root - // token - - numsent++; - - goldInstance = goldReader.getNext(); - predInstance = predictedReader.getNext(); - } - - // System.out.println("error gold:"+goldPos[i]+" pred:"+predPos[i]+" - // "+goldInstance.forms[i]+" snt "+numsent+" i:"+i); - ArrayList<Entry<String, Integer>> opsl = new ArrayList<Entry<String, Integer>>(); - for (Entry<String, Integer> e : errors.entrySet()) { - opsl.add(e); - } - - Collections.sort(opsl, new Comparator<Entry<String, Integer>>() { - - @Override - public int compare(Entry<String, Integer> o1, Entry<String, Integer> o2) { - - return o1.getValue() == o2.getValue() ? 0 : o1.getValue() > o2.getValue() ? -1 : 1; - } - - }); - - if (what.contains("top")) { - System.out.println("top most errors:"); - for (Entry<String, Integer> e : opsl) { - if (e.getValue() > 10) - System.out.println(e.getKey() + " " + e.getValue() + " context: " + words.get(e.getKey())); - } - } - - if (what.contains("length")) { - for (int k = 0; k < 60; k++) { - int[] cwr = correctL.get(k); - if (cwr == null) - continue; - System.out.print(k + ":" + cwr[0] + ":" + cwr[1] + ":" - + (((float) Math.round(10000 * (cwr[0]) / cwr[1])) / 100) + " "); - } - System.out.println(); - } - - if (what.contains("pos")) { - for (Entry<String, int[]> e : pos.entrySet()) { - - System.out.print(e.getKey() + ":" + e.getValue()[0] + ":" + e.getValue()[1] + ":" - + (((float) Math.round(10000 * ((float) e.getValue()[0]) / (e.getValue()[1]))) / 100) + " "); - - } - System.out.print(""); - } - System.out.println(); - if (what.contains("mor")) { - for (Entry<String, int[]> e : mor.entrySet()) { - - System.out.print(e.getKey() + ":" + e.getValue()[0] + ":" + e.getValue()[1] + ":" - + (((float) Math.round(10000 * ((float) e.getValue()[0]) / (e.getValue()[1]))) / 100) + " "); - - } - System.out.print(""); - } - System.out.println("\nTokens: " + total + " Correct: " + corrT + " " + (float) corrT / total + " Correct M.:" - + (int) correctM + " morphology " + (correctM / total)); - } - - public static int errors(SentenceData09 s, boolean uas) { - - int errors = 0; - for (int k = 1; k < s.length(); k++) { - - if (s.heads[k] != s.pheads[k] && (uas || !s.labels[k].equals(s.plabels[k]))) { - errors++; - } - } - return errors; - } - - public static int errors(SentenceData09 s1, SentenceData09 s2, HashMap<String, Integer> r1, - HashMap<String, Integer> r2) { - - int errors = 0; - for (int k = 1; k < s1.length(); k++) { - - if (s1.heads[k] != s1.pheads[k] || (!s1.labels[k].equals(s1.plabels[k]))) { - - if (s2.heads[k] != s2.pheads[k] || (!s2.labels[k].equals(s2.plabels[k]))) { - - // equal do nothing - - } else { - - Integer cnt = r1.get(s1.labels[k]); - if (cnt == null) - cnt = 0; - cnt++; - r1.put(s1.labels[k], cnt); - - } - - } - - if (s2.heads[k] != s2.pheads[k] || (!s2.labels[k].equals(s2.plabels[k]))) { - - if (s1.heads[k] != s1.pheads[k] || (!s1.labels[k].equals(s1.plabels[k]))) { - - // equal do nothing - - } else { - - Integer cnt = r2.get(s2.labels[k]); - if (cnt == null) - cnt = 0; - cnt++; - r2.put(s2.labels[k], cnt); - - } - - } - } - return errors; - } - - public static final String PUNCT = "!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~"; - - public static class Results { - - public int total; - public int corr; - public float las; - public float ula; - public float lpas; - public float upla; - - ArrayList<Double> correctHead; - } - - public static Results evaluate(String act_file, String pred_file) { - return evaluate(act_file, pred_file, true); - } - - public static Results evaluate(String act_file, String pred_file, boolean printEval) { - return evaluate(act_file, pred_file, printEval, false); - } - - public static Results evaluate(String act_file, String pred_file, boolean printEval, boolean sig) { - - CONLLReader09 goldReader = new CONLLReader09(act_file, -1); - CONLLReader09 predictedReader = new CONLLReader09(pred_file, -1); - - int total = 0, corr = 0, corrL = 0, Ptotal = 0, Pcorr = 0, PcorrL = 0, BPtotal = 0, BPcorr = 0, BPcorrL = 0, - corrLableAndPos = 0, corrHeadAndPos = 0; - int corrLableAndPosP = 0, corrLableAndPosC = 0; - int numsent = 0, corrsent = 0, corrsentL = 0, Pcorrsent = 0, PcorrsentL = 0; - ; - int proj = 0, nonproj = 0, pproj = 0, pnonproj = 0, nonProjOk = 0, nonProjWrong = 0; - - int correctChnWoPunc = 0, correctLChnWoPunc = 0, CPtotal = 0; - SentenceData09 goldInstance = goldReader.getNext(); - - SentenceData09 predInstance = predictedReader.getNext(); - HashMap<String, Integer> label = new HashMap<String, Integer>(); - HashMap<String, Integer> labelCount = new HashMap<String, Integer>(); - HashMap<String, Integer> labelCorrect = new HashMap<String, Integer>(); - HashMap<String, Integer> falsePositive = new HashMap<String, Integer>(); - - // does the node have the correct head? - ArrayList<Double> correctHead = new ArrayList<Double>(); - - while (goldInstance != null) { - - int instanceLength = goldInstance.length(); - - if (instanceLength != predInstance.length()) - System.out.println("Lengths do not match on sentence " + numsent); - - int[] goldHeads = goldInstance.heads; - String[] goldLabels = goldInstance.labels; - int[] predHeads = predInstance.pheads; - String[] predLabels = predInstance.plabels; - - boolean whole = true; - boolean wholeL = true; - - boolean Pwhole = true; - boolean PwholeL = true; - - int corrLabels = 0; - - // NOTE: the first item is the root info added during - // nextInstance(), so we skip it. - - int punc = 0, bpunc = 0, totalChnWoPunc = 0; - for (int i = 1; i < instanceLength; i++) { - - Parse p = new Parse(predHeads.length); - for (int k = 0; k < p.heads.length; k++) - p.heads[k] = (short) predHeads[k]; - - Parse g = new Parse(predHeads.length); - for (int k = 0; k < g.heads.length; k++) - g.heads[k] = (short) goldHeads[k]; - - { - Integer count = labelCount.get(goldLabels[i]); - if (count == null) - count = 0; - - count++; - - labelCount.put(goldLabels[i], count); - - if (goldLabels[i].equals(predLabels[i])) { - Integer correct = labelCorrect.get(goldLabels[i]); - if (correct == null) - correct = 0; - correct++; - labelCorrect.put(goldLabels[i], correct); - - } else { - Integer fp = falsePositive.get(predLabels[i]); - if (fp == null) - fp = 0; - fp++; - falsePositive.put(predLabels[i], fp); - } - - } - - { - - } - - if (goldLabels[i].startsWith("PMOD")) { - } - - boolean tlas = false; - if (predHeads[i] == goldHeads[i]) { - corr++; - - if (goldInstance.gpos[i].equals(predInstance.ppos[i])) - corrHeadAndPos++; - if (goldLabels[i].equals(predLabels[i])) { - corrL++; - // if (predLabels[i].startsWith("PMOD")) - corrLabels++; - // else correctHead.add(0); - if (goldInstance.gpos[i].equals(predInstance.ppos[i])) { - tlas = true; - corrLableAndPos++; - } - } else { - // correctHead.add(0); - // System.out.println(numsent+" error gold - // "+goldLabels[i]+" "+predLabels[i]+" head - // "+goldHeads[i]+" child "+i); - wholeL = false; - } - } else { - - // correctHead.add(0); - - // System.out.println(numsent+"error gold "+goldLabels[i]+" - // "+predLabels[i]+" head "+goldHeads[i]+" child "+i); - whole = false; - wholeL = false; - - Integer count = label.get(goldLabels[i]); - - if (count == null) - count = 0; - count++; - label.put(goldLabels[i], count); - - Math.abs(goldInstance.heads[i] - i); - } - - if (!("!\"#$%&''()*+,-./:;<=>?@[\\]^_{|}~``".contains(goldInstance.forms[i]))) { - - if (predHeads[i] == goldHeads[i]) { - BPcorr++; - - if (goldLabels[i].equals(predLabels[i])) { - BPcorrL++; - } else { - // System.out.println(numsent+" error gold - // "+goldLabels[i]+" "+predLabels[i]+" head - // "+goldHeads[i]+" child "+i); - // PwholeL = false; - } - } else { - // System.out.println(numsent+"error gold - // "+goldLabels[i]+" "+predLabels[i]+" head - // "+goldHeads[i]+" child "+i); - // Pwhole = false; wholeL = false; - } - - } else - bpunc++; - - if (!(",.:''``".contains(goldInstance.forms[i]))) { - - if (predHeads[i] == goldHeads[i]) { - if (goldInstance.gpos[i].equals(predInstance.ppos[i])) { - } - Pcorr++; - - if (goldLabels[i].equals(predLabels[i])) { - PcorrL++; - if (goldInstance.gpos[i].equals(predInstance.ppos[i])) - corrLableAndPosP++; - - } else { - // System.out.println(numsent+" error gold - // "+goldLabels[i]+" "+predLabels[i]+" head - // "+goldHeads[i]+" child "+i); - PwholeL = false; - } - } else { - // System.out.println(numsent+"error gold - // "+goldLabels[i]+" "+predLabels[i]+" head - // "+goldHeads[i]+" child "+i); - Pwhole = false; - PwholeL = false; - } - - } else - punc++; - - if (!(goldInstance.gpos[i].toLowerCase().startsWith("pu"))) { - if (predHeads[i] == goldHeads[i]) { - correctChnWoPunc++; - - if (goldLabels[i].equals(predLabels[i])) { - correctLChnWoPunc++; - if (goldInstance.gpos[i].equals(predInstance.ppos[i])) - corrLableAndPosC++; - } else { - // System.out.println(numsent+" error gold - // "+goldLabels[i]+" "+predLabels[i]+" head - // "+goldHeads[i]+" child "+i); - // PwholeL = false; - } - } else { - // System.out.println(numsent+"error gold - // "+goldLabels[i]+" "+predLabels[i]+" head - // "+goldHeads[i]+" child "+i); - // Pwhole = false; PwholeL = false; - } - - } else - totalChnWoPunc++; - - if (sig) { - if (tlas) - System.out.println("1\t"); - else - System.out.println("0\t"); - } - - } - total += ((instanceLength - 1)); // Subtract one to not score fake - // root token - - Ptotal += ((instanceLength - 1) - punc); - BPtotal += ((instanceLength - 1) - bpunc); - CPtotal += ((instanceLength - 1) - totalChnWoPunc); - if (whole) - corrsent++; - if (wholeL) - corrsentL++; - if (Pwhole) - Pcorrsent++; - if (PwholeL) - PcorrsentL++; - numsent++; - - goldInstance = goldReader.getNext(); - predInstance = predictedReader.getNext(); - correctHead.add((double) corrLabels / (instanceLength - 1)); - // System.out.println(""+((double)corrLabels/(instanceLength - 1))); - } - - Results r = new Results(); - - r.correctHead = correctHead; - int mult = 100000, diff = 1000; - - r.total = total; - r.corr = corr; - r.las = (float) Math.round(((double) corrL / total) * mult) / diff; - r.ula = (float) Math.round(((double) corr / total) * mult) / diff; - r.lpas = (float) Math.round(((double) corrLableAndPos / total) * mult) / diff; - r.upla = (float) Math.round(((double) corrHeadAndPos / total) * mult) / diff; - float tlasp = (float) Math.round(((double) corrLableAndPosP / Ptotal) * mult) / diff; - float tlasc = (float) Math.round(((double) corrLableAndPosC / Ptotal) * mult) / diff; - - // System.out.print("Total: " + total+" \tCorrect: " + corr+" "); - System.out.print(" LAS/Total/UAS/Total: " + r.las + "/" - + (double) Math.round(((double) corrsentL / numsent) * mult) / diff + "/" + r.ula + "/" - + (double) Math.round(((double) corrsent / numsent) * mult) / diff + " LPAS/UPAS " + r.lpas + "/" - + r.upla); - - System.out.println("; without . " + (double) Math.round(((double) PcorrL / Ptotal) * mult) / diff + "/" - + (double) Math.round(((double) PcorrsentL / numsent) * mult) / diff + "/" - + (double) Math.round(((double) Pcorr / Ptotal) * mult) / diff + "/" - + (double) Math.round(((double) Pcorrsent / numsent) * mult) / diff + " TLAS " + tlasp + " V2 LAS/UAS " - + (double) Math.round(((double) BPcorrL / BPtotal) * mult) / diff + "/" - + (double) Math.round(((double) BPcorr / BPtotal) * mult) / diff + " CHN LAS/UAS " - + (double) Math.round(((double) correctLChnWoPunc / CPtotal) * mult) / diff + "/" - + (double) Math.round(((double) correctChnWoPunc / CPtotal) * mult) / diff + " TLAS " + tlasc); - - float precisionNonProj = (nonProjOk) / ((float) nonProjOk + nonProjWrong); - float recallNonProj = ((float) nonProjOk) / ((float) (nonproj)); - System.out.println("proj " + proj + " nonp " + nonproj + "; predicted proj " + pproj + " non " + pnonproj - + "; nonp correct " + nonProjOk + " nonp wrong " + nonProjWrong - + " precision=(nonProjOk)/(non-projOk+nonProjWrong): " + precisionNonProj + " recall=nonProjOk/nonproj=" - + recallNonProj + " F=" + (2 * precisionNonProj * recallNonProj) / (precisionNonProj + recallNonProj)); - - if (!printEval) - return r; - - new HashMap<String, Integer>(); - new HashMap<String, Integer>(); - - System.out.println("label\ttp\tcount\trecall\t\ttp\tfp+tp\tprecision\t F-Score "); - - for (Entry<String, Integer> e : labelCount.entrySet()) { - - int tp = labelCorrect.get(e.getKey()) == null ? 0 : labelCorrect.get(e.getKey()).intValue(); - Integer count = labelCount.get(e.getKey()); - int fp = falsePositive.get(e.getKey()) == null ? 0 : falsePositive.get(e.getKey()).intValue(); - System.out.println(e.getKey() + "\t" + tp + "\t" + count + "\t" + roundPercent((float) tp / count) + "\t\t" - + tp + "\t" + (fp + tp) + "\t" + roundPercent((float) tp / (fp + tp)) + "\t\t" - + roundPercent((((float) tp / count)) + (float) tp / (fp + tp)) / 2F); // +totalD - } - - return r; - } - - public static float round(double v) { - - return Math.round(v * 10000F) / 10000F; - } - - public static float roundPercent(double v) { - - return Math.round(v * 10000F) / 100F; - } - -} diff --git a/dependencyParser/mate-tools/src/is2/util/EvaluatorTagger.java b/dependencyParser/mate-tools/src/is2/util/EvaluatorTagger.java deleted file mode 100644 index c1f88f4..0000000 --- a/dependencyParser/mate-tools/src/is2/util/EvaluatorTagger.java +++ /dev/null @@ -1,707 +0,0 @@ -package is2.util; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.Comparator; -import java.util.HashMap; -import java.util.Hashtable; -import java.util.Map.Entry; - -import org.apache.commons.math.stat.inference.TestUtils; - -import is2.data.Parse; -import is2.data.SentenceData09; -import is2.io.CONLLReader09; - -public class EvaluatorTagger { - - public static int TAGGER = 1; - public static int what = 0; - - public static void main(String[] args) { - - Options options = new Options(args); - - what = options.tt; - - if (options.eval && options.significant1 == null) { - - evaluate(options.goldfile, options.outfile); - - } else if (options.significant1 != null && options.significant2 != null) { - - System.out.println("compare1 " + options.significant1); - System.out.println("compare2 " + options.significant2); - System.out.println("gold " + options.goldfile); - - check(options.significant1, options.significant2, options.testfile); - - Results r1 = evaluate(options.goldfile, options.significant1, false); - - System.out.println("file 1 done "); - - Results r2 = evaluate(options.goldfile, options.significant2, false); - - double[] s1 = new double[r1.correctHead.size()]; - double[] s2 = new double[r1.correctHead.size()]; - - for (int k = 0; k < r1.correctHead.size(); k++) { - s1[k] = r1.correctHead.get(k); - s2[k] = r2.correctHead.get(k); - } - - try { - double p = TestUtils.pairedTTest(s1, s2); - System.out.print("significant to " + p); - } catch (Exception e) { - e.printStackTrace(); - } - - // significant(options.significant1, options.significant2) ; - - } else if (options.significant1 != null) { - evaluate(options.goldfile, options.outfile, true); - - } - - } - - private static void check(String s1, String s2, String pos) { - CONLLReader09 s1reader = new CONLLReader09(s1, -1); - SentenceData09 s1i = s1reader.getNext(); - CONLLReader09 s2reader = new CONLLReader09(s2, -1); - SentenceData09 s2i = s2reader.getNext(); - - HashMap<String, HashMap<String, Integer>> labchanged = new HashMap<String, HashMap<String, Integer>>(); - - int snt = 0; - - while (s1i != null) { - - snt++; - int good = 0, wrong = 0; - - for (int w = 1; w < s1i.length(); w++) { - - // p(s1:head-pos wrong s2:head-pos good => dep-wrong => - // dep-good) - - if (s1i.gpos[s1i.heads[w]].equals(pos) && !!s1i.ppos[s1i.heads[w]].equals(s1i.gpos[s1i.heads[w]]) - && s2i.ppos[s2i.heads[w]].equals(s2i.gpos[s2i.heads[w]])) { - - HashMap<String, Integer> changed = labchanged.get(s2i.labels[w]); - if (changed == null) { - changed = new HashMap<String, Integer>(); - labchanged.put(s2i.labels[w], changed); - } - if (!(s1i.plabels[w].equals(s1i.labels[w]) && s1i.pheads[w] == s1i.heads[w]) - && (s2i.plabels[w].equals(s2i.labels[w]) && s2i.pheads[w] == s2i.heads[w])) { - good++; - Integer goodL = changed.get("G"); - if (goodL == null) - goodL = 0; - goodL += 1; - changed.put("G", goodL); - } else { - wrong++; - Integer wrongL = changed.get("W"); - if (wrongL == null) - wrongL = 0; - wrongL += 1; - changed.put("W", wrongL); - } - - } - - } - - if (good != 0 || wrong != 0) - System.out.println(snt + " changed yes:" + good + " no:" + wrong); - s1i = s1reader.getNext(); - s2i = s2reader.getNext(); - } - System.out.println("" + labchanged); - - } - - /** - * - * @param act_file - * @param pred_file - * @param what - * top, pos, length, mor - */ - public static void evaluateTagger(String act_file, String pred_file, String what) { - - CONLLReader09 goldReader = new CONLLReader09(act_file); - - CONLLReader09 predictedReader = new CONLLReader09(); - predictedReader.startReading(pred_file); - - Hashtable<String, Integer> errors = new Hashtable<String, Integer>(); - Hashtable<String, StringBuffer> words = new Hashtable<String, StringBuffer>(); - - int total = 0, numsent = 0, corrT = 0; - SentenceData09 goldInstance = goldReader.getNext(); - SentenceData09 predInstance = predictedReader.getNext(); - - HashMap<Integer, int[]> correctL = new HashMap<Integer, int[]>(); - HashMap<String, int[]> pos = new HashMap<String, int[]>(); - HashMap<String, int[]> mor = new HashMap<String, int[]>(); - - float correctM = 0; - ; - - while (goldInstance != null) { - - int instanceLength = goldInstance.length(); - - if (instanceLength != predInstance.length()) - System.out.println("Lengths do not match on sentence " + numsent); - - String gold[] = goldInstance.gpos; - String pred[] = predInstance.ppos; - - String goldM[] = goldInstance.ofeats; - String predM[] = predInstance.pfeats; - - // NOTE: the first item is the root info added during - // nextInstance(), so we skip it. - - for (int i = 1; i < instanceLength; i++) { - - int[] cwr = correctL.get(i); - if (cwr == null) { - cwr = new int[2]; - correctL.put(i, cwr); - } - cwr[1]++; - int[] correctPos = pos.get(gold[i]); - if (correctPos == null) { - correctPos = new int[2]; - pos.put(gold[i], correctPos); - } - correctPos[1]++; - - int[] correctMor = mor.get(goldM[i]); - if (correctMor == null) { - correctMor = new int[2]; - mor.put(goldM[i], correctMor); - } - - if ((goldM[i].equals("_") && predM[i] == null) || goldM[i].equals(predM[i])) { - correctM++; - correctMor[0]++; - } - correctMor[1]++; - - if (gold[i].equals(pred[i])) { - corrT++; - cwr[0]++; - correctPos[0]++; - } else { - String key = "gold: '" + gold[i] + "' pred: '" + pred[i] + "'"; - Integer cnt = errors.get(key); - StringBuffer errWrd = words.get(key); - if (cnt == null) { - errors.put(key, 1); - words.put(key, new StringBuffer().append(goldInstance.forms[i])); - } else { - errors.put(key, cnt + 1); - errWrd.append(" " + goldInstance.forms[i]); - } - } - - } - total += instanceLength - 1; // Subtract one to not score fake root - // token - - numsent++; - - goldInstance = goldReader.getNext(); - predInstance = predictedReader.getNext(); - } - - // System.out.println("error gold:"+goldPos[i]+" pred:"+predPos[i]+" - // "+goldInstance.forms[i]+" snt "+numsent+" i:"+i); - ArrayList<Entry<String, Integer>> opsl = new ArrayList<Entry<String, Integer>>(); - for (Entry<String, Integer> e : errors.entrySet()) { - opsl.add(e); - } - - Collections.sort(opsl, new Comparator<Entry<String, Integer>>() { - - @Override - public int compare(Entry<String, Integer> o1, Entry<String, Integer> o2) { - - return o1.getValue() == o2.getValue() ? 0 : o1.getValue() > o2.getValue() ? -1 : 1; - } - - }); - - if (what.contains("top")) { - System.out.println("top most errors:"); - for (Entry<String, Integer> e : opsl) { - if (e.getValue() > 10) - System.out.println(e.getKey() + " " + e.getValue() + " context: " + words.get(e.getKey())); - } - } - - if (what.contains("length")) { - for (int k = 0; k < 60; k++) { - int[] cwr = correctL.get(k); - if (cwr == null) - continue; - System.out.print(k + ":" + cwr[0] + ":" + cwr[1] + ":" - + (((float) Math.round(10000 * (cwr[0]) / cwr[1])) / 100) + " "); - } - System.out.println(); - } - - if (what.contains("pos")) { - for (Entry<String, int[]> e : pos.entrySet()) { - - System.out.print(e.getKey() + ":" + e.getValue()[0] + ":" + e.getValue()[1] + ":" - + (((float) Math.round(10000 * ((float) e.getValue()[0]) / (e.getValue()[1]))) / 100) + " "); - - } - System.out.print(""); - } - System.out.println(); - if (what.contains("mor")) { - for (Entry<String, int[]> e : mor.entrySet()) { - - System.out.print(e.getKey() + ":" + e.getValue()[0] + ":" + e.getValue()[1] + ":" - + (((float) Math.round(10000 * ((float) e.getValue()[0]) / (e.getValue()[1]))) / 100) + " "); - - } - System.out.print(""); - } - System.out.println("\nTokens: " + total + " Correct: " + corrT + " " + (float) corrT / total + " Correct M.:" - + (int) correctM + " morphology " + (correctM / total)); - } - - public static int errors(SentenceData09 s, boolean uas) { - - int errors = 0; - for (int k = 1; k < s.length(); k++) { - - if (s.heads[k] != s.pheads[k] && (uas || !s.labels[k].equals(s.plabels[k]))) { - errors++; - } - } - return errors; - } - - public static int errors(SentenceData09 s1, SentenceData09 s2, HashMap<String, Integer> r1, - HashMap<String, Integer> r2) { - - int errors = 0; - for (int k = 1; k < s1.length(); k++) { - - if (s1.heads[k] != s1.pheads[k] || (!s1.labels[k].equals(s1.plabels[k]))) { - - if (s2.heads[k] != s2.pheads[k] || (!s2.labels[k].equals(s2.plabels[k]))) { - - // equal do nothing - - } else { - - Integer cnt = r1.get(s1.labels[k]); - if (cnt == null) - cnt = 0; - cnt++; - r1.put(s1.labels[k], cnt); - - } - - } - - if (s2.heads[k] != s2.pheads[k] || (!s2.labels[k].equals(s2.plabels[k]))) { - - if (s1.heads[k] != s1.pheads[k] || (!s1.labels[k].equals(s1.plabels[k]))) { - - // equal do nothing - - } else { - - Integer cnt = r2.get(s2.labels[k]); - if (cnt == null) - cnt = 0; - cnt++; - r2.put(s2.labels[k], cnt); - - } - - } - } - return errors; - } - - public static final String PUNCT = "!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~"; - - public static class Results { - - public int total; - public int corr; - public float las; - public float ula; - public float lpas; - public float upla; - - ArrayList<Double> correctHead; - } - - public static Results evaluate(String act_file, String pred_file) { - return evaluate(act_file, pred_file, true); - } - - public static Results evaluate(String act_file, String pred_file, boolean printEval) { - return evaluate(act_file, pred_file, printEval, false); - } - - public static Results evaluate(String act_file, String pred_file, boolean printEval, boolean sig) { - - CONLLReader09 goldReader = new CONLLReader09(act_file, -1); - CONLLReader09 predictedReader = new CONLLReader09(pred_file, -1); - - int total = 0, corr = 0, corrL = 0, Ptotal = 0, Pcorr = 0, PcorrL = 0, BPtotal = 0, BPcorr = 0, BPcorrL = 0, - corrLableAndPos = 0, corrHeadAndPos = 0; - int corrLableAndPosP = 0, corrLableAndPosC = 0; - int numsent = 0, corrsent = 0, corrsentL = 0, Pcorrsent = 0, PcorrsentL = 0; - ; - int proj = 0, nonproj = 0, pproj = 0, pnonproj = 0, nonProjOk = 0, nonProjWrong = 0; - - int correctChnWoPunc = 0, correctLChnWoPunc = 0, CPtotal = 0; - SentenceData09 goldInstance = goldReader.getNext(); - - SentenceData09 predInstance = predictedReader.getNext(); - HashMap<String, Integer> label = new HashMap<String, Integer>(); - HashMap<String, Integer> labelCount = new HashMap<String, Integer>(); - HashMap<String, Integer> labelCorrect = new HashMap<String, Integer>(); - HashMap<String, Integer> falsePositive = new HashMap<String, Integer>(); - HashMap<String, HashMap<String, Integer>> confusion = new HashMap<String, HashMap<String, Integer>>(); - - HashMap<String, HashMap<String, Integer>> posLabelAssign = new HashMap<String, HashMap<String, Integer>>(); - - // does the node have the correct head? - ArrayList<Double> correctHead = new ArrayList<Double>(); - - while (goldInstance != null) { - - int instanceLength = goldInstance.length(); - - if (instanceLength != predInstance.length()) - System.out.println("Lengths do not match on sentence " + numsent); - - int[] goldHeads = goldInstance.heads; - - String[] goldLabels, predLabels; - if (what == TAGGER) { - goldLabels = goldInstance.gpos; - predLabels = predInstance.ppos; - } else { - goldLabels = goldInstance.labels; - predLabels = predInstance.plabels; - } - - int[] predHeads = predInstance.pheads; - - boolean whole = true; - boolean wholeL = true; - - boolean Pwhole = true; - boolean PwholeL = true; - - int corrLabels = 0; - - // NOTE: the first item is the root info added during - // nextInstance(), so we skip it. - - int punc = 0, bpunc = 0, totalChnWoPunc = 0; - for (int i = 1; i < instanceLength; i++) { - - Parse p = new Parse(predHeads.length); - for (int k = 0; k < p.heads.length; k++) - p.heads[k] = (short) predHeads[k]; - - Parse g = new Parse(predHeads.length); - for (int k = 0; k < g.heads.length; k++) - g.heads[k] = (short) goldHeads[k]; - - HashMap<String, Integer> labelsNum = posLabelAssign.get(goldInstance.gpos[goldInstance.heads[i]]); - if (labelsNum == null) { - labelsNum = new HashMap<String, Integer>(); - posLabelAssign.put(goldInstance.gpos[goldInstance.heads[i]], labelsNum); - } - - Integer num = labelsNum.get(goldInstance.labels[i]); - if (num == null) - num = 0; - num++; - labelsNum.put(goldInstance.labels[i], num); - - Integer count = labelCount.get(goldLabels[i]); - if (count == null) - count = 0; - - count++; - - labelCount.put(goldLabels[i], count); - - if (goldLabels[i].equals(predLabels[i]) && (what == TAGGER || predHeads[i] == goldHeads[i])) { - Integer correct = labelCorrect.get(goldLabels[i]); - if (correct == null) - correct = 0; - correct++; - labelCorrect.put(goldLabels[i], correct); - - } else { - - Integer fp = falsePositive.get(predLabels[i]); - if (fp == null) - fp = 0; - fp++; - falsePositive.put(predLabels[i], fp); - - HashMap<String, Integer> conf = confusion.get(goldLabels[i]); - if (conf == null) - confusion.put(goldLabels[i], conf = new HashMap<String, Integer>()); - - conf.put(predLabels[i], conf.get(predLabels[i]) == null ? 1 : conf.get(predLabels[i]) + 1); - - } - - boolean tlas = false; - if (predHeads[i] == goldHeads[i]) { - corr++; - - if (goldInstance.gpos[i].equals(predInstance.ppos[i])) - corrHeadAndPos++; - if (goldLabels[i].equals(predLabels[i])) { - corrL++; - // if (predLabels[i].startsWith("PMOD")) - corrLabels++; - // else correctHead.add(0); - if (goldInstance.gpos[i].equals(predInstance.ppos[i])) { - tlas = true; - corrLableAndPos++; - } - } else { - // correctHead.add(0); - // System.out.println(numsent+" error gold - // "+goldLabels[i]+" "+predLabels[i]+" head - // "+goldHeads[i]+" child "+i); - wholeL = false; - } - } else { - - // correctHead.add(0); - - // System.out.println(numsent+"error gold "+goldLabels[i]+" - // "+predLabels[i]+" head "+goldHeads[i]+" child "+i); - whole = false; - wholeL = false; - - count = label.get(goldLabels[i]); - - if (count == null) - count = 0; - count++; - label.put(goldLabels[i], count); - - Math.abs(goldInstance.heads[i] - i); - } - - if (!("!\"#$%&''()*+,-./:;<=>?@[\\]^_{|}~``".contains(goldInstance.forms[i]))) { - - if (predHeads[i] == goldHeads[i]) { - BPcorr++; - - if (goldLabels[i].equals(predLabels[i])) { - BPcorrL++; - } else { - // System.out.println(numsent+" error gold - // "+goldLabels[i]+" "+predLabels[i]+" head - // "+goldHeads[i]+" child "+i); - // PwholeL = false; - } - } else { - // System.out.println(numsent+"error gold - // "+goldLabels[i]+" "+predLabels[i]+" head - // "+goldHeads[i]+" child "+i); - // Pwhole = false; wholeL = false; - } - - } else - bpunc++; - - if (!(",.:''``".contains(goldInstance.forms[i]))) { - - if (predHeads[i] == goldHeads[i]) { - if (goldInstance.gpos[i].equals(predInstance.ppos[i])) { - } - Pcorr++; - - if (goldLabels[i].equals(predLabels[i])) { - PcorrL++; - if (goldInstance.gpos[i].equals(predInstance.ppos[i])) - corrLableAndPosP++; - - } else { - // System.out.println(numsent+" error gold - // "+goldLabels[i]+" "+predLabels[i]+" head - // "+goldHeads[i]+" child "+i); - PwholeL = false; - } - } else { - // System.out.println(numsent+"error gold - // "+goldLabels[i]+" "+predLabels[i]+" head - // "+goldHeads[i]+" child "+i); - Pwhole = false; - PwholeL = false; - } - - } else - punc++; - - if (!(goldInstance.gpos[i].toLowerCase().startsWith("pu"))) { - if (predHeads[i] == goldHeads[i]) { - correctChnWoPunc++; - - if (goldLabels[i].equals(predLabels[i])) { - correctLChnWoPunc++; - if (goldInstance.gpos[i].equals(predInstance.ppos[i])) - corrLableAndPosC++; - } else { - // System.out.println(numsent+" error gold - // "+goldLabels[i]+" "+predLabels[i]+" head - // "+goldHeads[i]+" child "+i); - // PwholeL = false; - } - } else { - // System.out.println(numsent+"error gold - // "+goldLabels[i]+" "+predLabels[i]+" head - // "+goldHeads[i]+" child "+i); - // Pwhole = false; PwholeL = false; - } - - } else - totalChnWoPunc++; - - if (sig) { - if (tlas) - System.out.println("1\t"); - else - System.out.println("0\t"); - } - - } - total += ((instanceLength - 1)); // Subtract one to not score fake - // root token - - Ptotal += ((instanceLength - 1) - punc); - BPtotal += ((instanceLength - 1) - bpunc); - CPtotal += ((instanceLength - 1) - totalChnWoPunc); - if (whole) - corrsent++; - if (wholeL) - corrsentL++; - if (Pwhole) - Pcorrsent++; - if (PwholeL) - PcorrsentL++; - numsent++; - - goldInstance = goldReader.getNext(); - predInstance = predictedReader.getNext(); - correctHead.add((double) corrLabels / (instanceLength - 1)); - // System.out.println(""+((double)corrLabels/(instanceLength - 1))); - } - - Results r = new Results(); - - r.correctHead = correctHead; - int mult = 100000, diff = 1000; - - r.total = total; - r.corr = corr; - r.las = (float) Math.round(((double) corrL / total) * mult) / diff; - r.ula = (float) Math.round(((double) corr / total) * mult) / diff; - r.lpas = (float) Math.round(((double) corrLableAndPos / total) * mult) / diff; - r.upla = (float) Math.round(((double) corrHeadAndPos / total) * mult) / diff; - float tlasp = (float) Math.round(((double) corrLableAndPosP / Ptotal) * mult) / diff; - float tlasc = (float) Math.round(((double) corrLableAndPosC / Ptotal) * mult) / diff; - - // System.out.print("Total: " + total+" \tCorrect: " + corr+" "); - System.out.print(" LAS/Total/UAS/Total: " + r.las + "/" - + (double) Math.round(((double) corrsentL / numsent) * mult) / diff + "/" + r.ula + "/" - + (double) Math.round(((double) corrsent / numsent) * mult) / diff + " LPAS/UPAS " + r.lpas + "/" - + r.upla); - - System.out.println("; without . " + (double) Math.round(((double) PcorrL / Ptotal) * mult) / diff + "/" - + (double) Math.round(((double) PcorrsentL / numsent) * mult) / diff + "/" - + (double) Math.round(((double) Pcorr / Ptotal) * mult) / diff + "/" - + (double) Math.round(((double) Pcorrsent / numsent) * mult) / diff + " TLAS " + tlasp + " V2 LAS/UAS " - + (double) Math.round(((double) BPcorrL / BPtotal) * mult) / diff + "/" - + (double) Math.round(((double) BPcorr / BPtotal) * mult) / diff + " CHN LAS/UAS " - + (double) Math.round(((double) correctLChnWoPunc / CPtotal) * mult) / diff + "/" - + (double) Math.round(((double) correctChnWoPunc / CPtotal) * mult) / diff + " TLAS " + tlasc); - - float precisionNonProj = (nonProjOk) / ((float) nonProjOk + nonProjWrong); - float recallNonProj = ((float) nonProjOk) / ((float) (nonproj)); - System.out.println("proj " + proj + " nonp " + nonproj + "; predicted proj " + pproj + " non " + pnonproj - + "; nonp correct " + nonProjOk + " nonp wrong " + nonProjWrong - + " precision=(nonProjOk)/(non-projOk+nonProjWrong): " + precisionNonProj + " recall=nonProjOk/nonproj=" - + recallNonProj + " F=" + (2 * precisionNonProj * recallNonProj) / (precisionNonProj + recallNonProj)); - - if (!printEval) - return r; - - new HashMap<String, Integer>(); - new HashMap<String, Integer>(); - - System.out.println("label\ttp\tcount\trecall\t\ttp\tfp+tp\tprecision\t F-Score "); - - for (Entry<String, Integer> e : labelCount.entrySet()) { - - int tp = labelCorrect.get(e.getKey()) == null ? 0 : labelCorrect.get(e.getKey()).intValue(); - Integer count = labelCount.get(e.getKey()); - int fp = falsePositive.get(e.getKey()) == null ? 0 : falsePositive.get(e.getKey()).intValue(); - System.out.println(e.getKey() + "\t" + tp + "\t" + count + "\t" + roundPercent((float) tp / count) + "\t\t" - + tp + "\t" + (fp + tp) + "\t" + roundPercent((float) tp / (fp + tp)) + "\t\t" - + roundPercent((((float) tp / count)) + (float) tp / (fp + tp)) / 2F); // +totalD - } - - for (Entry<String, HashMap<String, Integer>> e : confusion.entrySet()) { - HashMap<String, Integer> values = e.getValue(); - ArrayList<Entry<String, Integer>> entries = new ArrayList<Entry<String, Integer>>(values.entrySet()); - Collections.sort(entries, new Comparator<Entry<String, Integer>>() { - - @Override - public int compare(Entry<String, Integer> o1, Entry<String, Integer> o2) { - - return o2.getValue().compareTo(o1.getValue()); - } - - }); - - System.out.println(e.getKey() + "\t" + entries); - - } - System.out.println("" + posLabelAssign); - - return r; - } - - public static float round(double v) { - - return Math.round(v * 10000F) / 10000F; - } - - public static float roundPercent(double v) { - - return Math.round(v * 10000F) / 100F; - } - -} diff --git a/dependencyParser/mate-tools/src/is2/util/ExtractParagraphs.java b/dependencyParser/mate-tools/src/is2/util/ExtractParagraphs.java deleted file mode 100644 index aa65d8d..0000000 --- a/dependencyParser/mate-tools/src/is2/util/ExtractParagraphs.java +++ /dev/null @@ -1,74 +0,0 @@ -package is2.util; - -import java.io.BufferedReader; -import java.io.BufferedWriter; -import java.io.File; -import java.io.FileInputStream; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.InputStreamReader; -import java.io.OutputStreamWriter; - -public class ExtractParagraphs { - - /** - * - * @param args - * @throws IOException - */ - public static void main(String args[]) throws IOException { - - if (args.length < 1) { - System.out.println("Please provide a file name."); - System.exit(0); - } - - File file = new File(args[0]); - file.isDirectory(); - String[] dirs = file.list(); - - BufferedWriter write = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(args[1]), "UTF-8"), - 32768); - int cnt = 0; - - for (String fileName : dirs) { - BufferedReader reader = new BufferedReader( - new InputStreamReader(new FileInputStream(args[0] + fileName), "UTF-8"), 32768); - - int state = 0; - - String s; - while ((s = reader.readLine()) != null) { - - if (s.startsWith("<P>") || s.startsWith("<p>")) { - state = 1; // paragraph start - continue; - } - - if (s.startsWith("</P>") || s.startsWith("</p>")) { - state = 2; // paragraph end - write.newLine(); - } - - if (state == 1) { - String sp[] = s.split("\\. "); - for (String p : sp) { - write.write(p); - // if (sp.length>1) write.newLine(); - } - cnt++; - } - } - - // if (cnt>5000) break; - - reader.close(); - } - write.flush(); - write.close(); - - System.out.println("Extract " + cnt + " lines "); - - } - -} diff --git a/dependencyParser/mate-tools/src/is2/util/IntStack.java b/dependencyParser/mate-tools/src/is2/util/IntStack.java deleted file mode 100644 index b291d16..0000000 --- a/dependencyParser/mate-tools/src/is2/util/IntStack.java +++ /dev/null @@ -1,90 +0,0 @@ -/** - * - */ -package is2.util; - -/** - * @author Dr. Bernd Bohnet, 01.06.2011 - * - * - */ -final public class IntStack { - - final public int[] stack; - public int position = -1; - - public IntStack(int size) { - if (size <= 0) - stack = new int[1]; - else - stack = new int[size + 1]; - } - - public IntStack(IntStack s) { - stack = s.stack; - position = s.position; - } - - public int peek() { - return position == -1 ? -1 : stack[position]; - } - - public void push(int i) { - // if (i ==2)new Exception().printStackTrace(); - stack[++position] = i; - } - - public int pop() { - return position == -1 ? -1 : stack[position--]; - } - - public int size() { - return position + 1; - } - - public boolean isEmpty() { - return position == -1 ? true : false; - } - - public int get(int p) { - return stack[p]; - } - - public void clear() { - position = -1; - } - - /** - * @param b - */ - public void addAll(IntStack b) { - - position = b.position; - if (position < 0) - return; - - for (int k = 0; k <= position; k++) - stack[k] = b.stack[k]; - - } - - public boolean contains(int s) { - ; - - for (int k = 0; k <= position; k++) - if (stack[k] == s) - return true; - - return false; - } - - @Override - public String toString() { - StringBuffer s = new StringBuffer(); - for (int k = position; k >= 0; k--) { - s.append(k).append(":").append(this.stack[k]).append(" "); - } - return s.toString(); - } - -} diff --git a/dependencyParser/mate-tools/src/is2/util/Long2Int.java b/dependencyParser/mate-tools/src/is2/util/Long2Int.java deleted file mode 100644 index e6ef45c..0000000 --- a/dependencyParser/mate-tools/src/is2/util/Long2Int.java +++ /dev/null @@ -1,81 +0,0 @@ -package is2.util; - -import is2.data.Long2IntInterface; - -/** - * @author Bernd Bohnet, 01.09.2009 - * - * Maps for the Hash Kernel the long values to the int values. - */ -final public class Long2Int implements Long2IntInterface { - - public Long2Int() { - size = 115911564; - } - - public Long2Int(int s) { - size = s; - } - - /** Integer counter for long2int */ - final private int size; // 0x03ffffff //0x07ffffff - - /* - * (non-Javadoc) - * - * @see is2.sp09k9992.Long2IntIterface#size() - */ - @Override - public int size() { - return size; - } - - /* - * (non-Javadoc) - * - * @see is2.sp09k9992.Long2IntIterface#start() has no meaning for this - * implementation - */ - final public void start() { - } - - /* - * (non-Javadoc) - * - * @see is2.sp09k9992.Long2IntIterface#l2i(long) - */ - @Override - final public int l2i(long l) { - if (l < 0) - return -1; - - // this works well LAS 88.138 - // int r= (int)(( l ^ (l&0xffffffff00000000L) >>> 29 ));//0x811c9dc5 ^ - // // 29 - // return Math.abs(r % size); - // this works a bit better and good with 0x03ffffff - // - /* - * long r= l;//26 l = (l>>12)&0xfffffffffffff000L; r ^= l;//38 l = - * (l>>11)&0xffffffffffffc000L; r ^= l;//49 l = (l>>9)& - * 0xffffffffffff0000L; //53 r ^= l;//58 l = (l>>7)&0xfffffffffffc0000L; - * //62 r ^=l;//65 int x = (int)r; x = x % size; // return x >= 0 ? x : - * -x ;// Math.abs(r % size); - * - */ - // 26 0x03ffffff - // together with 0x07ffffff 27 88.372 - long r = l;// 27 - l = (l >> 13) & 0xffffffffffffe000L; - r ^= l; // 40 - l = (l >> 11) & 0xffffffffffff0000L; - r ^= l; // 51 - l = (l >> 9) & 0xfffffffffffc0000L; // 53 - r ^= l; // 60 - l = (l >> 7) & 0xfffffffffff00000L; // 62 - r ^= l; // 67 - int x = ((int) r) % size; - - return x >= 0 ? x : -x; - } -} diff --git a/dependencyParser/mate-tools/src/is2/util/Options.java b/dependencyParser/mate-tools/src/is2/util/Options.java deleted file mode 100644 index 30b53b0..0000000 --- a/dependencyParser/mate-tools/src/is2/util/Options.java +++ /dev/null @@ -1,133 +0,0 @@ -package is2.util; - -import java.io.File; - -public final class Options extends OptionsSuper { - - public Options(String[] args) { - - for (int i = 0; i < args.length; i++) { - String[] pair = args[i].split(":"); - - if (pair[0].equals("--help")) - explain(); - else if (pair[0].equals("-train")) { - train = true; - trainfile = args[i + 1]; - } else if (pair[0].equals("-eval")) { - eval = true; - goldfile = args[i + 1]; - i++; - } else if (pair[0].equals("-test")) { - test = true; - testfile = args[i + 1]; - i++; - } else if (pair[0].equals("-i")) { - numIters = Integer.parseInt(args[i + 1]); - i++; - } else if (pair[0].equals("-out")) { - outfile = args[i + 1]; - i++; - } else if (pair[0].equals("-decode")) { - decodeProjective = args[i + 1].equals("proj"); - i++; - } else if (pair[0].equals("-confidence")) { - - conf = true; - } - - else if (pair[0].equals("-count")) { - count = Integer.parseInt(args[i + 1]); - i++; - } else if (pair[0].equals("-model")) { - modelName = args[i + 1]; - i++; - } else if (pair[0].equals("-device")) { - device = args[i + 1]; - i++; - } else if (pair[0].equals("-tmp")) { - tmp = args[i + 1]; - i++; - } else if (pair[0].equals("-format")) { - // format = args[i+1]; - formatTask = Integer.parseInt(args[i + 1]); - i++; - } else if (pair[0].equals("-allfeatures")) { - allFeatures = true; - } else if (pair[0].equals("-nonormalize")) { - normalize = false; - } else if (pair[0].equals("-nframes")) { - // format = args[i+1]; - nbframes = args[i + 1]; - i++; - - } else if (pair[0].equals("-pframes")) { - // format = args[i+1]; - pbframes = args[i + 1]; - i++; - } else if (pair[0].equals("-nopred")) { - nopred = true; - } else if (pair[0].equals("-divide")) { - keep = true; - } else if (pair[0].equals("-lexicon")) { - lexicon = args[i + 1]; - i++; - - } else - super.addOption(args, i); - - } - - try { - - if (trainfile != null) { - - if (keep && tmp != null) { - trainforest = new File(tmp); - if (!trainforest.exists()) - keep = false; - - } else if (tmp != null) { - trainforest = File.createTempFile("train", ".tmp", new File(tmp)); - trainforest.deleteOnExit(); - } else { - trainforest = File.createTempFile("train", ".tmp"); // ,new - // File("F:\\") - trainforest.deleteOnExit(); - } - - } - - } catch (java.io.IOException e) { - System.out.println("Unable to create tmp files for feature forests!"); - System.out.println(e); - System.exit(0); - } - } - - private void explain() { - System.out.println("Usage: "); - System.out.println("java -class mate.jar is2.parser.Parser [Options]"); - System.out.println(); - System.out.println("Example: "); - System.out.println( - " java -class mate.jar is2.parser.Parser -model eps3.model -train corpora/conll08st/train/train.closed -test corpora/conll08st/devel/devel.closed -out b3.test -eval corpora/conll08st/devel/devel.closed -count 2000 -i 6"); - System.out.println(""); - System.out.println("Options:"); - System.out.println(""); - System.out.println(" -train <file> the corpus a model is trained on; default " + this.trainfile); - System.out.println(" -test <file> the input corpus for testing; default " + this.testfile); - System.out.println(" -out <file> the output corpus (result) of a test run; default " + this.outfile); - System.out.println(" -model <file> the parsing model for traing the model is stored in the files"); - System.out.println( - " and for parsing the model is load from this file; default " + this.modelName); - System.out.println( - " -i <number> the number of training iterations; good numbers are 10 for smaller corpora and 6 for bigger; default " - + this.numIters); - System.out.println(" -count <number> the n first sentences of the corpus are take for the training default " - + this.count); - System.out.println(" -format <number> conll format of the year 8 or 9; default " + this.formatTask); - - System.exit(0); - } -} diff --git a/dependencyParser/mate-tools/src/is2/util/OptionsSuper.java b/dependencyParser/mate-tools/src/is2/util/OptionsSuper.java deleted file mode 100755 index f6370f7..0000000 --- a/dependencyParser/mate-tools/src/is2/util/OptionsSuper.java +++ /dev/null @@ -1,231 +0,0 @@ -package is2.util; - -import java.io.File; - -public class OptionsSuper { - - public String trainfile = null; - public String testfile = null; - public File trainforest = null; - - public String nbframes = null; - public String pbframes = null; - - public boolean nopred = false; - public boolean upper = false; - - public boolean train = false; - public boolean eval = false; - public boolean test = false; - public boolean keep = false; - public boolean flt = false; - public boolean loadTaggerModels = false; - - public String modelName = "prs.mdl"; - public String modelTaggerName = null; - - public String useMapping = null; - public String device = "C:"; - public String tmp = null; - public boolean createForest = true; - public boolean decodeProjective = false; - public double decodeTH = 0.3d; - public String format = "CONLL"; - public int formatTask = 9; - public int numIters = 10; - public int best = 1000; - public String outfile = "dp.conll"; - public String charset = "UTF-8"; - public String phraseTrain = null; - public String phraseTest = null; - public String goldfile = null; - public String gout = "sec23.gld"; - public String features = null; - public String lexicon = null; - public int hsize = 0x07ffffff; - public int maxLen = 2000; - public int maxForms = Integer.MAX_VALUE; - public int beam = 4; - public float prune = -100000000; - - public String third = ""; - public String second = ""; - public String first = ""; - - public int cross = 10; - - // public boolean secondOrder = true; - public boolean useRelationalFeatures = false; - public int count = 10000000; - public int cores = Integer.MAX_VALUE; - public int start = 0; - public int minOccureForms = 0; - public int tt = 30; // tagger averaging - public boolean allFeatures = false; - public boolean normalize = false; - public boolean no2nd = false; - public boolean noLemmas = false; - public boolean few2nd = false, noLinear = false, noMorph = false; - public String clusterFile; - - // output confidence values - public boolean conf = false; - public String phraseFormat = "penn"; // tiger | penn - public boolean average = true; - public boolean label = false; - public boolean stack = false; - public boolean oneRoot = false; - - public String significant1 = null, significant2 = null; - - // horizontal stacking - public int minLength = 0, maxLength = Integer.MAX_VALUE; - public boolean overwritegold = false; - - public static final int MULTIPLICATIVE = 1, SHIFT = 2; - public int featureCreation = MULTIPLICATIVE; - - public OptionsSuper(String[] args, String dummy) { - - for (int i = 0; i < args.length; i++) { - i = addOption(args, i); - } - - } - - public OptionsSuper() { - } - - public int addOption(String args[], int i) { - - if (args[i].equals("-train")) { - train = true; - trainfile = args[i + 1]; - } else if (args[i].equals("-eval")) { - eval = true; - goldfile = args[i + 1]; - i++; - } else if (args[i].equals("-gout")) { - gout = args[i + 1]; - i++; - } else if (args[i].equals("-test")) { - test = true; - testfile = args[i + 1]; - i++; - } else if (args[i].equals("-sig1")) { - significant1 = args[i + 1]; - i++; - } else if (args[i].equals("-sig2")) { - significant2 = args[i + 1]; - i++; - } else if (args[i].equals("-i")) { - numIters = Integer.parseInt(args[i + 1]); - i++; - } else if (args[i].equals("-out")) { - outfile = args[i + 1]; - i++; - } else if (args[i].equals("-cluster")) { - clusterFile = args[i + 1]; - i++; - } - - else if (args[i].equals("-count")) { - count = Integer.parseInt(args[i + 1]); - i++; - } else if (args[i].equals("-model")) { - modelName = args[i + 1]; - i++; - } else if (args[i].equals("-tmodel")) { - this.modelTaggerName = args[i + 1]; - i++; - } else if (args[i].equals("-nonormalize")) { - normalize = false; - } else if (args[i].equals("-float")) { - flt = true; - } else if (args[i].equals("-hsize")) { - hsize = Integer.parseInt(args[i + 1]); - i++; - } else if (args[i].equals("-charset")) { - charset = args[++i]; - } else if (args[i].equals("-pstrain")) { - this.phraseTrain = args[i + 1]; - i++; - } else if (args[i].equals("-pstest")) { - this.phraseTest = args[i + 1]; - i++; - } else if (args[i].equals("-len")) { - maxLen = Integer.parseInt(args[i + 1]); - i++; - } else if (args[i].equals("-cores")) { - cores = Integer.parseInt(args[i + 1]); - i++; - } else if (args[i].equals("-start")) { - start = Integer.parseInt(args[i + 1]); - i++; - } else if (args[i].equals("-max")) { - maxLength = Integer.parseInt(args[i + 1]); - i++; - } else if (args[i].equals("-min")) { - minLength = Integer.parseInt(args[i + 1]); - i++; - } else if (args[i].equals("-noLemmas")) { - noLemmas = true; - } else if (args[i].equals("-noavg")) { - this.average = false; - } else if (args[i].equals("-label")) { - label = true; - } else if (args[i].equals("-stack")) { - stack = true; - } else if (args[i].equals("-overwritegold")) { - overwritegold = true; - } else if (args[i].equals("-format")) { - formatTask = Integer.parseInt(args[++i]); - } else if (args[i].equals("-tt")) { - tt = Integer.parseInt(args[++i]); - } else if (args[i].equals("-min-occure-forms")) { - minOccureForms = Integer.parseInt(args[++i]); - } else if (args[i].equals("-loadTaggerModels")) { - this.loadTaggerModels = true; - ; - - } else if (args[i].equals("-feature_creation")) { - this.featureCreation = args[++i].equals("shift") ? SHIFT : MULTIPLICATIVE; - } - - return i; - - } - - @Override - public String toString() { - StringBuilder sb = new StringBuilder(); - sb.append("FLAGS ["); - sb.append("train-file: " + trainfile); - sb.append(" | "); - sb.append("test-file: " + testfile); - sb.append(" | "); - sb.append("gold-file: " + goldfile); - sb.append(" | "); - sb.append("output-file: " + outfile); - sb.append(" | "); - sb.append("model-name: " + modelName); - sb.append(" | "); - sb.append("train: " + train); - sb.append(" | "); - sb.append("test: " + test); - sb.append(" | "); - sb.append("eval: " + eval); - sb.append(" | "); - sb.append("training-iterations: " + numIters); - sb.append(" | "); - sb.append("decode-type: " + decodeProjective); - sb.append(" | "); - sb.append("create-forest: " + createForest); - sb.append(" | "); - sb.append("format: " + format); - - sb.append("]\n"); - return sb.toString(); - } - -} \ No newline at end of file diff --git a/dependencyParser/mate-tools/src/is2/util/ParserEvaluator.java b/dependencyParser/mate-tools/src/is2/util/ParserEvaluator.java deleted file mode 100644 index 95e8949..0000000 --- a/dependencyParser/mate-tools/src/is2/util/ParserEvaluator.java +++ /dev/null @@ -1,100 +0,0 @@ -package is2.util; - -import is2.data.SentenceData09; -import is2.io.CONLLReader09; - -public class ParserEvaluator { - - public static final String PUNCT = "!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~"; - - public static class Results { - - public int total; - public int corr; - public float las; - public float ula; - - } - - public static Results evaluate(String act_file, String pred_file) throws Exception { - - CONLLReader09 goldReader = new CONLLReader09(act_file, -1); - CONLLReader09 predictedReader = new CONLLReader09(pred_file, -1); - - int total = 0, corr = 0, corrL = 0; - int numsent = 0, corrsent = 0, corrsentL = 0; - SentenceData09 goldInstance = goldReader.getNext(); - SentenceData09 predInstance = predictedReader.getNext(); - - while (goldInstance != null) { - - int instanceLength = goldInstance.length(); - - if (instanceLength != predInstance.length()) - System.out.println("Lengths do not match on sentence " + numsent); - - int[] goldHeads = goldInstance.heads; - String[] goldLabels = goldInstance.labels; - int[] predHeads = predInstance.pheads; - String[] predLabels = predInstance.plabels; - - boolean whole = true; - boolean wholeL = true; - - // NOTE: the first item is the root info added during - // nextInstance(), so we skip it. - - int punc = 0; - for (int i = 1; i < instanceLength; i++) { - if (predHeads[i] == goldHeads[i]) { - corr++; - - if (goldLabels[i].equals(predLabels[i])) - corrL++; - else { - // System.out.println(numsent+" error gold - // "+goldLabels[i]+" "+predLabels[i]+" head - // "+goldHeads[i]+" child "+i); - wholeL = false; - } - } else { - // System.out.println(numsent+"error gold "+goldLabels[i]+" - // "+predLabels[i]+" head "+goldHeads[i]+" child "+i); - whole = false; - wholeL = false; - } - } - total += ((instanceLength - 1) - punc); // Subtract one to not score - // fake root token - - if (whole) - corrsent++; - if (wholeL) - corrsentL++; - numsent++; - - goldInstance = goldReader.getNext(); - predInstance = predictedReader.getNext(); - } - - Results r = new Results(); - - r.total = total; - r.corr = corr; - r.las = (float) Math.round(((double) corrL / total) * 100000) / 1000; - r.ula = (float) Math.round(((double) corr / total) * 100000) / 1000; - System.out.print("Total: " + total + " \tCorrect: " + corr + " "); - System.out.println("LAS: " + (double) Math.round(((double) corrL / total) * 100000) / 1000 + " \tTotal: " - + (double) Math.round(((double) corrsentL / numsent) * 100000) / 1000 + " \tULA: " - + (double) Math.round(((double) corr / total) * 100000) / 1000 + " \tTotal: " - + (double) Math.round(((double) corrsent / numsent) * 100000) / 1000); - - return r; - } - - public static float round(double v) { - - return Math.round(v * 10000F) / 10000F; - } - -} diff --git a/dependencyParser/mate-tools/src/is2/util/Split.java b/dependencyParser/mate-tools/src/is2/util/Split.java deleted file mode 100755 index ea1151b..0000000 --- a/dependencyParser/mate-tools/src/is2/util/Split.java +++ /dev/null @@ -1,89 +0,0 @@ -package is2.util; - -import java.io.BufferedReader; -import java.io.FileInputStream; -import java.io.IOException; -import java.io.Reader; -import java.nio.channels.Channels; -import java.nio.channels.FileChannel; -import java.nio.charset.Charset; -import java.nio.charset.CharsetDecoder; -import java.util.StringTokenizer; - -public class Split { - - /** - * Splits a tokenized sentences into one word per line format: - * - * Input > I am an text . > Sentence two ... - * - * Output: I _ _ _ ... am _ _ _ ... ... - * - * @param args - * @throws IOException - */ - public static void main(String args[]) throws IOException { - - if (args.length != 1) { - System.out.println("Please provide a file name."); - System.exit(0); - } - - String filename = args[0]; - // Charset charset = Charset.forName("UTF-8"); - - FileInputStream in = new FileInputStream(filename); - FileChannel channel = in.getChannel(); - CharsetDecoder decoder = Charset.defaultCharset().newDecoder();// charset.newDecoder(); - Reader infile = Channels.newReader(channel, decoder, 16 * 1024); - BufferedReader bInfile = new BufferedReader(infile); - - // DataOutputStream dos = new DataOutputStream(new - // BufferedOutputStream(new FileOutputStream(options.modelName))); - - String s; - while ((s = bInfile.readLine()) != null) { - - // do the first tokens contain a colon? - int colon = 0; - for (int k = 0; k < 12; k++) { - if (s.length() <= k) - break; - if (s.charAt(k) == ':') { - - colon++; - break; - } - if (s.charAt(k) == ' ') - break; - } - - String prefix = colon > 0 ? s.substring(0, s.indexOf(":")) + "_" : ""; - - if (colon > 0) { - s = s.substring(s.indexOf(":") + 1); - } - - StringTokenizer t = new StringTokenizer(s); - int i = 1; - boolean found = false; - while (t.hasMoreTokens()) { - found = true; - String tk = t.nextToken(); - if (tk.contains("=")) - continue; - System.out.print(prefix + i + "\t"); - System.out.print(tk); - System.out.println("\t_\t_\t_\t_\t_\t_\t_\t_\t_\t_\t_\t_\t_"); - i++; - } - if (found) - System.out.println(); - - } - bInfile.close(); - in.close(); - - } - -} diff --git a/dependencyParser/mate-tools/src/is2/util/Split2.java b/dependencyParser/mate-tools/src/is2/util/Split2.java deleted file mode 100644 index 4ed4004..0000000 --- a/dependencyParser/mate-tools/src/is2/util/Split2.java +++ /dev/null @@ -1,56 +0,0 @@ -package is2.util; - -import java.io.BufferedReader; -import java.io.BufferedWriter; -import java.io.FileInputStream; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.InputStreamReader; -import java.io.OutputStreamWriter; -import java.util.StringTokenizer; - -public class Split2 { - - /** - * Splits a tokenized sentences into one word per line format: - * - * Input > I am an text . > Sentence two ... - * - * Output: I _ _ _ ... am _ _ _ ... ... - * - * @param args - * @throws IOException - */ - public static void main(String args[]) throws IOException { - - if (args.length < 1) { - System.out.println("Please provide a file name."); - System.exit(0); - } - - BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(args[0]), "UTF-8"), 32768); - BufferedWriter write = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(args[1]), "ISO-8859-1")); - - String s; - int cnt = 0; - while ((s = reader.readLine()) != null) { - StringTokenizer t = new StringTokenizer(s); - while (t.hasMoreTokens()) { - String tk = t.nextToken(); - for (int c : tk.toCharArray()) { - if (c < 0 && c >= 255) - System.out.println("contain sign " + c + " " + cnt); - } - write.write(tk); - write.newLine(); - cnt++; - } - write.newLine(); - } - reader.close(); - write.flush(); - write.close(); - - } - -} diff --git a/dependencyParser/mate-tools/src/is2/util/Split3.java b/dependencyParser/mate-tools/src/is2/util/Split3.java deleted file mode 100644 index 2cf7cf2..0000000 --- a/dependencyParser/mate-tools/src/is2/util/Split3.java +++ /dev/null @@ -1,51 +0,0 @@ -package is2.util; - -import java.io.BufferedReader; -import java.io.BufferedWriter; -import java.io.FileInputStream; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.InputStreamReader; -import java.io.OutputStreamWriter; -import java.util.StringTokenizer; - -public class Split3 { - - /** - * Splits a tokenized sentences into one word per line format: - * - * Input > I am an text . > Sentence two ... - * - * Output: I _ _ _ ... am _ _ _ ... ... - * - * @param args - * @throws IOException - */ - public static void main(String args[]) throws IOException { - - if (args.length < 1) { - System.out.println("Please provide a file name."); - System.exit(0); - } - - BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(args[0]), "UTF-8"), 32768); - BufferedWriter write = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(args[1]), "UTF-8"), - 32768); - - String s; - while ((s = reader.readLine()) != null) { - StringTokenizer t = new StringTokenizer(s); - while (t.hasMoreTokens()) { - String tk = t.nextToken(); - write.write(tk); - write.newLine(); - } - write.newLine(); - } - reader.close(); - write.flush(); - write.close(); - - } - -} -- libgit2 0.22.2